恶意代码分析实战 15 加壳与脱壳

Source

分析样本Lab18-01.exe到Lab18-05.exe。

15.1 Lab18-01

将程序拖入PEiD。
vmware_4z2gVbNTrb.png
使用深度搜索,发现是UPX的壳。
vmware_tFXJDW0633.png
拖入OD中进行脱壳。手动脱壳的目的就是找到OEP也就是程序的原始入口点,最常见的方法就是查找尾部跳转指令,一般是JMP指令,但是恶意代码的作者有时候也会选择return指令逃避检测。尾部跳转指令是一串无效字节前面的最后的一条有效指令,填充这些字节的目的就是保证区段中的对齐。
按F8手动执行代码,如果有向上跳转,那么我们在下一句命令下一个断点,然后运行到下一句。(或直接按F4)
vmware_SelULVhwuV.png
找到尾部跳转指令的位置为0x409f43.在IDA中查看。
vmware_gOkAg6x4H6.png
在OD中继续运行。
vmware_bBT7L4QtR9.png
将代码提取出来。
vmware_2eHPEsG5YK.png
vmware_23lqMNCDZO.png
取消重建输入表的选项,导出程序unpack.exe。
使用importREC导入程序。
vmware_jJFu1VkjKv.png
修改OEP,点击自动查找IAT。
vmware_lVWDQ6Hdsq.png
vmware_vatbpTJ5ks.png
点击获取输入表。
vmware_ViZVWy6vNU.png
说明已经成功了。
vmware_fxQyrhLd1n.png
脱壳成功。
vmware_M1cecN9CNV.png

15.2 Lab18-02

载入OD,使用插件寻找OEP。
vmware_45YXqdYYyo.png
OD识别错误。
vmware_BesqOoXMxN.png
vmware_sRgq7MOpGs.png
dump出程序。
vmware_lcMFPpLlcc.png
使用impoortREC修复输入表。
vmware_g4aoh9YNwd.png
脱壳成功。
vmware_u9MQVBBGYd.png

15.2 Lab18-03

使用插件,查找一连串0签的ret无果后,使用esp定理查找。
vmware_nMJlHcfGoH.png
存在pushad,自然也就会存在popad。
vmware_OU4Oo6yCea.png
设置硬件断点。
vmware_AXev3PY9aC.png
找到oep。
接下来的操作是,dump出程序,使用importREC修复输入表。

15.3 Lab18-04

同样是使用ESP定律。
vmware_5IsdzkI6aR.png
跳转到断点之后,继续运行几步就可以找到oep。
vmware_oDtcmk2Lwh.png

15.4 Lab18-05

同样是EXP定律,只不过有一个地方需要注意。
vmware_rUJfvKgIms.png
vmware_FxbpBbgFC0.png