分析样本Lab18-01.exe到Lab18-05.exe。
15.1 Lab18-01
将程序拖入PEiD。
使用深度搜索,发现是UPX的壳。
拖入OD中进行脱壳。手动脱壳的目的就是找到OEP也就是程序的原始入口点,最常见的方法就是查找尾部跳转指令,一般是JMP指令,但是恶意代码的作者有时候也会选择return指令逃避检测。尾部跳转指令是一串无效字节前面的最后的一条有效指令,填充这些字节的目的就是保证区段中的对齐。
按F8手动执行代码,如果有向上跳转,那么我们在下一句命令下一个断点,然后运行到下一句。(或直接按F4)
找到尾部跳转指令的位置为0x409f43.在IDA中查看。
在OD中继续运行。
将代码提取出来。
取消重建输入表的选项,导出程序unpack.exe。
使用importREC导入程序。
修改OEP,点击自动查找IAT。
点击获取输入表。
说明已经成功了。
脱壳成功。
15.2 Lab18-02
载入OD,使用插件寻找OEP。
OD识别错误。
dump出程序。
使用impoortREC修复输入表。
脱壳成功。
15.2 Lab18-03
使用插件,查找一连串0签的ret无果后,使用esp定理查找。
存在pushad,自然也就会存在popad。
设置硬件断点。
找到oep。
接下来的操作是,dump出程序,使用importREC修复输入表。
15.3 Lab18-04
同样是使用ESP定律。
跳转到断点之后,继续运行几步就可以找到oep。
15.4 Lab18-05
同样是EXP定律,只不过有一个地方需要注意。