在之前学习了一些OD、PEID、补丁制作等工具的运用之后,开始涉入破解的相关学习,因此找来了一些学习资料。废话不多说,现在从基础内容开始实践。在相关实践过程中需要的工具可自行在网上查找,由于本人学习资料和提问都是在吾爱破解网上进行,所以也推介大家在这上面查找自己需要的工具和资料。所有实践程序都可以在该网站上找到,如有问题,欢迎交流。
简单程序的破解
在程序破解的基础篇内容中,由于涉及内容相对简单,所以基本上通过以下步骤就能达到相应的效果:
1、查壳:很多程序加了壳,一方面可以保护其代码,相对应的是加密壳,另一方面是压缩占用空间,相对应的是压缩壳。之所以要查壳,是因为加了壳之后的程序会被相对得保护起来,因此不能被一些编辑软件所编辑。所以,在破解的最初阶段,必须把壳脱了,才能去做进一步的工作。
2、寻找关键字:在基础篇中,我们运用了很多弹窗信息来做铺垫,因此涉及到一些关键的字符串,我们可以通过查找对应的字符串来确定相关的关键位置。在查不到相关字符串的时候,我们也可以通过下一些断点来找到关键位置,例如messageboxA出下断等方式。
3、确定关键的跳转和关键call:在很多软件注册等过程中,我们会发现基本上都会是有几个选择,比如注册成功、注册失败。程序如何判断注册是否成功,这里涉及到比较和验证方面,在这之后,必然会有一个关键的跳转,转到不同选择所对应的代码上去。我们只需要找到对应的关键跳转,改变其运行路径,即可达到预想的效果。
4、修改以达到效果:通过修改关键跳转的方向,我们可以改变程序的运行路径,这样以达到我们的目的。保存修改之后,我们必须重新验证我们是否修改成功,可能我们做的修改并没有完全达到效果,因此还需要做进一步的分析。
字符串查找
1、这里用到的一个吾爱的注册类小程序,改程序在输入注册码后会显示相关窗口,如果错误,则会弹出“输入错误”;如果输入正确,则会弹出吾爱的相关介绍。
2、首先加载该程序,显示对应入口点。
3、通过右击,智能搜索ASCLL码(有时UNICODE)后,用ctrl+f调出查找窗口。
4、运行程序,随意输入注册码后点击按钮,记录弹出窗口内容。
5、在字符串搜索结果界面搜索弹窗内容,双击对应内容,OD会自动跳转到对应代码。
6、寻找关键跳转,通过分析,可以知道上方JE代码为对应关键跳转到显示输入错误窗口的代码。这里只需要不让它实现,把jne即可。(在破解学习过程中需要一些基本的汇编语言基础知识)
7、保存对应修改后重新运行程序,随意输入注册码,显示吾爱相关介绍,破解完成
初识按钮事件
1、C++ 按钮事件特征码 SUB EAX,0A
DELPJI查找按钮事件 右击 查找 查找二进制字符串740E8BD38B83????????FF93????????采用CRTL+L键翻页查找 需每一个上断
易语言按钮事件特征码: FF 55 FC 5F 5E
vc8按钮事件采用查找 SUB EAX,0A
vb查找按钮事件时采用二进制字符串:816C2404??000000
注:识别VB P-CODE编译时,只需要查找不到按钮事件就是P-CODE编译
2、上述为不同语言编写的程序中,按钮事件对应的代码。按钮事件即为按下对应按钮,程序运行过程中所产生的响应。本实践使用的是易语言的一个小程序,因此查找特征码为FF 55FC 5F 5E
3、ctrl+B查找FF 55FC 5F 5E,在对应call下断。通过ctrl+l查找所有对应按钮事件响应,全部下断。
4、重新加载程序,F9运行。点击按钮,程序断在指定位置
5、点击F7跟进CALL后,通过单步可以发现,程序同样可以到达关键跳转语句。
6、在这里指出一点:通过查找OD文件目录可以查找到一个UDD文件,该文件是OD调试过程中产生的记录,如果删除该记录,可以删除调试的一些历史。
追寻注册码
简单注册码的追寻
1、在这运用到的一个程序是一个注册程序。首先加载程序,同时运行程序找到注册项,任意输入注册账户和注册码,点击按钮。记录弹窗内容为try again等。
2、搜索ASCLL码后,ctrl+f键入again后找到对应字符串。
3、找到关键跳转句后下断
4、重新加载并运行程序。此时程序跑起来,点击注册项输入注册用户名(这里要记住)后点击注册。程序断在指定位置
5、单步走下去发现第一个关键跳并没有跳转,说明不是关键跳转。取消断点,继续单步,发现第二个关键跳实现,说明这是个关键跳转。
6、观察堆栈中信息,可以看出有对应可疑数据。该数据可能就是所需的注册码,对此做出记录。
7、验证是否为注册码
8、这里提一点注意点,在第四项中,为什么要记住用户名?是因为,之后会介绍到注册表修改的问题。如果你不记得用户名,将很难查找到改程序的注册信息,也就无法修改注册内容。对于用户而言这无所谓,但是对于学习的角度,我们需要删除注册信息作更多的处理。
补丁的制作
1、这一块我们将应用上一小节内容做解释。首先,我们要找到try again对应代码位置。
2、这时,根据上述分析,我们知道关键跳转句是如下位置
3、从语句本身看,意思就是如果相等,则跳转到try again对应代码,如果不相等,则跳转到注册成功对应代码。因此在这我们只需要修改这条代码。通过把je改成jne,在这里,我们用另一种方式修改,直接忽略判断,也就是把je对应语句nop掉。
4、保存相应修改,此时为已经爆破完成的程序。
5、在这里制作补丁我们需要用到一个小工具即为key maker
6、点击其他——制作文件补丁——编辑对应内容,选择文件后点击制作,选择相应的样式,完成制作
7、打开test点击制作。查看程序点击file后发现注册键为灰色,说明已经注册成功。
深入追踪注册码
1、本小节用的是一个重启验证的机制。
2、首先启动程序,点击注册,随意输入内容后点击注册,提示注册码不正确。
3、载入OD,查找字符串,找到对应语句后双击进入
4、在该处设置断点,同时,通过语句我们可以确定,这是关键跳转位置。因此,一般情况下,关键句的前一个call则为关键call,我们在这也下断。
5、重新载入程序,运行起来,点击注册后输入账户和注册码,点击注册。程序断在指定call位置。
6、这里我们跟进call,在这里我们需要观察的仍然是堆栈窗口。通过单步下去,我们发现堆栈窗口出现可以ascall码,因此猜测这是注册码。
7、在这我们记录这串字符后关闭OD,开启程序,进行检测。任意输入账户名已经所采集的注册信息验证。输入后显示注册成功,需要重启验证。
8、重启验证成功
9、这里需要指出的也是和上一节相同的问题,需要记住账户名。笔者连续两次在这出问题,就是因为没有注意,这也正让我认识到一个问题。在程序运行过程中,我们通过写入确定的账户和任意的注册码,引导程序生成出对应账户的注册码,然后我们通过一定手段找出该注册码以实现破解。这应该也算是注册机的一个思路吧(笔者猜测),至于是否正确还有待以后的博客进行解释。
注册表的编辑
1、在这里我们用到的是吾爱工具包中的小生专用批处理组件,选择开注册表项。
2、点击编辑——查找——输入之前记住的注册账户进行查找
3、查找出对应的注册信息,包括账户名和密码。通过删除对应的账户和密码可以删除相关的注册信息。
工具与实例下载
1、实例链接:http://pan.baidu.com/s/1kVaqw0f 密码:kxw2
2、所提供的实例只是简单的程序,如果需要深入学习,可以自行找一些程序进行尝试。
3、实践中所用到的OD可在官网下载,这里推荐下载吾爱的破解工具包,由于该工具包所包含的工具比较多,而且有的暂时也不一定用得到,所以希望大家能够自己制作属于自己的工具包。
工具包地址:http://down.52pojie.cn/Tools/Other/
4、在下一次介绍中,会讲到工具包的制作、花指令的去除、易语言非独立编译的字符串查找、验证窗口的跳过以及版权信息和软件信息的修改。
5、如果读者希望和我一起学习的话,请提前下载好必备的工具,同时复习之前的内容,特别是OD的使用以及关键跳转和关键call的查找。