od直接带壳使用字符串搜索破解重启验证的一种方法
带壳破解的原理:
普通的壳,程序在执行的时候,首先把程序解密或者解压(加密壳或者压缩壳),然后再执行解压后的程序中的代码。因此如果能在壳解压或者解密完成,程序执行之前这个点位给程序断下来,然后再分析程序的功能。
针对很多强壳,都可以使用这种不脱壳直接破解的办法。
1、查壳-Asp壳


2、运行程序,验证程序的功能。


发现是一个重启验证的程序:我们先输入验证信息------>保存在某个位置------->程序重启读取输入的信息---->程序验证注册信息的合法性---->弹出相应的信息。
3、按照上边的程序执行过程,我们如何进行带壳破解?
我们先输入验证信息------>保存在某个位置------->程序重启读取输入的信息---->程序验证注册信息的合法性---->弹出相应的信息。
我们需要找到代码的位置。
4、因此关键是我们如何找到:壳代码----->目标点位------->解码之后的代码----->程序重启读取输入的信息---->程序验证注册信息的合法性---->弹出相应的信息。
首先使用od载入程序

弹出这个框,说明有壳。点击否,然后F9继续,让程序执行起来。

然后再od中Ctrl+G转到代码断的位置

这个时候我们看到的代码是add al,xxx

这个是未解密的代码,然后我们在代码断查找字符串,我们可以搜索界面上显示的“未购买”


然后Enter进入这段代码,找到关键位置,注册码操作的位置:

然后我们在这段代码的位置下个断点

注意:记住我们下断点的位置代码是:mov edx,xxx。这是程序解压壳之后的代码。然后我们利用od中再下一个断点:API常用代码


注意:我们这个时候(壳解密的时候)总共下了2个断点:我们为什么要下2个断点呢?
因为我们按照前边的思路:
GetStartupInfoA这个断点就是前边我们的目标位置的断点
另一个断点则是我们要分析判断程序验证码是否合法的代码位置的断点
因此我们要下这2个断点。

我们重新运行程序Ctrl+F2,然后在b断点窗口停留,观察断点的变化,寻找我们的目标位置:

第一个断点是:我们要找的对比验证码是否正确的位置的代码,我们发现是add byte,xxx 说明还没解密。
第二个断点是:我们程序刚载入od的时候第一次停的位置,因此“仅一次”
第三个断点:GetStartupInfoA断点,当运行到解密后的代码中的GetStartupInfoA这个函数的时候,我们第一个断点应该解密了。因此我们可能会多次运行,观察第一个断点的变化,等变为解密后的代码,我们就可以激活,准备分析。
因此我们继续F9,观察第一个断点的代码

继续F9,直到运行4次之后发现:

这个时候,第一个断点变成:mov eax,xxx就是解密之后的代码。这个时候激活这个断点,然后就可以正常分析我们的程序是如何验证注册信息的:

激活之后,然后我们F9就会断在我们想要分析代码的位置:

然后我们F8单步分析,找到注册码:


找到正确的注册码:

浙公网安备 33010602011771号