其实只要在主动安装木马的时候将API调用序列及相应参数做完整记录,就能极大减轻分析和清除木马的工作量。
对木马类程序处理多了,就渐渐觉得静/动态手工分析过程在很大程度上都是重其实只要在主动安装木马的时候将API调用序列及相应参数做完整记录,就能极大减轻分析和清除木马的工作量。复劳动。总要先花半个钟头了解程序特性,手工分析时还生怕漏掉某项隐蔽的关键操作,导致最终清除不彻底。
以前曾写过一个利用 API HOOKING 原理记录可疑程序对文件、注册表、服务和网络操作的小工具。API HOOKING 方式的优点在于,当调用 CreateFile 时可将文件名与句柄关联,等调用 WriteFile 对句柄操作时便能轻易取到文件名,对 hKey、socket 等句柄操作亦是如此。但该方式的缺点也显而易见,首先必须为每个感兴趣的 API 函数编写代码,“体力工作”繁重;其次我们不可能 HOOK 所有的 API 函数,由于缺乏完整的 API 调用序列作参考,在分析日志时很可能漏掉某些小动作。
另一种思路是采用调试技术,在所有被引入的 DLL 的各函数入口处预先设置断点,调试期间再通过堆栈信息获取参数。IDA pro 和 OllyDbg 都可用于动态调试,同时还提供了脚本/插件功能。上周在北京开会的时候,我利用酒醒的时间写了一个简单的 OllyDbg 插件,仅从 CALL 指令处通过 ESP 指针获取8个函数参数,不对函数返回后的 EAX 及堆栈内容进行记录,在对普通(未加壳)程序的测试中效果还算理想。只要先在“Search for -> All intermodular calls”窗口中执行“Set breakpoint on every command”设置断点,再运行插件的“Fast trace”功能即可。日志文件片断如下:
注:本文所有单引号用’替代。
-------------------------------------------------------------------
004099EC: CALL DWORD PTR DS:[<&KERNEL32.GetModuleFileNameA>] (kernel32.GetModuleFileNameA)
-------------------------------------------------------------------
ESP+00 (0012F704): 00000000
ESP+04 (0012F708): 0012F824""
ESP+08 (0012F70C): 0000010400000104 ???
ESP+0C (0012F710): 0012FA6D""
ESP+10 (0012F714): 0000000100000001 ???
ESP+14 (0012F718): 00000000
ESP+18 (0012F71C): 575C3A43575C3A43 ???
ESP+1C (0012F720): 4F444E494F444E49 ???
-------------------------------------------------------------------
00409A00: CALL DWORD PTR DS:[<&KERNEL32.CopyFileA>] (kernel32.CopyFileA)
-------------------------------------------------------------------
ESP+00 (0012F704): 0012F824"E: rojan.exe"
ESP+04 (0012F708): 0012F71C"C:WINDOWSsystem32 rojan.exe"
ESP+08 (0012F70C): 00000000
ESP+0C (0012F710): 0012FA6D""
ESP+10 (0012F714): 0000000100000001 ???
ESP+14 (0012F718): 00000000
ESP+18 (0012F71C): 575C3A43575C3A43 ???
ESP+1C (0012F720): 4F444E494F444E49 ???
-------------------------------------------------------------------
00409A94: CALL DWORD PTR DS:[<&ADVAPI32.OpenSCManagerA>] (ADVAPI32.OpenSCManagerA)
-------------------------------------------------------------------
ESP+00 (0012F704): 00000000
ESP+04 (0012F708): 00000000
ESP+08 (0012F70C): 000F003F000F003F ???
ESP+0C (0012F710): 0012FA6D""
ESP+10 (0012F714): 0000000100000001 ???
ESP+14 (0012F718): 00000000
ESP+18 (0012F71C): 575C3A43575C3A43 ???
ESP+1C (0012F720): 4F444E494F444E49 ???
-------------------------------------------------------------------
00409ACF: CALL DWORD PTR DS:[<&ADVAPI32.CreateServiceA>] (ADVAPI32.CreateServiceA)
-------------------------------------------------------------------
ESP+00 (0012F6DC): 0014F9C0
F8 F9 14 00 98 BA DC FE 00 00 00 00 B4 F9 CC 53 ...............S
82 6C FC 42 BF 8C 55 14 00 44 14 F4 AB AB AB AB .l.B..U..D......
AB AB AB AB EE FE EE FE 00 00 00 00 00 00 00 00 ................
20 00 07 00 09 07 18 00 58 FA C3 77 EF CD AB 89.......X..w....
00 00 01 00 01 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 05 00 00 00 01 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
06 00 00 00 0A 00 00 00 00 00 00 00 30 FB 14 00 ............0...
ESP+04 (0012F6E0): 0042008C"trojan"
ESP+08 (0012F6E4): 004200C0"Back door for testing"
ESP+0C (0012F6E8): 000F01FF000F01FF ???
ESP+10 (0012F6EC): 0000012000000120 ???
ESP+14 (0012F6F0): 0000000200000002 ???
ESP+18 (0012F6F4): 0000000100000001 ???
ESP+1C (0012F6F8): 0012F71C"C:WINDOWSsystem32 rojan.exe -start"
......
阅读推荐
相关文章