手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>网站运营>建站经验>列表

学习解密过程中经常碰到的问题

来源:互联网 作者:west263.com 时间:2008-04-16
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!

6. 关于破解教程中程式代码地址问题:破解教程中都会放上一部分程式代码以帮助讲解程式的分析方法,例如下面的一段程式代码:
......
0167:00408033 PUSH 00
0167:00408035 PUSH EBX
0167:00408036 CALL [USER32!EndDialog]
0167:0040803C JMP 0040812C
...... 8. 关于如何跟踪程式的问题:初学者在开始学习解密的时候往往不知道怎么样去跟踪程式,怎么样找到注册码比较的地方,当面对长长的一堆程式代码时显得不知所措。通常软件的程式内部都会利用一个子程式(即 CALL ********)去验证我们输入的注册码正确和否,对于注册码显式存在的程式,一般都会将所输入的注册码和正确的注册码放进寄存器,然后调用验证子程式进行判断,将结果返回,应用程式根据子程式返回的结果决定是否注册成功,这样的程式经常具备如下的形式:
****:******** MOV EAX,[********]  (或 PUSH EAX等形式)
****:******** MOV EDX,[********]  (或 PUSH EDX等形式)
****:******** CALL ********
****:******** TEST EAX,EAX     (或 TEST AL,AL,或是没有这一句等形式)
****:******** JNZ ********     (或 JZ ********等形式)
其中EAX和EDX指向的内存区域就是我们输入的注册码和正确的注册码,这里的寄存器EAX和EDX是随意写的,也能够是ECX,EBX,EDI,ESI等等。对于注册码隐式存在的程式,虽然不能直接看到正确的注册码,但是通常也是先将所输入的注册码地址放进某个寄存器,然后调用子程式去验证,破解时就需要进入子程式去分析注册算法。总之,看到子程式(call ********)后面跟着跳转指令(JNZ ********或JZ ********)的地方我们就应该提高警惕,多用 D EAX(或EBX、ECX、EDX、EDI、ESI...等)去看看寄存器指向的内存区域藏着什么东西。有一点大家要提醒大家:看见程式中使用下面这个函数是要注意,即GetDlgItenInt,这个API函数的作用是将输入的文本转化为整数,所以这类程式中是不会有显示存在的注册码的,因为注册码被转换为整数了,程式通常会用CMP ECX,EDX 这种类型的指令去验证注册码的正确性,这里ECX和EDX中存的就是所输入注册码和正确注册码的整数形式,此时能够用 ? edx 和 ? ecx 看到其十进制形式,即我们输入的形式。

9. 关于软件的反安装问题:经常我们使用某些软件时都会碰到一个问题,就是共享软件过期之后即使删掉原程式重新安装,程式依然不能用,还是相同提醒您试用期已过请注册;或是您已破解了某个软件,但是还想继续研究他,但是因为软件已注册好,没有了注册选项,这时您即使完全删掉程式再重新安装软件,结果程式运行后还是注册过的。碰到这样的情况,其实原因很简单,因为程式将注册或过期信息存在了系统注册表里,所以简单的重新安装软件是无济于事的。解决的办法就是自己删掉注册表中有关的信息,但是因为注册表是WINDOWS系统工作的基础,假如不小心就很可能会损坏他而引起系统异常,所以假如您对注册表不是很熟的话,应该在修改之前备份一下注册表。不论是修改还是备份注册表都能够使用WINDOWS下的注册表管理工具"REGEDIT"来进行,一种办法是在"开始->运行"下输入"regedit"启动他,也能够直接点击"C:WINDOWSregedit.exe"来运行。大部分的应用软件都会将自己的信息存在如下的路径中:HKEY_LOCAL_MACHINESoftware、HKEY_LOCAL_MACHINESoftwareMicrosoft、HKEY_CURRENT_USERSoftware、HKEY_CURRENT_USERSoftwareMicrosoft 或 HKEY_USERS.DEFAULTSoftware下,具体是哪个地方依据不同的程式而有所不同,只要按上面的顺序肯定能找到有关应用程式的键,然后将和用户名及注册码有关的键值删掉就搞定了。

10. 关于破解练习的问题:学习破解需要大量的练习,对于破解目标的选择,初学者不宜以大型的、著名的软件为目标,因为这些软件通常加密较为复杂,破解不易,应该选择一些比较不出名的、小型的和早些时候的共享软件来练习,因为加密相对简单的软件有利于初学者快速掌控破解思想和技能。至于习题的来源则很广泛,能够从网上下载,也能够去市面上购买一些共享软件光盘。

 

在这里程式中的代码地址如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' 。当然,以上只是我个人的习惯而已,具体用什么样的输入形式能够根据本人的爱好、习惯来定,不必拘泥于某一固定的模式。

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!