加壳实战之脱壳
在上一篇文章中,我们初试了加壳,现在,我们尝试把这个已加壳的程序的壳去掉,这个过程简称脱壳。
脱壳的目的:
1.Cracker(破解者)脱壳、解密、破解。
2.杀毒引擎(脱壳引擎、反病毒虚拟机)解密、查杀病毒、扫描特征。
脱壳环境:
1.一定要在受限制的环境下分析,即虚拟机中。
2.初学者一定要在32位系统中分析。
脱壳步骤:
1.找到原始OEP
一般来说,找到原始OEP或者我们跟踪到原始OEP时,程序都会完成解密操作。
2.Dump内存到文件
当可执行文件在内存中已经完成揭秘之后,我们将内存中代码数据转储(Dump)到文件,就可以进行进一步分析。
3.修复文件(常见于修复IAT,重建导入表)
从内存中转储的内存数据代码有一些与原本文件中的内容不是不一致的,比如IAT表,内存中IAT表会被初始为函数地址表,而文件中IAT表与INT表内容一致。所以想要让程序正常运行,一般都需要修复IAT,因为加壳之后程序一般都会自己去处理导入表、IAT以及重定位等。
导入表与IAT之间的关系图:
IAT表在文件中保存的是一个RVA数组,每一项指向指向了函数字符串结构
在内存中,这个RVA数组被修改为函数地址,每一个函数地址就是之前对应的函数字符串的函数

所以从内存中Dump出的文件,必须进行IAT修复或者修复导入表。
下面开始脱壳,在OD中找到程序OEP,然后鼠标右键-》用OllyDump脱壳调试进程。

输入基址和OEP,取消重建输入表选项,然后点击“脱壳”。

最后一步,修复IAT表。
这里使用的是ImportREC

按照图中的流程操作,第6步中,弹出窗口然后选择在脱壳时保存的文件。
至此,脱壳完成。程序运行正常。

在IDA中查看脱壳之后的文件


浙公网安备 33010602011771号