十招教你学会软件破解(2)
中华网科技 http://tech.china.com 2005-07-06 09:12:28
【进入BBS】【进入聊天室】【 推荐给朋友 】【浏览字号:大 中 小】【关闭窗口】
6. 关于破解教程中程序代码地址问题:在破解教程中,通常会提供一部分程序代码以帮助讲解程序的分析方法。例如,以下是一段程序代码:
```
0167:00408033 PUSH 00
0167:00408035 PUSH EBX
0167:00408036 CALL [USER32!EndDialog]
0167:0040803C JMP 0040812C
......
```
在这里,程序中的代码地址如0167:00408033,其代码段的值(即0167)有可能根据不同的电脑会有区别,不一定一模一样,但偏移值应该是固定的(即00408033不变)。所以,如果看到破解文章里的程序代码的地址值和自己的电脑里不一样,不要以为搞错地方了,只要你的程序代码正确就不会有问题。
7. 关于如何设置断点的问题:正确恰当地设置好断点对于快速有效的解密非常重要。好的断点设置可以使我们迅速找到关键的程序段,而不恰当的断点则会对解密造成不必要的精力消耗,甚至根本就不能拦截到程序的运行。
然而,具体什么时候用什么断点比较合适很难说,这需要自己用经验去累积。总的来说,bpx hmemcpy这个万能断点对大多数注册码方式的软件都有用。初学者不妨多试试这个断点(通常我也是用这个断点设置,懒嘛^_^,哈哈。。。)。对于那些需要暴力破解的非注册码方式的软件,通常我们应该拦截对话框(如bpx DialogBox)和消息框(如bpx MessageBox(A))等。不论对于哪一类软件,当我们设置的断点均没有效果时,可以试一下bpx lockmytask,这个断点的作用是拦截任何一个按键的动作。具体常用的一些断点设置请参考“破解常用断点设置”一文。
在破解注册码的过程中,通常需要输入用户名和注册码。一般来说,用户名和密码可以随意输入。然而,根据我的经验,许多软件会对注册码进行逐位处理。例如,如果输入"78787878",在跟踪程序时,我们无法确定当时看到的"78"是哪一个"78"。因此,我更喜欢使用"12345678"这样的注册码输入方式,这样就可以知道程序是在对注册码的哪一位进行运算。对于需要输入较长序列号的软件,输入类似"12345-67890-ABCDEF"这样的序列号较好。
需要注意的是,上面提到的注册码输入方式"12345678"是针对拦截WIN32 API函数的。如果有时候直接拦截WIN32 API函数难以找到程序的突破口,而需要借助于"S"指令在内存中寻找我们输入的用户名或注册码时,就最好不要采用"12345678"作为注册码。因为内存中很可能有许多的"12345678"字符串,这样我们无法知道到底要破解的程序使用的是哪一个"12345678"。因此,我们应该选择一个不易与内存数据相同的注册码,例如:74747474(我个人喜欢用,意思嘛:去死去死...哈哈哈^_^)。对应的搜索指令为:S 30:0 L FFFFFFFF '74747474'。当然,以上只是我个人的习惯,具体用什么样的输入形式可以根据个人喜好来定,不必拘泥于某一固定模式。
关于如何跟踪程序的问题:初学者在开始学习解密时往往不知道如何跟踪程序以及如何找到注册码比较的地方。当面对长长的一堆程序代码时,可能会感到不知所措。通常情况下,软件的程序内部会利用一个子程序(即CALL ********)来验证我们输入的注册码是否正确。对于注册码显式存在的程序,一般都会将所输入的注册码和正确的注册码放进寄存器,然后调用验证子程序进行判断,并将结果返回。应用程序根据子程序返回的结果决定是否注册成功。这样的程序通常具有如下形式:
```
****:******** MOV EAX,[********] (或 PUSH EAX等形式)
```
注册表是Windows系统中的一个重要的数据库,用于存储系统和应用程序的设置信息。它包含了系统的各种配置信息和参数,包括硬件设备、应用程序、网络连接等信息 。
如果您想了解某个软件的注册码存放位置,可以使用D EAX(或EBX、ECX、EDX、EDI、ESI...等)去看看寄存器指向的内存区域藏着什么东西。通常情况下,程序中会使用GetDlgItenInt这个API函数将输入的文本转化为整数,所以这类程序中是不会出现显示存在的注册码的。因为注册码被转换为整数了,程序通常会用CMP ECX,EDX这种类型的指令去验证注册码的正确性,这里ECX和EDX中存的就是所输入注册码和正确注册码的整数形式,此时可以用 ? edx 和 ? ecx 看到其十进制形式,即我们输入的形式。
在修改或备份注册表时,可以使用Windows自带的注册表管理工具“REGEDIT”来进行操作。一种方法是在“开始”菜单中输入“regedit”并启动它,也可以直接点击“C:\WINDOWS\regedit.exe”来运行。大部分应用程序都会将自己的信息存储在以下路径中:HKEY_LOCAL_MACHINESoftware、HKEY_LOCAL_MACHINE\Software\Microsoft、HKEY_CURRENT_USER\Software、HKEY_CURRENT_USER\Software\Microsoft 或 HKEY_USERS.DEFAULT\Software。具体位置取决于不同的程序,但按照上述顺序一定能找到与应用程序相关的键。接下来,只需删除与用户名和注册码相关的键值即可完成破解。
对于破解练习的问题,学习破解需要大量的实践。在选择破解目标时,初学者不宜选择大型、著名的软件,因为这类软件通常加密较为复杂,破解难度较大。相反,应该选择一些不太出名的、小型的和较早版本的共享软件进行练习。由于加密相对简单的软件有利于初学者快速掌握破解思想和技能,因此这是一个较好的选择。至于习题来源,可以从网上下载,也可以购买一些共享软件光盘。