誮訫靉 发表于 2006-6-6 21:52:00

献给破解新手:妙解破解的原理

不可不说一下学习破解的三个阶段: <br/><br/>  初级,修改程序,用ultraedit等工具修改exe文件,称暴力破解,简称爆破。 <br/><br/>  中级,追出软件的注册码。 <br/><br/>  高级,写出注册机。 <br/><br/>  先说这爆破。所谓爆破,就是指通过修改可执行文件的源文件,来达到相应的目的。你不明白?呵呵,举个例子好了,比如说某共享软件,它比较用户输入的注册码,如果用户输入的,跟它通过用户名(或其它)算出来的注册码相等的话(也就是说用户输入的注册码正确了),那么它就会跳到注册成功的地方去,否则就跳到出错的地方去。 <br/><br/>  明白过来了吧,我们只要找到这个跳转指令,把它修改为我们需要的“造型”,这样,我们是不是就可以为所欲为了?(某软件双手放在胸口,你要干嘛?) <br/><br/>  常见的修改方法有两种,我给你举例说明: <br/><br/>  no.1 <br/><br/>  在某软件中,这样来进行注册: <br/><br/>  00451239 CALL 00405E02 (关键CALL,用来判断用户输入的注册码是否正确) <br/><br/>  0045123D JZ 004572E6 (!!!&lt;--此为关键跳转,如果用户输入的注册码正确,就跳向成功处,即004572E6处) <br/><br/>  0045XXXX YYYYYYYYYY <br/><br/>  XXXXXXXX YYYYYYYYYY <br/><br/>  XXXXXXXX YYYYYYYYYY <br/><br/>  XXXXXXXX 执行到此处,就提示用户注册失败 <br/><br/>  ..提示用户注册码不正确等相关信息 <br/><br/>  ... <br/><br/>  004572E6 ... &lt;--(注册成功处!!!) <br/><br/>  ...提示用户注册成功等相关信息 <br/><br/>  呵呵,看明白了吗?没有的话,我来给你讲一下。在软件执行到00451239处的时候,CALL置0045E02处来进行注册码判断。接着回来后就来一个跳转语句,即如果用户输入的注册码正确就跳到004572E6处,跳到此处,就算是注册成功了。如果用户输入的注册码不正确的话,那么就不会在0045123D处进行跳转,而一直执行下去。在下面等它的,是注册失败部分。 <br/><span id="copyid2" style="FONT-SIZE: 9pt;">想明白了吗?嘿嘿...没错,我们只要把那个关键跳转JZ给改为JNZ(如果用户输入的注册码错误,就注册成功,输入正确则注册失败)。当然你也可以将JNZ修改为Jmp,这样的话,你输入的注册码无论正确与否。都可以注册成功。 <br/><br/>  no.2 <br/><br/>  我们再来讲一下另外的一种情况: <br/><br/>  00451239 CALL 00405E02 (关键CALL,用来判断用户输入的注册码是否正确) <br/><br/>  0045123D JNZ 004572E6 (!!!&lt;--此为关键跳转,如果用户输入的注册码不正确,就跳向失败处,即004572E6处) <br/><br/>  0045XXXX YYYYYYYYYY <br/><br/>  XXXXXXXX YYYYYYYYYY <br/><br/>  XXXXXXXX YYYYYYYYYY <br/><br/>  XXXXXXXX 执行到此处,就提示用户注册成功 <br/><br/>  ...提示用户注册成功等相关信息 <br/><br/>  ... <br/><br/>  004572E6 ... &lt;--(注册失败处!!!) <br/><br/>  ...提示用户注册码不正确等相关信息 <br/><br/>  这次我相信,并且深信不疑。你一定明白了。我还是不明白...倒... <br/><br/>  你一定看出跟第一种情况不同的地方了吧。没错!它与第一种不同的,就是第一种情况是如果注册码正确,就跳到注册成功处,如果没有跳走,就会执行到失败处。而这一种情况则是如果注册码不正确,就跳到注册失败处,否则将执行到注册成功处。 <br/><br/>  这种情况的修改,除了把JNZ改为JZ外,还可以将其改为Nop,Nop这个指令没有任何意义,将该条指令修改为Nop后,便可随意输入注册码来进行注册了。 <br/><br/>  原理以经给你讲了,下面我们再来讲一下具体的修改办法吧。(我假设你以经明白了我所说的工具的使用方法) </span><br/><br/><br/>

誮訫靉 发表于 2006-6-6 21:54:00

<span id="copyid4" style="FONT-SIZE: 9pt;">面列出两个最常见的情况(可参考相关教程): <br/><br/>  no.1 <br/><br/>  mov eax [ ] 这里可以是地址,也可以是其它寄存器 <br/><br/>  mov edx [ ] 同上,该条指令也可以是pop edx <br/><br/>  call 00?????? 关键call <br/><br/>  test eax eax <br/><br/>  jz(jnz)或jne(je) 关键跳转 <br/><br/>  看明白了吧,在关键CALL之前,软件会把两个注册码分别放入eax和edx中,你只要在CALL处下d eax或d edx就能看到正确的注册码了。 <br/><br/>  no.2 <br/><br/>  mov eax [ ] 这里可以是地址,也可以是其它寄存器 <br/><br/>  mov edx [ ] 同上,该条指令也可以是pop edx <br/><br/>  call 00?????? 关键call <br/><br/>  jne(je) 关键跳转 <br/><br/>  以上两种情况最为常见,而那些个不太常见的情况,我们这里就不再提了。到下下一章的时候,我会给你讲相关方法的... <br/><br/>  关于查找软件注册码的部分,就到这里。具体内容,下下一章咱们再说。(不是说了吗?我以经可以接到你的砖头了,干嘛还要丢呢? ) <br/><br/>  最后,再来说最后的所谓的高级阶段,如果你相信自己。并且热爱Crack,那么你一定会熬到这个阶段的,只是时间因人而异。 <br/><br/>  其实分析软件的算法,是有好多技巧在里面的。呵呵,最起码我刚开始的时候就摸不着头脑,那么多CALL,每个看起来,都很重要,都追一遍?结果连好多API都被追了进去。等你自己真正用心分析了一个软件的算法,并写出了注册机后。你就会明白其中的道理了。<a href="http://www.enet.com.cn/" target="_blank"><img src="http://images.enet.com.cn/end.gif" align="absMiddle" border="0" style="CURSOR: pointer;" alt=""/></a><br/></span>
页: [1]
查看完整版本: 献给破解新手:妙解破解的原理