恶意代码分析实战18-2

本次实验我们将会分析lab18-03文件。
将lab18-3载入peview
恶意代码分析实战18-2_第1张图片

可以看到这个壳是PECompact
载入od
恶意代码分析实战18-2_第2张图片

默认405130为入口点
使用od的插件来查找oep
恶意代码分析实战18-2_第3张图片

结果如下
恶意代码分析实战18-2_第4张图片

插件猜测的oep起始位置在40a110
但是这里的这些指令不像是oep。
而且这里它访问的值在0040a115处的栈底指针上方,如果这个地址不是文件的入口点,那么栈底指针之上的任何数据都不会被初始化。

使用另外一个插件选项
恶意代码分析实战18-2_第5张图片

结果如下
恶意代码分析实战18-2_第6张图片

暂停在了ntdll中的一条指令上,这明显也不是oep
使用插件不行的话,我们查看尾部跳转是否容易定位
恶意代码分析实战18-2_第7张图片

在上图阴影指令是一条retn指令,后面是一段0字节。
我们在这里下断点,执行过来
恶意代码分析实战18-2_第8张图片

可以看到,没有命中我们下的位置,而是显示了一个异常
说明这种方法也不起作用了
我们查看程序默认的入口点
恶意代码分析实战18-2_第9张图片

jmp指令会直接跳到00405138,而00405138,00405139的pushfd,pushad会影响内存。这些指令保存了所有的寄存器和标志信息,加壳程序很可能在跳转到OEP之前恢复所有的寄存器和标志,所以我们可以通过在栈上设置一个断点来尝试找到oep
在尾部跳转之前会有一个popad或popfd,将帮助我们找到oep
单步执行到call指令时
恶意代码分析实战18-2_第10张图片

在上图右侧可以看到此时esp为0012ffa0
右键,如下操作
恶意代码分析实战18-2_第11张图片

将地址载入到内存转储中

选中栈顶的前四个字节,如下操作
恶意代码分析实战18-2_第12张图片

然后执行
恶意代码分析实战18-2_第13张图片

可以看到断在了0040754f
看到了retn 4会将程序转移到另一个位置运行,这可能是尾部跳转,我们单步执行到这里,接着就来到了401577处
恶意代码分析实战18-2_第14张图片

如下操作
恶意代码分析实战18-2_第15张图片

强制od反汇编这些代码,结果如下
恶意代码分析实战18-2_第16张图片

在右侧可以看到eip现在指向了00401577的位置
如下操作转储程序
恶意代码分析实战18-2_第17张图片

点击get eip as oep
恶意代码分析实战18-2_第18张图片

然后单击dump即可保存
再次使用peid查看新文件
恶意代码分析实战18-2_第19张图片

可以看到脱壳成功了

1.《恶意代码分析实战》

你可能感兴趣的:(malware)