手脱SoftDefender1.12版本壳
文章目录
我使用加壳软件是:SoftDefender1.12, 还有一个最简单的delphi7程序, 只有一个窗口那种.SoftDefender1.12还是比较恶心的, 很多anti, 一不小心就中招了, 不过总体来说这款壳只能定位成新手练手用的壳.经过不少的曲折终于将这款壳给脱掉.
首先上来发现有Anti.. 这个可不好玩, 然后换OD.. 最后换了个OD才把这个问题给解决了. 说到这个Ollydbg. 我想多说几句, OD本身功能不算很强大, 经过这么些年的发展, 现在逐渐的成为了全世界使用最多的破解调试器. 插件很暴力, 很强大.但是也带来一个很大的问题, 就是各个OD之间的差别不小, 有的时候调试这个软件遇到Anti, 或者莫名其妙的错误, 换一个OD就行了. 所以这边一般人估计都收集着好几个OD吧, 我手头就好几个OD. 调试程序遇到麻烦就换一换..
好了, 不多说了. 首先载入程序, 我这里使用的是一个delphi的实例, 首先要剥离进程, 因为这个程序是双进程的.. 这边使用kerberos来探测下这个程序调用了一些什么API.. 或者使用APIMonitor也可以, 后者更强大,更牛. 不仅仅是寻找调用了什么API那么简单. 是一个很暴力的程序.
完了之后, 生成一个.rep的文件, 用记事本打开, 寻找程序调用CreateProcess的地方.然后定位到004A7DBF显然我们这里要往上定位, 都调用创建进程了, 事情都做完了.. 所以我们定位到这里, 004AE6C3. 这是调用GetCommandLine的地方.然后往上翻一翻, 看看有没有可以跳过的的的地方, 果然前面有一个je跳转, 那么我们就直接将这个je改jmp..当然后来我发现这样不行, 有检测, 我们下硬件断点, 改下标记位就可以.. 然后双进程剥离就搞定了.
接下来就是跑oep. 使用退出法, 直接定位到oep处, 0044CA98 OK 用importRec dump.. 这oep, 太简单了, 完全没有动呢.完了之后, 重新运行程序.这次准备搞IAT..
首先我们在一个IAT表的项目中下个写入硬件写入断点, 然后跑起来, 最后跟几次发现
|
|
恩, 找到了填写IAT地址的地方, 但是发现填写进去的地址不是我们想要的, 原来已经给处理过了.跑两次发现, 就是上面那个call处理的, call elphi7.004AE7E0, 那么直接将其nop.. 清净了..很快kernel32.dll的函数就定位完了. 但是打开IAT看一看发现有很多函数还是被加密起来了..那么在被加密的IAT里面下断点, 最后定位到一系列加密函数的地方.. 他们是这些. 全部改成jmp..
|
|
这些IAT判断都是判断一些API函数然后是否需要加密一类的, 全部改成jmp.. OK, 就这样IAT就全部搞定了.其实没有, 还需要做一步, 因为中间还有检测.
|
|
这个CALL 004AD467比较奇怪了. 严重BS.. 里面就是检测我们是否修改了内存的, 前面我们将jnz全部改成jmp. 当然修改了所以这里我们将所有在填写IAT的循环中,调用到004AD467的地方全部nop.. 这下真的是清净了.. 非常安静..完了之后在函数的末尾, 填写完IAT之后, 我们再将那些所有我们修改过的地方改回来, 神不知鬼不觉啊.跑到OEP.然后直接打开Import Rec, 修复IAT一个错误也没有. OK.. 脱壳完成.
文章作者 忆杰
上次更新 2012-09-06