**逆向分析**
**一、查壳**
工具有 PEID、EXEINFOPE 等多个,推荐使用 Exeinfo PE,其最近更新时间为 2019.9.27。查壳软件需要多个,以防止出现误查情况。通过这些工具可以确定程序是否加壳以及所使用的壳的类型。比如在分析某个程序时,经检测发现是一个 UPX 的壳。
**二、脱壳**
1. 可以直接用脱壳工具进行脱壳,但要注意脱壳软件适用的版本。
2. 也可以进行手动脱壳,下面以使用 OD(OllyDbg)载入目标文件进行手动脱壳为例:
- 用 OD 载入目标文件时会出现提示,点击“是”来到壳的入口。
- 使用 ESP 定律脱壳,其原理是堆栈平衡原理,适用范围几乎全部的压缩壳和部分加密壳。当寄存器窗口(FPU)中有且只有 ESP 和 EIP 变为红色的时候,右键点击 FPU 窗口中的 ESP,然后点击“数据窗口跟随”,或者在 command 窗口中输入 DD ESP 的值(如 DD 0012FF6C)并敲击回车键,来到数据窗口中的相应地址。
- 在数据窗口中对应数值栏中右键下硬件访问断点,也可以在 command 窗口输入 HR 0012FFA4 回车后完成设置断点。然后按 F9 运行程序,程序会暂停在设置的断点位置。
- 此时可以看到一个非常显眼的大跳转(如 jmp wechat.004028A2),这就是程序的 OEP(Original Entry Point,原始入口点)。在该跳转上右键,选择“此处为新的 EIP”,然后 F8 单步过,来到程序的领空。
- 脱壳前先把断点去掉(调试-硬件断点-删除),然后右击程序当前位置第一行代码,选择“OllyDump 脱壳调试进程”,在弹出的窗口中点击脱壳并保存文件。
如果目标的壳只是简单的 UPX 壳,一般没有资源修复之类的问题。如果遇见需要修复重定位和资源的情况,可以参考其他教程。
**三、分析**
1. 将 dump 出来的程序拖进 OD 里面,此时打开没有加密提示了。可以使用一些插件来帮助分析工作,比如使用中文搜索插件。
- 点击“智能搜索”,查看有没有非常显眼的字符串。只有脱过壳的程序才能使用插件进行有效分析,如果是加壳程序,插件分析不起作用。
- 例如,非常幸运地第一眼就看到了关键的字符串,如像木马回链的 IP 地址(110.110.110.110)、路径(C:\windwos\Temp\kbhook.dat)以及相关汉字“你好”。从“你好”分析,鼠标双击“你好”进入程序主界面,可以看到这是向 110.110.110.100 服务器发送“你好”字符。
- 查看 kbhook.dat 文件,发现一开始是 0KB,里面一片空白。需要关闭 OD,让程序真正执行一下,调用任务管理器查看程序的进程。此时发现 kbhook.dat 已经变大,猜测是键盘记录文件。打开文件时若被目标占用,先结束进程,再打开文件。经对照,文件内容是经过 base64 编码的,解码后是记录的键盘操作。
2. 也可以使用 IDA 进行分析:
- 首先将目标程序拖进 OD,并 F8 单步过,一直到程序运行起来,记录下程序在哪一个 CALL 上面直接运行起来的地址(如 call wechat1.00402220)。
- 打开 IDA,将目标拖入 IDA,点击确定加载程序。如果没有重定位,地址一样;如果有重定位,需要勾选 IDA“手动加载”,然后将 OD 中的基地址(按 alt+E 调出 OD 窗口)填进去,使两个程序的地址能对应起来。
- 进入 IDA 的概览模式,敲击空格键切换到反汇编。使用快捷键 G 进行地址搜索,找到记录的地址。来到相应函数后,使用 F5 插件进行代码的伪 C 查看,可以使程序的流程一目了然。