逆向反汇编基础之十九:完美编码算NameLen

今天的CM是控制台的呵呵~

也算是一种类型了,完全没有API调用(其实API调用也就是封掉了一些东西 或者说MS直接给个函数你用 而不用你自己Dim),虽然是用PHI写的,但估计用0x10Asm写的也这样差不多~

反汇编这类小CM要主意的是.找对关键算法CALL,此CM依然算法简单到鬼一样~

但是其中PHI控制台的编码结构能让人眼前一亮 如果你长时间和各种invoke打交道的话~

但是这不是我今天要说的,我今天要说的是比较底层(16位汇编)的编码取得NameLen(用户名长度)或者KenLen 或者各种Len的问题.

首先看下面一段小代码:

00405BE4  /$  89FA          mov     edx, edi
00405BE6  |.  89C7          mov     edi, eax
00405BE8  |.  B9 FFFFFFFF   mov     ecx, -1
00405BED  |.  32C0          xor     al, al
00405BEF  |.  F2:AE         repne   scas byte ptr es:[edi]
00405BF1  |.  B8 FEFFFFFF   mov     eax, -2
00405BF6  |.  29C8          sub     eax, ecx
00405BF8  |.  89D7          mov     edi, edx
00405BFA  \.  C3            retn

请把地址忽略只看中间0x00405BED到0x00405BDF1部分,如果你经常在您的程序中调用API 你就会知道 这个其实很简单,不就是GetDlgItemTextA/W的返回值么?对的 就是取这个返回值,我们看不用API的情况下是怎么取得的~就是这三句代码,运用搜索SCAS返回NameLen

可见这是逐个判断 然后JNE则+1的~这比直接调用API得到返回值更清晰细腻

知道这个有什么用?一般如果是crackme 而且是反汇编后看不到一大堆API调用的crackme,都会有关于计算这类Len的CALL

在大堆Call中识别出这类Call能帮助你更快速的找到关键算法Call 而没有必要一个一个Call跟进去..好了 就这小目的而已 适合我等菜~

一组可用Key:

ShadowKong

115

http://dl.dbank.com/c01tq7y8q3

《逆向反汇编基础之十九:完美编码算NameLen》有一个想法

发表评论

邮箱地址不会被公开。 必填项已用*标注