解密入门教学(六)--寻找软件的注册码

回复 星标
更多

解密入门教学(六)--寻找软件的注册码

我们来寻找软件真正的注册码! 寻找软件的注册码就像你小时玩的躲猫猫一样,简单又有趣,虽然后来你会不这样觉的。

好的,我们开始。

我不知道你有没有明白我前面在原理中讲的那些东西,如果没明白,我就再说一遍

软件通过你输入的用户名或者机器码什么的生成一个正确的注册码来与你输入的注册码进行比较,如果两个相同,也就是说你输入的注册码是正确的话,那软件就会完成注册。如果你输入的不正确,嘿嘿,当然就不会注册成功。

现在你已经知道软件会有一个比较两个注册码的过程,这就是关键所在。一般如果你遇到的是那种明码比较的软件,这会是一件非常另人愉快的事情的。

软件会先计算出正确的注册码然后再与你输入的那个进行比较,也就是说正确的注册码会被软件自己算出来!

我接着说,虽然现在的软件已经比以前要厉害上许多,但,那种用明码比较的,还是大有人在的。所谓明码比较,就是说软件先算出正确的注册码,然后放到内存或你家的沙发下面,之后再得到你输入的那个注册码,接着就比较了。好理解吧,我们只要找到那个比较的地方,看一下软件把注册码放到内存的哪里了,再到相应的内存处瞧一瞧,就万事OK了!

还记的对你说过的那些常见的(也是最菜的)比较吗?我捡其中最简单的一个来给你再解释一下:

mov eax [      ]   这里可以是地址,也可以是其它寄存器 该条指令也可以是mov eax [       ]

mov edx [      ]   同上   通常这两个地址就储存着重要信息  该指令也可以是 pop edx

call 00??????   关键call

jz(jnz)或 jne(je)  关键跳转

第一条 mov eax [   ]指令是将一个内存地址或另外一个寄存器(该寄存器中装的是内存地址)装入 eax 中。第二条指令与其相同,是将一个内存地址或另外一个寄存器中的内存地址装入 edx 中。而这两条指令是干什么的呢?嘿嘿嘿嘿…

这两条指令就是用来存放真假两个注册码的地址的,也就是说 eax 和 edx 这两个寄存器中此时一个装的是正确的注册码的内存地址,一个是你输入的那个错误的注册码的内存地址。软件在比较注册码前将两个注册码的内存地址分别装入到两个寄存器中,然后就是关键 Call 出场。在这个关键 Call 中对注册码进行比较时,软件会从相应的寄存器中取出两个注册码来比较,接着出来就是一个关键跳转,通过上面 Call 中的比较结果来做相应的跳转…

你应该已经想到什么了吧!没错,我们只要找到软件的关键Call,然后在关键Call处来查看相应的内存地址就可以找到正确的注册码了  而这一切,都可以通过调试器来完成。从某种意义上来说,如果你能自己一个人把你家的微波炉修好,那你就绝对会用调试器  我们在调试器中,只要一步一步执行到关键Call处,然后用d eax和d edx就可以查看两个地址中放的两个注册码,如果你发现其中的一个是你自己刚才输入的,那么另一条就是正确的

我们剩下的问题就是如何来找个这关键 Call 了,基本上来说你就用前边给你讲爆破时的那种方法就可以了,很简单的

但是就像你家后门的玻璃可能永远擦不干净一样,我们家后门的玻璃也从来没擦干净过  导演:NG!重说,就像所有事情都有例外一样,有些软件的关键Call会比较难找一点,但如果你掌握了适当的方法,同样也会很好找的...

我们就来玩玩吧:

首先,我们还来用****ZIP这个软件上上手^_^

它已经是我们的老朋友了,所以就不用再介绍它了吧

好的,我们先装上它,接着我们点帮助-注册,输入Name:Suunb[CCG],Code:19870219

下断点来到:

0167:00436d13 mov      [ebx+0c],eax

0167:00436d16 mov     eax,[ebx]

0167:00436d18 cmp     eax,byte +0c

