今天的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
《逆向反汇编基础之十九:完美编码算NameLen》有一个想法