qq513701092 发表于 2008-9-12 13:35

破解初学者基础知识 比较组合

经典比较组合,常为注册码出现处

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?????? ***

push eax (ebx,ecx…)

……

……

call 00??????

pop eax (ebx,ecx…)

test eax eax

jz(jnz)

这个形式比较特别,它的关键比较地方不在第二call中,而在第一call中

(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比较。如此循环.==============================================

chjako 发表于 2008-9-12 13:49

谢谢楼主。我学习了。

cc420cc 发表于 2008-9-12 14:56

谢谢楼主

lafeng 发表于 2008-9-13 03:26

谢谢你了,我要学习了

zsoyo 发表于 2008-10-13 22:35

说一声辛苦,道一声谢谢

awen6688 发表于 2008-10-20 13:33

说一声辛苦,谢谢楼主。我学习了。

xmdangdang 发表于 2008-10-24 10:42

谢谢楼主 我学习了

6201314 发表于 2008-10-24 11:20

受益很深啊~~~谢谢了~~~~

娱乐 发表于 2008-10-24 15:52

说一声辛苦,谢谢楼主

史路比 发表于 2008-10-25 08:29

谢谢LZ
分享了!!
页: [1] 2
查看完整版本: 破解初学者基础知识 比较组合