破解圣经之------滚瓜烂熟篇(背50遍)(高手莫入) 

(1)经典比较组合,常为注册码出现处(by programhunter) 

    mov  eax [      ]  这里可以是地址,也可以是其它寄存器 
    mov  edx [      ]  同上  通常这两个地址就储存着重要信息 
    call 00?????? 
    test eax eax 
    jz(jnz) 

    mov  eax [      ]  这里可以是地址,也可以是其它寄存器 
    mov  edx [      ]  同上  通常这两个地址就储存着重要信息 
    call 00?????? 
    jne(je) 

  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 

    lea edi [    ] 
    lea esi [    ] 
    repz cmpsd 
    jz(jnz) 

    mov  eax [      ]  这里可以是地址,也可以是其它寄存器 
    mov  edx [      ]  同上  通常这两个地址就储存着重要信息 
    call 00?????? 
    setz (setnz) al (bl,cl…) 

    mov  eax [      ]  这里可以是地址,也可以是其它寄存器 
    mov  edx [      ]  同上  通常这两个地址就储存着重要信息 
    call 00?????? 
    test eax eax 
    setz (setnz) bl,cl… 

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

(2)注册码按字节依次给出 
:0042A159 0FBE03                  movsx eax, byte ptr [ebx] 
: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 [ebx+01] 
: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 [ebx+02] 
:0042A17C 83F924                  cmp ecx, 00000024    ^^^^^^^ 
                                  ^^^^^^^^^^^^^^^^^----> $ 
:0042A17F 7540                    jne 0042A1C1 
:0042A181 0FBE4303                movsx eax, byte ptr [ebx+03] 
:0042A185 83F832                  cmp eax, 00000032  ^^^^^^^^ 
                                  ^^^^^^^^^^^^^^^^^----> 2 
:0042A188 7537                    jne 0042A1C1 
:0042A18A 0FBE5304                movsx edx, byte ptr [ebx+04] 
:0042A18E 83FA38                  cmp edx, 00000038  ^^^^^^^^ 
                                  ^^^^^^^^^^^^^^^^^----> 8 
:0042A191 752E                    jne 0042A1C1 
:0042A193 0FBE4B05                movsx ecx, byte ptr [ebx+05] 
:0042A197 83F939                  cmp ecx, 00000039  ^^^^^^^ 
                                  ^^^^^^^^^^^^^^^^^----> 9 
:0042A19A 7525                    jne 0042A1C1 
:0042A19C 0FBE4306                movsx eax, byte ptr [ebx+06] 
:0042A1A0 83F832                  cmp eax, 00000032  ^^^^^^^^ 
                                  ^^^^^^^^^^^^^^^^^----> 2 
:0042A1A3 751C                    jne 0042A1C1 
:0042A1A5 0FBE5307                movsx edx, byte ptr [ebx+07] 
:0042A1A9 83FA31                  cmp edx, 00000031  ^^^^^^^^                                                                                                                                                                                                            
                                  ^^^^^^^^^^^^^^^^^ 
                                                  ----->1 
(3)比较位数 
cmp dword ptr[ebp-04],0000000A 
jne/jge/jle/je 00xxxx 
或 
mov eax, dword ptr [ebp-04] 
call 00xxxx 
cmp eax, 0000000A <----比较注册码是否为10位 
jne 00xxxxx  <----不是,错 
(4)VB程序经典比较 
PUSH      XXX                      //假注册码 
PUSH      XXX                      //真注册码 
CALL      [MSVBVM60!__vbaStrCmp] 
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 [eax] 
:004044DA 8ACA    mov cl, dl 
:004044DC 3A16    cmp dl, byte ptr [esi] 
:004044DE 751C    jne 004044FC 
:004044E0 84C9    test cl, cl 
:004044E2 7414    je 004044F8 
:004044E4 8A5001  mov dl, byte ptr [eax+01] 
:004044E7 8ACA    mov cl, dl 
:004044E9 3A5601  cmp dl, byte ptr [esi+01] 
: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 [esi],byte ptr [esi+1],与eax, eax+1比较。如此循环 
(7)小写转大写(一时找不到,自己补充) 
(8)大写转小写(一时找不到,自己补充)