【加壳脱壳-记一次脱壳--反编译AutoIt】此文章归类为:加壳脱壳。
最近给一个软件脱壳,脱壳还是比较简单的,有趣的是,脱了壳后发现软件代码的逻辑还是很难懂,经过一番研究才发现,这个软件是用AutoIt语言写的,然后打包成了exe文件。AutoIt是一种脚本语言,我之前没有接触过,应该是一种小众的语言吧(个人觉得)。想要知道软件的代码逻辑,需要将该exe文件反编译成AutoIt语言,就像反编译python程序打包成的exe文件那样。脱壳过程中收集到了一些工具并发现了一些技巧,在这里记录一下。
脱壳
先用DIE查一下壳
从查壳软件可以看出软件加了VMP的壳。在逆向界,VMP可以说是大名鼎鼎,由于它恐怖的虚拟化机制,很多逆向工程师都望而却步,看到VMP就直接放弃了。其实VMP加壳的软件并不是完全不可分析,一些是因为软件作者只是对部分函数加了壳,一些只是破坏了软件的导入地址表(IAT)。对于前一种情况,软件的主要的代码逻辑还是可以分析的,后面一种情况软件IAT是可以修复的。
用IDA打开软件看一下情况,下图是软件入口的情况。
可以看出软件被加了壳,真正的代码被加密了,软件真正的入口(OEP)也被隐藏了起来。
脱壳的关键是找到软件的OEP。关于如何寻找OEP网上有很多介绍,这里并不打算讨论这方面的技术,基于软件原理和经验,找到OEP并不难。
经过一番调试,我找到了软件的OEP,让软件在OEP处断下来,然后将内存dump下来。
dump下来的文件可以算作已经脱壳了,至少看起来是正常的代码。如下图:
但是软件并不能运行,这是因为软件的IAT被破坏,软件不能找到外部导入的函数。我们可以使用开源软件vmp3-import-fix来修复被破坏的IAT。
为了修复IAT,我们需要再次将原软件断在OEP处。然后在任务管理器中查看一下软件进程的PID,再在cmd中运行vmp3-import-fix,如下图。cmd一定要在管理员权限下打开,否则会运行失败。
如果顺利的话,你就会在vmp3-import-fix同目录下看到修复了IAT的exe文件。
反编译AutoIt
文章一开始就提到,这个软件是AutoIt脚本写的,当然我也是在脱壳后,经过一番研究分析才发现的。这里介绍一下AutoIt反编译的一些方法。
我们可以使用AutoEye来反编译AutoIt打包的exe软件。见附件
我用AutoIt写了一个测试代码,并打包成hello.exe。用它反编译了一下,如下图:
可以看出,效果相当哇塞。我的源代码就是这么一行代码。
我将上面的脱壳后的软件拖进AutoEye,然而悲剧发生了,什么结果也没有,反编译失败了。没办法,只能研究一下代码了。经过一番折腾,最后终于搞懂。原来AutoIt脚本在打包成exe时,会将脚本代码加密后以资源的形式编译到exe中,exe运行时会通过FindResource和LoadResource等Windows API找到脚本代码,然后经过解密最后交给解释器解释运行。下图是加载脚本资源的函数。
然而,我脱壳后的软件,在运行到LoadResource加载脚本资源时,竟然失败了,不知道为何脱壳时dump下的exe文件中没有脚本资源。这该如何是好?聪明的我最终想到了一个完美的解决方案。
首先,我用ResourceHacker查看了hello.exe的资源,看看AutoIt脚本是如何在exe中存储的。如下图:
可以看出脚本代码是以RCData的形式存在可执行文件中。
然后,我再次用OD调试原软件,让它在LoadResorce处断下来,当软件加载脚本资源完成后,我将其从内存中dump出来,保存到文件中。
ResourceHacker有一个功能,可以替换软件中的资源数据。如下图所示:
我将从内存中保存的数据替换了hello.exe的RCData中的数据。然后再将hello.exe拖到AutoEye中,结果真的解出了代码。
最后将其导出,完美解决问题。
更多【加壳脱壳-记一次脱壳--反编译AutoIt】相关视频教程:www.yxfzedu.com