admin 发表于 2010-12-3 12:35:56

破解常见反汇编代码

1)经典比较组合,常为注册码出现处(by programhunter)
1 mov   eax [       ]   ;这里可以是地址,也可以是其它寄存器mov   edx [       ]; 同上   通常这两个地址就储存着重要信息
call 00??????
test eax eax
jz(jnz)
2
mov   eax [       ]   ;这里可以是地址,也可以是其它寄存器
mov   edx [       ]   同上   通常这两个地址就储存着重要信息
call 00??????
jne(je)
3
   mov eax [   ]
   mov edx [   ]
   cmp eax,edx
   jnz(jz)
或者
begin   mov al [   ]
       mov cl [   ]
       cmp al,cl
       jnz(jz)
       mov al [   +1]
       mov cl [   +1]
       cmp al,cl
       jnz(jz)
       cmp eax ecx (eax为计数器)
       jnl begin
       mov al 01
4
   lea edi [   ]
   lea esi [   ]
   repz cmpsd
   jz(jnz)
5
   mov   eax [       ]   ;这里可以是地址,也可以是其它寄存器
   mov   edx [       ]   ;同上   通常这两个地址就储存着重要信息
   call 00??????
   setz (setnz) al (bl,cl…)
6
mov   eax [       ]   ;这里可以是地址,也可以是其它寄存器
mov   edx [       ]   ;同上   通常这两个地址就储存着重要信息
call 00??????
test eax eax
setz (setnz) bl,cl…
7

call 00??????   *** ; 这个形式比较特别,它的关键比较地方不在第二call中,而在第一call中
push eax (ebx,ecx…)
……
……
call 00??????
pop eax (ebx,ecx…)
test eax eax
jz(jnz)

(2)注册码按字节依次给出
0042A159 0FBE03                   movsx eax, byte ptr
0042A15C 50                     push eax             ;^^^^^
0042A15D E8228C0400               call 00472D84
0042A162 59                     pop ecx
0042A163 83F84A                   cmp eax, 0000004A; ---->J
0042A166 7559                     jne 0042A1C1
0042A168 0FBE5301               movsx edx, byte ptr
0042A16C 52                     push edx             ;^^^^^^^
0042A16D E8128C0400               call 00472D84
0042A172 59                     pop ecx
0042A173 83F853                   cmp eax, 00000053 ;^^^^^^^^^^^^^^^^^----> S
0042A176 7549                     jne 0042A1C1
0042A178 0FBE4B02               movsx ecx, byte ptr
0042A17C 83F924                   cmp ecx, 00000024   ;^^^^^^^^^^^^^^^^^^^^^^^^----> $
0042A17F 7540                     jne 0042A1C1
0042A181 0FBE4303               movsx eax, byte ptr
0042A185 83F832                   cmp eax, 00000032   ;^^^^^^^^^^^^^^^^^^^^^^^^^----> 2
0042A188 7537                     jne 0042A1C1
0042A18A 0FBE5304               movsx edx, byte ptr
0042A18E 83FA38                   cmp edx, 00000038   ;^^^^^^^^^^^^^^^^^^^^^^^^^----> 8
0042A191 752E                     jne 0042A1C1
0042A193 0FBE4B05               movsx ecx, byte ptr
0042A197 83F939                   cmp ecx, 00000039   ;^^^^^^^^^^^^^^^^^^^^^^^^----> 9
0042A19A 7525                     jne 0042A1C1
0042A19C 0FBE4306               movsx eax, byte ptr
0042A1A0 83F832                   cmp eax, 00000032   ;^^^^^^^^^^^^^^^^^^^^^^^^^----> 2
0042A1A3 751C                     jne 0042A1C1
0042A1A5 0FBE5307               movsx edx, byte ptr
0042A1A9 83FA31                   cmp edx, 00000031   ^^^^^^^^^^^^^^^^^^^^^^^^^----->1
(3)比较位数
cmp dword ptr,0000000A
jne/jge/jle/je 00xxxx

mov eax, dword ptr
call 00xxxx
cmp eax, 0000000A ;<----比较注册码是否为10位
jne 00xxxxx   ;<----不是,错
(4)VB程序经典比较
PUSH       XXX                     ;假注册码
PUSH       XXX                     ;真注册码
CALL      
TEST       EAX,EAX
JNZ       00XXXXX
(5)SmartCheck中,注册码常出现处
__vbasrtcmp(String:"zzzzz",String:"yyyyy")returns
__vbaStrVarVal(VARIATN:String"a") returns
__vbaVarTstEq(VARIANT:****, VARIANT:****) returns
(6)依次取两位比较
004044D8 8A10   mov dl, byte ptr
004044DA 8ACA   mov cl, dl
004044DC 3A16   cmp dl, byte ptr
004044DE 751C   jne 004044FC
004044E0 84C9   test cl, cl
004044E2 7414   je 004044F8
004044E4 8A5001   mov dl, byte ptr
004044E7 8ACA   mov cl, dl
004044E9 3A5601   cmp dl, byte ptr
004044EC 750E   jne 004044FC
004044EE 83C002   add eax, 00000002 ***
004044F1 83C602   add esi, 00000002 ***
004044F4 84C9   test cl, cl
004044F6 75E0   jne 004044D8
每次程序依次取两位,放入byte ptr ,byte ptr ,与eax, eax+1比较。如此循环
(7)小写转大写(一时找不到,自己补充)
(8)大写转小写(一时找不到,自己补充)


页: [1]
查看完整版本: 破解常见反汇编代码