暴力破解经验谈
[size=3][font=宋体][/font][/size][font=宋体][size=3]用暴力破解的方法破解了一个软件。软件的破解过程非常简单,破解的方法也简单有效,破解的效果也十分成功。但是在文章的最后留下了两个疑问:[/size][/font]
[font=Times New Roman][size=3][/size][/font]
[size=3][font=Times New Roman]1[/font][font=宋体])怎样确定修改的位置。[/font][font=Times New Roman]2[/font][font=宋体])确定了修改的位置怎样去修改。[/font][/size]
[font=Times New Roman][size=3][/size][/font]
[size=3][font=宋体]这两个问题是困扰初学者的最大的两个问题,因为软件一旦经过调试器的编译就会产生成千上万行的代码,要在这代码的海洋里[/font][font=Times New Roman] [/font][font=宋体]“确定修改位置”就好比是大海里捞针。所以就必须有一定的方法去找到这枚针。而经过千辛万苦找到了要进行修改的位置,又遇到问题了。[/font][/size]
[font=宋体][size=3]如何去修改呢?如何修改才能达到效果呢?这样修改合适吗?等等。[/size][/font]
[font=宋体][size=3]在学习的过程中遇到了问题就要去解决它。这样才能提高。所以就让我们带着问题学习吧。[/size][/font]
[font=Times New Roman][size=3][/size][/font]
[font=宋体][size=3]准备知识:[/size][/font]
[font=Times New Roman][size=3][/size][/font]
[size=3][font=宋体]经典的汇编命令,[/font][font=Times New Roman]JZ/JE[/font][font=宋体]相等则跳转,[/font][font=Times New Roman]JNE/JNZ[/font][font=宋体]不相等则跳转,[/font][font=Times New Roman]JMP[/font][font=宋体]无条件跳转。[/font][/size]
[font=Times New Roman][size=3][/size][/font]
[font=宋体][size=3]第一部分:[/size][/font]
[font=Times New Roman][size=3][/size][/font]
[b][font=宋体][size=12pt]怎样确定修改的位置:[/size][/font][/b][b][size=12pt][/size][/b]
[font=宋体][size=3]要在代码的海洋中去定位一句代码进而去修改它,是一件很困难的事。所以就必须找到一定的线索,以便我们顺藤摸瓜的找到需要寻找的东西。现在的关键问题就在于如何去寻找这个线索?什么样的信息可以当作线索?既然归纳出了问题,就来一一解决吧。[/size][/font]
[font=Times New Roman][size=3][/size][/font]
[font=宋体][size=3]首先:[/size][/font]
[font=Times New Roman][size=3][/size][/font]
[size=3][color=red][font=宋体]如何去寻找这个线索?[/font][/color][color=red][/color][/size]
[color=red][font=Times New Roman][size=3][/size][/font][/color]
[size=3][font=宋体]要想找到这些线索第一步先要注意软件给我们的信息。例如:在注册窗口中任意输入注册码后,软件弹出的“注册失败”,“注册码错误”,“无效的注册码”等等这些提示我们注册失败的信息。也可以是“注册成功”,“注册码正确,感谢使用[/font][font=Times New Roman] [/font][font=宋体]”等等注册成功的提示信息。对于这些内容将它们归纳为“注册提示信息”。[/font][/size]
[font=Times New Roman][size=3][/size][/font]
[size=3][font=宋体]所以“寻找线索”第一步:留心软件的[/font][font=Times New Roman] [/font][font=宋体]“注册提示信息”。[/font][/size]
[font=Times New Roman][size=3][/size][/font]
[size=3][font=宋体]这些“注册提示信息”往往就是破解一个软件的突破口,当然在正常情况下也是很容易得到的,只需要任意输入一些注册名之类的内容,程序就会做出判断,而这些“注册提示信息”就是程序经过判断后所作出的反映。但是如何在被调试状态下的程序中找到这些注册信息呢。也就是如何在跟踪一个程序时去寻找这些“注册提示信息”。说道这里,就要给大家介绍一下:[/font][font=宋体][size=9pt] OllyDBG[/size][/font][font=宋体][size=9pt](OD)的“字符串参考”功能。[/size][/font][/size]
[font=Times New Roman][size=3][/size][/font]
[size=3][font=宋体]先将任意一个软件用[/font][font=Times New Roman]OD[/font][font=宋体]载入。第一种方法:[/font][font=宋体][size=9pt]我们在反汇编窗口中单击鼠标右键,在弹出的菜单菜单中,我们选择“查找”再点击“所有参考文本字串”(如图1)。[/size][/font][/size]
[font=宋体][size=9pt][size=3][/size][/size][/font]
[size=3][font=宋体]第二种方法:利用[/font][font=Times New Roman]OD[/font][font=宋体]的插件(新版本的[/font][font=Times New Roman]OD[/font][font=宋体]都会自带这个插件的)。[/font][font=Times New Roman] [/font][font=宋体]依然在反汇编窗口中单击鼠标右键,在弹出的菜单菜单中,我们选择“[/font][font=Times New Roman]Ultra String Reference[/font][font=宋体]”或是“超级字符串参考”再点击“[/font][font=Times New Roman]Find ASCII[/font][font=宋体]”(如图[/font][font=Times New Roman]2[/font][font=宋体])。这两种方法都可以开启[/font][font=Times New Roman]OD[/font][font=宋体]的[/font][font=宋体][size=9pt]“字符串参考”功能。建议使用第2种方法。当选择完后,在OD中会来到一个新的窗口(如图3)在这里软件的[/size][/font][font=宋体]“注册提示信息”一目了然。[/font][/size]
[size=3][font=宋体]所以“寻找线索”第二步[/font][font=Times New Roman]:[/font][font=宋体]在调试器中寻找软件的“注册提示信息”。[/font][/size]
[font=Times New Roman][size=3][/size][/font]
[size=3][font=宋体]现在我们已经了解到如何去寻找线索了[/font][font=Times New Roman],[/font][font=宋体]有了方法但还缺少目标。那就是第二个问题[/font][font=Times New Roman]:[/font][/size]
[font=Times New Roman][size=3][/size][/font]
[size=3][color=red][font=宋体]什么样的信息可以当作线索[/font][/color][color=red][font=Times New Roman]?[/font][/color][/size]
[size=3][color=black][font=宋体]这个问题也很重要[/font][/color][color=black][font=Times New Roman],[/font][/color][color=black][font=宋体]结合上文中提到的[/font][/color][color=black][font=Times New Roman]”[/font][/color][color=black][font=宋体]注册提示信息[/font][/color][color=black][font=Times New Roman]”[/font][/color][color=black][font=宋体]一般来说可以当作线索的信息可以细分为两类[/font][/color][color=black][font=Times New Roman]”[/font][/color][color=black][font=宋体]注册成功提示[/font][/color][color=black][font=Times New Roman]”[/font][/color][color=black][font=宋体]和[/font][/color][color=black][font=Times New Roman]”[/font][/color][color=black][font=宋体]注册失败提示[/font][/color][color=black][font=Times New Roman]”[/font][/color][color=black][font=宋体]。[/font][/color][color=black][/color][/size]
[size=3][color=black][font=宋体]在这两类信息中[/font][/color][color=black][font=宋体]经典的[/font][/color][color=black][font=宋体][size=10.5pt]语句例如[/size][/font][/color][color=black][font=Tahoma][size=10.5pt]:[/size][/font][/color][color=black][font=宋体][size=10.5pt]“恭喜”,“注册成功”,“注册码错误”[/size][/font][/color][/size]
[size=3][color=black][font=宋体][size=10.5pt]“无效的注册码”,“[/size][/font][/color][color=black][font=Tahoma][size=10.5pt]Thank You","Sorry"[/size][/font][/color][color=black][font=宋体][size=10.5pt]。。。等等这些都可以成为线索。[/size][/font][/color][color=black][font=Tahoma][size=10.5pt][/size][/font][/color][/size]
[size=3][color=black][font=宋体][size=10.5pt]如果在调试器中找不到这些经典又明显的字眼[/size][/font][/color][color=black][font=Tahoma][size=10.5pt],[/size][/font][/color][color=black][font=宋体][size=10.5pt]这时我们要把更多的注意力转到其它的可疑点。如未注册标识,过期警告,次数标识,[/size][/font][/color][color=black][font=Tahoma][size=10.5pt]NAG[/size][/font][/color][color=black][font=宋体][size=10.5pt]对话框。。。等等。[/size][/font][/color][color=black][font=Tahoma][size=10.5pt][/size][/font][/color][/size]
[size=3][color=black][font=宋体][size=10.5pt]综上所述[/size][/font][/color][color=black][font=Tahoma][size=10.5pt]:[/size][/font][/color][color=black][font=宋体][size=10.5pt]软件的注册提示信息[/size][/font][/color][color=black][font=Tahoma][size=10.5pt],[/size][/font][/color][color=black][font=宋体][size=10.5pt]未注册标志[/size][/font][/color][color=black][font=Tahoma][size=10.5pt],[/size][/font][/color][color=black][font=宋体][size=10.5pt]过期警告[/size][/font][/color][color=black][font=Tahoma][size=10.5pt],[/size][/font][/color][color=black][font=宋体][size=10.5pt]功能限制警告[/size][/font][/color][color=black][font=Tahoma][size=10.5pt]…[/size][/font][/color][color=black][font=宋体][size=10.5pt]这些信息都可以当作线索。[/size][/font][/color][color=black][font=Tahoma][size=10.5pt][/size][/font][/color][/size]
[size=3][color=black][font=Tahoma][size=10.5pt]
[/size][/font][/color][color=black][font=宋体][size=10.5pt]找到了线索[/size][/font][/color][color=black][font=Tahoma][size=10.5pt],[/size][/font][/color][color=black][font=宋体][size=10.5pt]那么这一节的主要问题[/size][/font][/color][color=black][font=Tahoma][size=10.5pt]”[/size][/font][/color][color=black][font=宋体][size=10.5pt]确定修改的位置[/size][/font][/color][color=black][font=Tahoma][size=10.5pt]”[/size][/font][/color][color=black][font=宋体][size=10.5pt]也就可以解决了。这里我采取先实践后总结的方法[/size][/font][/color][color=black][font=Tahoma][size=10.5pt],[/size][/font][/color][color=black][font=宋体][size=10.5pt]来给大家解答这个问题。[/size][/font][/color][color=black][font=Tahoma][size=10.5pt][/size][/font][/color][/size]
[color=black][font=Tahoma][size=10.5pt][size=3][/size][/size][/font][/color]
[size=3][color=black][font=宋体][size=10.5pt]第二部分[/size][/font][/color][color=black][font=Tahoma][size=10.5pt]:[/size][/font][/color][/size]
[color=#333333][font=Tahoma][size=9pt][size=3][/size][/size][/font][/color]
[b][font=宋体][size=12pt]动手实践[/size][/font][/b][b][font=Tahoma][size=12pt]:[/size][/font][/b]
[b][size=12pt][font=Times New Roman][/font][/size][/b]
[font=宋体][size=9pt][size=3]一下子了看了这么多,肯定有点厌烦了。现在就来动手实践一下吧:这次我们以一款Mp3相关的软件< LRC 傻瓜编辑器>为例,来开始我们的手动实践。[/size][/size][/font]
[font=宋体][size=9pt][size=3][/size][/size][/font]
[size=3][b][font=宋体]第一步[/font][/b][font=Times New Roman]:[/font][font=宋体]初步检测[/font][/size]
[size=3][font=宋体]用[/font][font=Times New Roman]PEID[/font][font=宋体]检查一下目标软件[/font][font=Times New Roman]([/font][font=宋体]如图[/font][font=Times New Roman]4) [/font][font=宋体]发现软件没有加壳[/font][font=Times New Roman],[/font][font=宋体]是用[/font][font=Times New Roman]Borland Delphi[/font][font=宋体]编写的。[/font][/size]
[font=Times New Roman][size=3][/size][/font]
[size=3][b][font=宋体]第二步[/font][/b][font=Times New Roman]:[/font][font=宋体]留心注册提示[/font][/size]
[size=3][font=宋体]先运行一下软件[/font][font=Times New Roman],[/font][font=宋体]找到注册窗口。[/font][font=Times New Roman]([/font][font=宋体]如图[/font][font=Times New Roman]5 ),[/font][font=宋体]同时我们也看到了没有注册的软件只能使用[/font][font=Times New Roman]15[/font][font=宋体]天。任意输入注册名与注册码[/font][font=Times New Roman],[/font][font=宋体]看看有什么结果。发现电机确定按钮后没有任何反应。没有了提示信息这可怎么办呢[/font][font=Times New Roman]?[/font][font=宋体]这里不用急[/font][font=Times New Roman],[/font][font=宋体]想想看[/font][font=Times New Roman],[/font][font=宋体]我们任意输入的注册码肯定不是正确的[/font][font=Times New Roman]([/font][font=宋体]如果是那就可以买彩票了[/font][font=Times New Roman])[/font][font=宋体]。对于错误的注册码程序不做出任何反应。但是如果是正确的注册码[/font][font=Times New Roman],[/font][font=宋体]程序肯定会告诉我们注册成功的。所以[/font][font=Times New Roman]:[/font][font=宋体]不是没有提示信息[/font][font=Times New Roman],[/font][font=宋体]只是我们没有发现。那就试着找找看能不能发现[/font][font=Times New Roman]”[/font][font=宋体]注册成功[/font][font=Times New Roman]”[/font][font=宋体]的提示信息。[/font][/size]
[size=3][font=Times New Roman]([/font][font=宋体]提示一下[/font][font=Times New Roman]:[/font][font=宋体]现在很多软件都是只有输入正确的注册码才会有明显的提示[/font][font=Times New Roman],[/font][font=宋体]如果遇到了有注册错误提示的软件[/font][font=Times New Roman],[/font][font=宋体]以错误提示作为线索[/font][font=Times New Roman],[/font][font=宋体]也许会更方便[/font][/size]
[size=3][/size]
[size=3][b][font=宋体]第三步[/font][/b][font=Times New Roman]:[/font][font=宋体]找到突破口[/font][/size]
[size=3][font=宋体]现在用[/font][font=Times New Roman]OD[/font][font=宋体]打开这个程序。用寻找字符串的方法。先打开字符串参考[/font][font=Times New Roman],[/font][font=宋体]虽然内容众多但是还是让我们找到了要找的东西[/font][font=Times New Roman]([/font][font=宋体]如图[/font][font=Times New Roman]6)[/font][font=宋体]。这是什么。呵呵[/font][font=Times New Roman]![/font][font=宋体]恰好就是十分经典的注册成功的提示。现在就可以说是[/font][font=Times New Roman]”[/font][font=宋体]找到线索[/font][font=Times New Roman]”[/font][font=宋体]了。[/font][/size]
[size=3][font=宋体]下一步就是[/font][font=Times New Roman]”[/font][font=宋体]确定修改的位置[/font][font=Times New Roman]”[/font][/size]
[font=Times New Roman][size=3][/size][/font]
[size=3][b][font=宋体]第四步[/font][/b][b][size=10.5pt][font=Times New Roman]:[/font][/size][/b][font=宋体]定位修改点[/font][font=Times New Roman]:[/font][/size]
[size=3][font=宋体]我们把光标定位在有注册成功提示的这一行代码上。然后双击左键。就还来到这个提示对应的代码处。[/font][font=Times New Roman]([/font][font=宋体]如图[/font][font=Times New Roman]7)[/font][/size]
[size=3][font=宋体]为了说明如何定位修改点。现在就要分析一下软件的注册流程了[/font][font=Times New Roman];[/font][font=宋体]这个软件的注册验证流程是这样的[/font][font=Times New Roman]:[/font][/size]
[font=宋体][size=3]用我们输入的注册码和经过算法计算出的注册码进行比较[/size][/font]
[font=宋体][size=3]如果两者不相等就跳向一个地方。[/size][/font]
[size=3][font=宋体]如果两者相等就弹出[/font][font=Times New Roman]”[/font][font=宋体]注册成功[/font][font=Times New Roman]”[/font][font=宋体]的提示。[/font][/size]
[size=3][font=宋体]简单的流程如上所说。注意这里的关键词[/font][font=Times New Roman]”[/font][font=宋体]跳转[/font][font=Times New Roman]”[/font][font=宋体]让我们再来看看图[/font][font=Times New Roman]7[/font][font=宋体]中的代码[/font][/size]
[size=3][font=Times New Roman]0047B676
|[/font][font=宋体]。[/font][font=Times New Roman] /0F85 A0000000 jnz
0047B71C[/font][/size]
[size=3][font=Times New Roman]0047B67C
|[/font][font=宋体]。[/font][font=Times New Roman] |8B45 FC
mov
eax, [ebp-4][/font][/size]
[size=3][font=Times New Roman]0047B67F
|[/font][font=宋体]。[/font][font=Times New Roman] |8B80 F4020000 mov
eax, [eax+2F4][/font][/size]
[size=3][font=Times New Roman]0047B685
|[/font][font=宋体]。[/font][font=Times New Roman] |BA 78B74700
mov
edx, 0047B778
;
[/font][font=宋体]您已经注册,多谢支持[/font][font=Times New Roman]![/font][/size]
[size=3][font=宋体]联系软件的注册流程。如果两者不相等就跳向另一个地方。如果两者相等就弹出[/font][font=Times New Roman]”[/font][font=宋体]注册成功[/font][font=Times New Roman]”[/font][font=宋体]的提示。[/font][font=Times New Roman] [/font][font=宋体]我们先猜测一下[/font][font=Times New Roman],[/font][font=宋体]在注册成功提示的上方应该有一个意思是[/font][font=Times New Roman]”[/font][font=宋体]不相等则跳走[/font][font=Times New Roman]”[/font][font=宋体]的跳转。而在[/font][font=Times New Roman]”[/font][font=宋体]您已经注册[/font][font=Times New Roman]”[/font][font=宋体]这个提示对应的代码上方刚好有一个跳转[/font][/size]
[size=3][font=Times New Roman]0047B676
|[/font][font=宋体]。[/font][font=Times New Roman] /0F85 A0000000 jnz
0047B71C[/font][/size]
[size=3][font=宋体]回忆一下[/font][font=Times New Roman]jnz[/font][font=宋体]表示什么样的跳转。刚好就是[/font][font=Times New Roman]”[/font][font=宋体]不相等就跳走[/font][font=Times New Roman]”[/font][font=宋体]。所以这个跳转非常可疑。先把它假设成我们要进行修改的位置。在这个跳转上打开[/font][font=Times New Roman]”[/font][font=宋体]汇编[/font][font=Times New Roman]”[/font][font=宋体]功能。将[/font][/size]
[size=3][font=Times New Roman]0047B676
|[/font][font=宋体]。[/font][font=Times New Roman] /0F85 A0000000 jnz
0047B71C[/font][/size]
[size=3][font=宋体]改成[/font][font=Times New Roman]:[/font][/size]
[size=3][font=Times New Roman]0047B676
|[/font][font=宋体]。[/font][font=Times New Roman] /0F85 A0000000 jz
0047B71C[/font][/size]
[size=3][font=宋体]把[/font][font=Times New Roman]”[/font][font=宋体]不相等就跳走[/font][font=Times New Roman]”[/font][font=宋体]改成[/font][font=Times New Roman]”[/font][font=宋体]相等就跳走[/font][font=Times New Roman]”[/font][font=宋体]这里恶搞了一下。如果我们找对了这个跳转就是要进行修改的位置[/font][font=Times New Roman],[/font][font=宋体]并且这样修改还成功了。那么我们任意输入注册码都会注册成功。但是要输入正确的注册码却不能成功注册了。因为我满把本来注册码错误时出现的结果与注册码正确实出现的结果打了个颠倒。呵呵[/font][font=Times New Roman]~![/font][font=宋体]是不是很有意思。[/font][/size]
[size=3][font=宋体]修改完毕后。保存我们修改后的文件[/font][font=Times New Roman]([/font][font=宋体]保存方法第一讲介绍过了[/font][font=Times New Roman])[/font][font=宋体]。运行修改后的软件。打开注册窗口。任意输入注册信息后。结果[/font][font=Times New Roman]([/font][font=宋体]如图[/font][font=Times New Roman]8)[/font][font=宋体]看到了吗[/font][font=Times New Roman]?[/font][font=宋体]注册成功了。这证明我们进行的。寻找线索[/font][font=Times New Roman],[/font][font=宋体]确定修改位置[/font][font=Times New Roman],[/font][font=宋体]修改方法都是正确的。[/font][/size]
[font=Times New Roman][size=3][/size][/font]
[size=3][color=black][size=10.5pt][font=Times New Roman] [/font][/size][/color][color=black][font=宋体]现在通过一个实例[/font][/color][color=black][size=10.5pt][font=Times New Roman],[/font][/size][/color][color=black][font=宋体]大概了解了一下如何定位[/font][/color][color=black][size=10.5pt][font=Times New Roman]”[/font][/size][/color][color=black][font=宋体]修改位置[/font][/color][color=black][size=10.5pt][font=Times New Roman]”[/font][/size][/color][/size]
[size=3][color=black][font=宋体][size=10.5pt]一般来说在[/size][/font][/color][color=black][font=Tahoma][size=10.5pt]”[/size][/font][/color][color=black][font=宋体][size=10.5pt]注册成功”,“注册码错误”这些提示对应代码向上不远处就应该可以看到条件转移语句[/size][/font][/color][color=black][font=Tahoma][size=10.5pt]JZ[/size][/font][/color][color=black][font=宋体][size=10.5pt]、[/size][/font][/color][color=black][font=Tahoma][size=10.5pt]JNZ[/size][/font][/color][color=black][font=宋体][size=10.5pt]、[/size][/font][/color][color=black][font=Tahoma][size=10.5pt]JLE[/size][/font][/color][color=black][font=宋体][size=10.5pt]这类的。[/size][/font][/color][color=black][font=Tahoma][size=10.5pt][/size][/font][/color][/size]
[size=3][color=black][font=宋体][size=10.5pt]而这些跳转很有可能就是我们需要进行修改的跳转。也就是破解过程中的[/size][/font][/color][color=black][font=Tahoma][size=10.5pt]”[/size][/font][/color][color=black][font=宋体][size=10.5pt]关键跳转[/size][/font][/color][color=black][font=Tahoma][size=10.5pt]”[/size][/font][/color][color=black][font=宋体][size=10.5pt]。修改了这类跳转一般就可以大大我们的目的了。[/size][/font][/color][/size][color=black][font=Tahoma][size=10.5pt]
[size=3] [/size][/size][/font][/color][size=3][color=black][font=宋体][size=10.5pt]事实上,只有极少极少的软件只修改注册判断就[/size][/font][/color][color=black][font=Tahoma][size=10.5pt]OK[/size][/font][/color][color=black][font=宋体][size=10.5pt]的。所以我们要把更多的注意力转到其它的可疑点。如未注册标识,过期警告,次数标识,[/size][/font][/color][color=black][font=Tahoma][size=10.5pt]NAG[/size][/font][/color][color=black][font=宋体][size=10.5pt]对话框。。。[/size][/font][/color][color=black][font=Tahoma][size=10.5pt],[/size][/font][/color][color=black][font=宋体][size=10.5pt]熟练使用各种工具的搜索功能。找到后再向上不远处找条件转移语句[/size][/font][/color][color=black][font=Tahoma][size=10.5pt][/size][/font][/color][/size]
[color=black][font=Tahoma][size=10.5pt][size=3][/size][/size][/font][/color]
[color=black][font=Tahoma][size=10.5pt][size=3][/size][/size][/font][/color]
[size=3][color=black][font=宋体][size=10.5pt]第三部分[/size][/font][/color][color=black][font=Tahoma][size=10.5pt]:[/size][/font][/color][/size]
[color=#333333][font=Tahoma][size=9pt][size=3][/size][/size][/font][/color]
[b][font=宋体][size=12pt]确定了修改的位置怎样去修改[/size][/font][/b][b][size=12pt][font=Times New Roman]:[/font][/size][/b]
[color=black][font=Times New Roman][size=3][/size][/font][/color]
[size=3][color=black][font=宋体]在实例中我们选择把[/font][/color][color=black][font=Times New Roman]JNZ[/font][/color][color=black][font=宋体]这个跳转改成了[/font][/color][color=black][font=Times New Roman]JZ[/font][/color][color=black][font=宋体]跳转。即把不相等就跳[/font][/color][color=black][font=Times New Roman],[/font][/color][color=black][font=宋体]改成了相等就跳。这样修改可以达到我们的目的。[/font][/color][color=black][/color][/size]
[color=black][font=Times New Roman][size=3][/size][/font][/color]
[size=3][color=black][font=宋体]那么对于修改跳转语句都有什么常用的方法呢[/font][/color][color=black][font=Times New Roman]?[/font][/color][color=black][font=宋体][size=9pt]一般情况下我们会根据不同情况进行不同的修改:对于我们初学者来说,掌握下面的修改方法就已经足够了。因为一般的软件只要按照下面两种方法进行修改都是可以成功的。不同的是修改的位置,与次数有所不同。[/size][/font][/color][color=black][font=Tahoma][size=9pt][/size][/font][/color][/size]
[color=black][font=Tahoma][size=9pt]
[size=3]1)[/size][/size][/font][/color][size=3][color=black][font=宋体][size=9pt]如果不需要跳转,[/size][/font][/color][color=black][font=Tahoma][size=9pt][/size][/font][/color][/size]
[size=3][color=black][font=宋体][size=9pt]就把[/size][/font][/color][color=black][font=Tahoma][size=9pt]JE/JNE,JZ/JNE[/size][/font][/color][color=black][font=宋体][size=9pt]这些跳转语句改成[/size][/font][/color][color=black][font=Tahoma][size=9pt] NOP[/size][/font][/color][/size]
[size=3][color=black][font=宋体][size=9pt]这样程序会什么判断也不做[/size][/font][/color][color=black][font=Tahoma][size=9pt],[/size][/font][/color][color=black][font=宋体][size=9pt]无条件地执行后面的语句。[/size][/font][/color][color=black][font=Tahoma][size=9pt][/size][/font][/color][/size]
[color=black][font=Tahoma][size=9pt][size=3][/size][/size][/font][/color]
[size=3][color=black][font=Tahoma][size=9pt]2)[/size][/font][/color][color=black][font=宋体][size=9pt]需要跳,我就把[/size][/font][/color][color=black][font=Tahoma][size=9pt]JE[/size][/font][/color][color=black][font=宋体][size=9pt],[/size][/font][/color][color=black][font=Tahoma][size=9pt]JZ[/size][/font][/color][color=black][font=宋体][size=9pt]这类的跳转改成[/size][/font][/color][color=black][font=Tahoma][size=9pt]JMP[/size][/font][/color][/size]
[size=3][color=black][font=宋体][size=9pt]这样不论程序作出如何判断[/size][/font][/color][color=black][font=Tahoma][size=9pt],[/size][/font][/color][color=black][font=宋体][size=9pt]都会产生相同的结果。[/size][/font][/color][color=black][font=Tahoma][size=9pt][/size][/font][/color][/size]
[color=black][font=Tahoma][size=9pt][size=3][/size][/size][/font][/color]
[size=3][color=black][font=宋体][size=9pt]现在我们已经了解到如何去修改了,但是好学的朋友肯定又有疑问了。[/size][/font][/color][color=black][font=Tahoma][size=9pt][/size][/font][/color][/size]
[color=black][font=Tahoma][size=9pt][size=3][/size][/size][/font][/color]
[b][font=宋体][size=12pt]为什么要这样修改呢?[/size][/font][/b][b][font=Tahoma][size=12pt][/size][/font][/b]
[size=3][color=black][font=宋体][size=9pt]要回答这个问题就要从程序的注册流程开始说起了:[/size][/font][/color][color=black][font=Tahoma][size=9pt][/size][/font][/color][/size]
[color=black][font=Tahoma][size=9pt][size=3][/size][/size][/font][/color]
[size=3][color=black][font=宋体][size=9pt](关键词解释:程序的注册流程,一般来说就是一个软件对注册码的验证过程。包括注册信息的获取,注册码的计算和真假注册码的比较。三个部分)。[/size][/font][/color][color=black][font=Tahoma][size=9pt][/size][/font][/color][/size]
[color=black][font=Tahoma][size=9pt][size=3][/size][/size][/font][/color]
[size=3][color=black][font=宋体][size=9pt]所以一般软件的注册流程就是:[/size][/font][/color][color=black][font=Tahoma][size=9pt][/size][/font][/color][/size]
[size=3][color=black][font=宋体][size=9pt]收集注册信息[/size][/font][/color][color=black][font=Tahoma][size=9pt]-----[/size][/font][/color][color=black][font=宋体][size=9pt]计算真正的注册码[/size][/font][/color][color=black][font=Tahoma][size=9pt]-----[/size][/font][/color][color=black][font=宋体][size=9pt]计算出的注册码与输入的注册码比较[/size][/font][/color][color=black][font=Tahoma][size=9pt][/size][/font][/color][/size]
[size=3][color=black][font=宋体][size=9pt]在这三个部分中,我们目前最关心的就是“真假注册码的比较”这一步骤。[/size][/font][/color][color=black][font=Tahoma][size=9pt][/size][/font][/color][/size]
[size=3][color=black][font=宋体][size=9pt]因为在这一步骤中会出现“分情况讨论”现象:[/size][/font][/color][color=black][font=Tahoma][size=9pt][/size][/font][/color][/size]
[color=black][size=9pt][font=Times New Roman][size=3]1)[/size]
[/font][/size][/color][size=3][color=black][font=宋体][size=9pt]如果我们输入的注册码与程序计算出的注册码相等,程序就会执行相应的代码。[/size][/font][/color][color=black][font=Tahoma][size=9pt][/size][/font][/color][/size]
[color=black][size=9pt][font=Times New Roman][size=3]2)[/size]
[/font][/size][/color][size=3][color=black][font=宋体][size=9pt]如果我们输入的注册码与程序计算出的注册码不相等,程序就会执行另一些代码。[/size][/font][/color][color=black][font=Tahoma][size=9pt][/size][/font][/color][/size]
[size=3][color=black][font=宋体][size=9pt]这里情况就变的很明了了。两者相等就执行注册成功的代码,两者不相等就执行注册失败的代码。[/size][/font][/color][color=black][font=Tahoma][size=9pt][/size][/font][/color][/size]
[color=black][font=Tahoma][size=9pt][size=3][/size][/size][/font][/color]
[size=3][color=black][font=宋体][size=9pt]联系上面常用到的修改代码。我们可以做一个假设:[/size][/font][/color][color=black][font=Tahoma][size=9pt][/size][/font][/color][/size]
[color=black][font=Tahoma][size=9pt][size=3][/size][/size][/font][/color]
[size=3][b][color=black][font=宋体][size=10.5pt]正常情况下程序会这样运行:[/size][/font][/color][/b][b][color=black][font=Tahoma][size=10.5pt][/size][/font][/color][/b][/size]
[size=3][color=black][font=宋体][size=9pt]两个注册码相等(联系汇编代码:[/size][/font][/color][color=black][font=Tahoma][size=9pt]jz[/size][/font][/color][color=black][font=宋体][size=9pt]和[/size][/font][/color][color=black][font=Tahoma][size=9pt]je[/size][/font][/color][color=black][font=宋体][size=9pt]),就提示我们“注册成功”[/size][/font][/color][color=black][font=Tahoma][size=9pt][/size][/font][/color][/size]
[size=3][color=black][font=宋体][size=9pt]两个注册码不相等(联系汇编代码:[/size][/font][/color][color=black][font=Tahoma][size=9pt]jnz[/size][/font][/color][color=black][font=宋体][size=9pt]和[/size][/font][/color][color=black][font=Tahoma][size=9pt]jne[/size][/font][/color][color=black][font=宋体][size=9pt]),就提示我们“注册失败”[/size][/font][/color][color=black][font=Tahoma][size=9pt][/size][/font][/color][/size]
[size=3][color=black][font=宋体][size=9pt]形象的说明一下:[/size][/font][/color][color=black][font=Tahoma][size=9pt][/size][/font][/color][/size]
[size=3][color=black][font=Tahoma][size=9pt]A[/size][/font][/color][color=black][font=宋体][size=9pt]:表示我们输入的注册玛[/size][/font][/color][color=black][font=Tahoma][size=9pt][/size][/font][/color][/size]
[size=3][color=black][font=Tahoma][size=9pt]B[/size][/font][/color][color=black][font=宋体][size=9pt]:表示程序计算出的真正的注册码[/size][/font][/color][color=black][font=Tahoma][size=9pt][/size][/font][/color][/size]
[size=3][color=black][font=宋体][size=9pt]现在判断[/size][/font][/color][color=black][font=Tahoma][size=9pt]A[/size][/font][/color][color=black][font=宋体][size=9pt]与[/size][/font][/color][color=black][font=Tahoma][size=9pt]B[/size][/font][/color][color=black][font=宋体][size=9pt]的值(联系汇编指令:[/size][/font][/color][color=black][font=Tahoma][size=9pt]CMP[/size][/font][/color][color=black][font=宋体][size=9pt])。[/size][/font][/color][color=black][font=Tahoma][size=9pt][/size][/font][/color][/size]
[size=3][color=black][font=Tahoma][size=9pt]CMP A[/size][/font][/color][color=black][font=宋体][size=9pt],[/size][/font][/color][color=black][font=Tahoma][size=9pt]B[/size][/font][/color][/size]
[size=3][color=black][font=宋体][size=9pt]对判断的结果分情况。[/size][/font][/color][color=black][font=Tahoma][size=9pt][/size][/font][/color][/size]
[size=3][color=black][font=Tahoma][size=9pt]1[/size][/font][/color][color=black][font=宋体][size=9pt])相等的情况:[/size][/font][/color][color=black][font=Tahoma][size=9pt]JE/JZ
[/size][/font][/color][color=black][font=宋体][size=9pt]“注册成功”(这样书写是不够规范的,不过只为说明问题)[/size][/font][/color][color=black][font=Tahoma][size=9pt][/size][/font][/color][/size]
[size=3][color=black][font=Tahoma][size=9pt]2[/size][/font][/color][color=black][font=宋体][size=9pt])不等的情况:[/size][/font][/color][color=black][font=Tahoma][size=9pt]JNE/JNZ
[/size][/font][/color][color=black][font=宋体][size=9pt]“注册失败”[/size][/font][/color][color=black][font=Tahoma][size=9pt][/size][/font][/color][/size]
[size=3][b][color=black][font=宋体][size=10.5pt]如果经过我们的修改程序的运行情况就发生变化了:[/size][/font][/color][/b][b][color=black][font=Tahoma][size=10.5pt][/size][/font][/color][/b][/size]
[size=3][color=black][font=宋体][size=10.5pt]还是先比较两个注册码[/size][/font][/color][color=black][font=Tahoma][size=10.5pt][/size][/font][/color][/size]
[size=3][color=black][font=Tahoma][size=10.5pt]CMP A[/size][/font][/color][color=black][font=宋体][size=10.5pt],[/size][/font][/color][color=black][font=Tahoma][size=10.5pt]B[/size][/font][/color][/size]
[size=3][color=black][font=宋体][size=10.5pt]如果把[/size][/font][/color][color=black][font=Tahoma][size=9pt]JE/JZ[/size][/font][/color][color=black][font=宋体][size=9pt]修改成了[/size][/font][/color][color=black][font=Tahoma][size=9pt]JE/JZ[/size][/font][/color][color=black][font=宋体][size=9pt],那么程序的运行就恰好与正常的情况相反了。[/size][/font][/color][color=black][font=Tahoma][size=9pt][/size][/font][/color][/size]
[size=3][color=black][font=宋体][size=9pt]就会变成:[/size][/font][/color][color=black][font=Tahoma][size=9pt][/size][/font][/color][/size]
[size=3][color=black][font=宋体][size=9pt]如果输入的注册码不正确(与真正的注册码不相等),程序就会提示我们“注册成功”[/size][/font][/color][color=black][font=Tahoma][size=9pt][/size][/font][/color][/size]
[size=3][color=black][font=宋体][size=9pt]如果输入的注册码正确(与真正的注册码相等),程序就会提示我们“注册失败”[/size][/font][/color][color=black][font=Tahoma][size=9pt][/size][/font][/color][/size]
[size=3][color=black][font=宋体][size=9pt]在这种情况下联系实际,我们随便输入一些东西,都会注册成功。这样我们的目的就达到了[/size][/font][/color]
[color=black][font=宋体][size=9pt]。[/size][/font][/color][color=black][font=Tahoma][size=9pt][/size][/font][/color][/size]
[size=3][color=black][font=宋体][size=9pt]不过这样修改有一个小小的问题,[/size][/font][/color][color=black][font=Tahoma][size=9pt][/size][/font][/color][/size]
[size=3][color=black][font=宋体][size=9pt]那就是如果你足够幸运的话,任意输入的东西与恰好真正的注册码相等(这种可能性几乎为[/size][/font][/color][color=black][font=Tahoma][size=9pt]0[/size][/font][/color][color=black][font=宋体][size=9pt],所以你遇到了建议买彩票)。程序反而会提示“注册失败”。[/size][/font][/color][color=black][font=Tahoma][size=9pt][/size][/font][/color][/size]
[size=3][color=black][font=宋体][size=9pt]所以这样修改显得多多少少不够完美。那该怎么办呢?[/size][/font][/color][color=black][font=Tahoma][size=9pt][/size][/font][/color][/size]
[size=3][color=black][font=宋体][size=9pt]在想想我们学过的汇编指令和上文说到的修改方法。一条指令突然出现在眼前。[/size][/font][/color][color=black][font=Tahoma][size=9pt][/size][/font][/color][/size]
[size=3][color=black][font=宋体][size=9pt]那就是无敌的[/size][/font][/color][color=black][font=Tahoma][size=9pt]JMP[/size][/font][/color][color=black][font=宋体][size=9pt](无条件跳转)指令。这个指令的作用,就是程序运行过程中不管出现什么情况,只要遇到了它就得无条件的去运行它所指向的地方。[/size][/font][/color][color=black][font=Tahoma][size=9pt][/size][/font][/color][/size]
[color=black][font=Tahoma][size=9pt][size=3][/size][/size][/font][/color]
[size=3][color=black][font=宋体][size=9pt]那好,在示例中[/size][/font][/color][color=black][font=Tahoma][size=9pt][/size][/font][/color][/size]
[size=3][color=black][font=Tahoma][size=10.5pt]CMP A[/size][/font][/color][color=black][font=宋体][size=10.5pt],[/size][/font][/color][color=black][font=Tahoma][size=10.5pt]B[/size][/font][/color][/size]
[size=3][color=black][font=宋体][size=10.5pt]把[/size][/font][/color][color=black][font=Tahoma][size=9pt]JE/JZ
[/size][/font][/color][color=black][font=宋体][size=9pt]“注册成功”[/size][/font][/color][color=black][font=Tahoma][size=9pt][/size][/font][/color][/size]
[size=3][color=black][font=宋体][size=9pt]修改成:[/size][/font][/color][color=black][font=Tahoma][size=9pt]JMP [/size][/font][/color][color=black][font=宋体][size=9pt]“注册成功”。呵呵,现在不管我们输入的注册码正确不正确,程序都会提示我们“注册成功”。这样就很好的避免了输入正确的注册码反而注册失败的情况。[/size][/font][/color][color=black][font=Tahoma][size=9pt][/size][/font][/color][/size]
[size=3][color=black][font=宋体][size=9pt]以上就是实际应用中常用到的修改方法。[/size][/font][/color][color=black][font=Tahoma][size=9pt][/size][/font][/color][/size]
[color=black][font=Tahoma][size=9pt][size=3][/size][/size][/font][/color]
[size=3][color=black][font=宋体][size=9pt]到这里,我们就可以提出一个概念了[/size][/font][/color][color=black][font=Tahoma][size=9pt]---[/size][/font][/color][color=black][font=宋体][size=9pt]暴力破解。不论如何去修改。所用方法的核心内容都是强行修改程序的运行方向,已达到我们的目的。这就是常说的暴力破解。然而,到目前为止我们所说的都是爆破中最基本的概念和方法。但是作为新手最好还是从爆破开始学起。当然,不要以为爆破很简单,对于有的应用明码比较的软件,追出它的注册码也许只要几分钟。但是如果爆破,就有可能要修改好几个地方。才能成功。另外还可以解除功能限制,时间限制,次数限制等等。[/size][/font][/color][color=black][font=Tahoma][size=9pt][/size][/font][/color][/size]
[color=black][font=宋体][size=9pt][size=3]那么如何更全面的体验到爆破的强大力量呢。下一篇我们就来说说爆破在解除功能限制,次数限制等方面的具体应用。[/size][/size][/font][/color]
[font=宋体][size=3]暂时 没有上传附件的 权限[/size][/font]
[font=宋体][size=3]以后会补上的 [/size][/font] 看起来不错 但是看不懂啊~ 不错不错,顶一个 太强了 :) 呵呵现在一些软件的提示信息都用繁体字,使暴力破解的难度加大了很多``这就要求我们要多掌握一些汇编的知识以及注册码的运算加密方面的知识
[[i] 本帖最后由 windman 于 2007-10-24 10:45 编辑 [/i]]
页:
[1]