0167:00436d1b jnz     00436d38

0167:00436d1d mov     edx,[ebx+08]

0167:00436d20 push     edx

0167:00436d21 mov     ecx,[ebx+04]

0167:00436d24 mov     edx,eax

0167:00436d26 mov     eax,esi

0167:00436d28 call     00432b24

...省略N多代码...

我们看到 004f4dec 处的那个跳转以及它上面的关键 CALL 了  我们按 F10 单步执行到 004f4de7 处(即关键CALL处)后下指令 d edx 就可看到真正的注册码,而 d eax 则可以看到我刚才输入的19870219

代码给你:

0167:004f4dc4 mov     eax,[ebp-08]      <---7下F12,1下F10就来到这里(此时ebp-08处放的是刚才输入的注册码19870219)

0167:004f4dc7 push     eax               <---将EAX压栈;

0167:004f4dc8 lea     edx,[ebp-10]

0167:004f4dcb mov     eax,[ebx+02e0]

0167:004f4dd1 call     00432f24          <---该CALL用来得到用户输入的用户名,其实就是某个API函数,嘿嘿,好奇的话可以追进去看看

0167:004f4dd6 mov     edx,[ebp-10]      <---将得到的用户名放入EDX;

0167:004f4dd9 lea     ecx,[ebp-0c]

0167:004f4ddc mov     eax,ebx

0167:004f4dde call     004f4fac          <---该CALL用来计算出真正的注册码;

0167:004f4de3 mov     edx,[ebp-0c]      <---将计算出的真.注册码放入EDX,在下条指令时可用D EDX查看;

0167:004f4de6 pop     eax               <---先前压入的注册码出栈;

0167:004f4de7 call     0040411c          <---该CALL用来比较两个注册码,罪魁祸首啊!;

0167:004f4dec jnz     004f4e64          <---不相等则跳,跳必死,暴破将75改为74或EB,当然90也行;

0167:004f4dee mov     dl,01

0167:004f4df0 mov     eax,[00452558]

0167:004f4df5 call     00452658

0167:004f4dfa mov      [ebp-04],eax

0167:004f4dfd xor     eax,eax

0167:004f4dff push     ebp

0167:004f4e00 push     dword 004f4e5d

0167:004f4e05 push     dword [fs:eax]

0167:004f4e08 mov      [fs:eax],esp

0167:004f4e0b mov     cl,01

0167:004f4e0d mov     edx,004f4ea8

0167:004f4e12 mov     eax,[ebp-04]

0167:004f4e15 call     0045283c

0167:004f4e1a mov     ecx,004f4ecc

0167:004f4e1f mov     edx,004f4ef4

0167:004f4e24 mov     eax,[ebp-04]

0167:004f4e27 call     00452c80

0167:004f4e2c mov     eax,004f4f00

0167:004f4e31 call     00458b8c

0167:004f4e36 mov     eax,[0050306c]

0167:004f4e3b mov     eax,[eax]

0167:004f4e3d mov     edx,004f4f24

0167:004f4e42 call     00432f54

0167:004f4e47 xor     eax,eax

0167:004f4e49 pop     edx

0167:004f4e4a pop     ecx

0167:004f4e4b pop     ecx

0167:004f4e4c mov      [fs:eax],edx

0167:004f4e4f push     dword 004f4e6e

0167:004f4e54 mov     eax,[ebp-04]

0167:004f4e57 call     004030c4

0167:004f4e5c ret

0167:004f4e5d jmp     00403824

0167:004f4e62 jmp     short 004f4e54

0167:004f4e64 mov     eax,004f4f48      <---由上面的0167:004f4dec处跳来,挂!;

0167:004f4e69 call     00458b8c

0167:004f4e6e xor     eax,eax

整理:

Name: Suunb[CCG]

Code: SCCG5296

是不是很简单?我说过了嘛,其实并不难的

<本章完>

508972

中国年

看 雪 学 院


508972

2017-02-17 22:27:22更新过
此帖已被锁定,无法回复
新窗口打开 关闭