利用GetStartupInfoA函数带压缩壳ASPack破解程序
本帖最后由 潜伏者的破解 于 2016-9-23 14:36 编辑下面的软件是被加了ASPack压缩壳的。我们要带壳破解。
破解前了解一下压缩壳的工作原理参看论坛里的另一篇文章http://www.52pojie.cn/thread-391498-1-1.html
感谢 @Cizel 分享
输入用户名和注册码,注册码随意输入,点击验证,弹出下图(注意程序右上角“未购买用户”字符串,后面会用到)
提示注册完成,请重新运行程序,这种软件就是在重启时会验证我们输入的注册码对不对。
点击确定程序退出。我们再用OD打开这个软件,F9运行程序,出现应用程序主窗口(这个时候就已经执行完了解压代码)。在OD中Ctrl+G-》弹出地址跟随窗口,输入401000。我们就来到了程序的代码段处(这里的0x401000处为代码段是个经验之谈,大部分的程序都是这样。有些加壳程序是直接到不了0x401000处的)
到了代码段后-》右击-》中文搜索引擎-》智能搜索,在弹出的窗口中Ctrl+F查找“未购买用户”字符串
双击到达该字符串所在代码处,然后上下翻翻看看找跳转语句。在这个程序里向上翻我们找到了关于注册表项的语句。engydt是软件的名字。猜测Software\engydt是注册表中关于这个软件的某个路径。在这下个断点。
这个软件加壳了,如果我们用OD重新加载程序,这个时候还没执行解压缩代码,所以应用程序的代码还是被压缩状态,OD会提示分析不到我们刚才下的断点处的代码,会自动将我们在该处下的断点禁止了。那我们怎样才能在该处段下来呢?程序启动运行时先执行解压代码,再执行应用程序代码。实际上在解压代码执行完后,系统会执行一些系统函数来为启动应用程序做准备,我们可以在这些系统函数上下段。然后手动打开之前被禁止的断点,F9,运行到这个断点。
OD重新加载程序,弹窗提示我们在注册表项那条语句地址处下的断点失效。不用在意它。
点击插件-》API断点设置-》常用断点设置-》常用断点,然后勾选GetStartupInfoA点击确认,在这个函数上下段就是让程序初始化的时候就段下来,也就是在他提取用户名和假注册码之前段下来。
然后OD重新加载程序,看堆栈窗口,我们断在了GetStartupInfoA上
但这并不意味着已经执行完了解压代码,怎样判断是否执行完了解压代码呢?打开断点窗口可以看到我们在注册表项语句上下的断点返汇编代码为
并不是mov edx engydt.004BCA40。这个时候我们按F9运行继续程序,观察断点处的断点窗口中的断点反汇编语句是否变成了mov edx engydt.004BCA40。如果没有继续按F9。直到断点处反汇编语句变成mov edx engydt.004BCA40。这个过程可能多要按几次F9。
之所以会出现这种情况,我估计在应用程序加载启动过程中,GetStartupInfoA函数不只被调用一次并且不单单是在解压代码运行完后调用。程序加载这一块系统究竟做了哪些事,我也不太明白,望大神们给讲解讲解。
接下来把GetStartupInfoA函数上的断点禁用,然后打开注册表项语句上的断点。
然后F9运行程序,程序接下来会断在我们下的断点处
这个时候我们可以F8单步执行,在代码执行的过程中可以寄存器窗口堆栈窗口中可以看到我们输入的用户名和密码,也看到了其他的长字符串,推测程序注册表中读取真注册码和假注册码,然后调用对比函数,来对比注册码时候正确,那我们看到的其他的长字符串可能是真的注册码。
把这些字符串拿来注册试试,最后发现"B02FB49CA43FFE126264C45799EBC117040A443B72888BD2040A443B72888BD2B0AEBF4FF7F8D5BC"是真的注册码
在OD中带壳程序手动改过代码没法保存,所以这里不能使用改变关键跳的爆破方式破解。
总结:因为程序有压缩壳,只有在解压代码执行完后才能正确调试应用程序的代码。那问题的关键也就是怎样将程序中断在解压代码执行后的应用程序代码上!带壳破和不带壳破相比较,带壳破每次OD加载程序时都要为了对付壳多做一些操作,如果破解过程需要OD多次重复加载应用程序,相对不带壳破就会多做一些工作量。
---》》整理别人的视频教程,在这感谢 @*** ,我这算不上原创了,但是感觉他原理讲的不清楚,所以又加上了自己的理解整理的这篇,有错误恳请指正,看不懂可讨论《《---
后面破解部分将的有些敷衍,也是菜鸟,抱歉了。
可以再加个SMC方法进去,教程会更好看一点 不错.学习!! 分段验证注册码的话就不行了.
@ZMZwise 是***的教程,在这感谢他,主要还是尽量理解原理,做到举一反三。 bester 发表于 2016-9-23 13:26
可以再加个SMC方法进去,教程会更好看一点
SMC方法是什么 上面所说的“程序加载这一块系统究竟做了哪些事”可以理解为壳在解压中对原加壳代码的锁定验证,就是解压后的代码和原来加壳前的代码相同的验证。分段验证或者提取部分注册码组合验证比起这个要复杂些,假如带的是一些强壳那么要花费破解的时间就会更长。 PE结构..哎,是学习写壳的前提!! 不错.学习!! 楼主能搞pc游戏软件破解吗?这里有款游戏需要破解,能否帮忙看看。
页:
[1]
2