破解基础篇

作者 : null119 本文共2592个字,预计阅读时间需要7分钟 发布时间: 2020-04-28 共313人阅读

简单程序的破解

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、这里需要指出的也是和上一节相同的问题,需要记住账户名。笔者连续两次在这出问题,就是因为没有注意,这也正让我认识到一个问题。在程序运行过程中,我们通过写入确定的账户和任意的注册码,引导程序生成出对应账户的注册码,然后我们通过一定手段找出该注册码以实现破解。这应该也算是注册机的一个思路吧(笔者猜测),至于是否正确还有待以后的博客进行解释。

发表评论