假设我有N个可执行文件的集合,其中N足够大,使得重复的手动分析变得乏味。我想处理所有这些文件并提取有关某些函数调用的信息,例如从恶意软件分析的角度出发,知道对OutputDebugString的调用中使用了哪些常量参数是很有意思的,并且我想对于漏洞研究可能应用程序,例如格式化字符串。

动态方法最简单,但是在处理恶意软件时存在代码覆盖率和开销问题。我更喜欢静态方法,如果有人可以分享经验,我会很感兴趣。我一直在考虑编写IDA / HexRays脚本来运行每个二进制文件,尝试生成C文件并在输出上进行grep,但这可能效率很低。

#1 楼

希望我有一个简单的方法可以帮助您。当我以前做类似的事情时,我使用了distorm和pefile。基本上,我在代码中采用的方法(当然,它不是一个很好的方法)是:
执行可执行文件的递归下降反汇编,以查找对该函数的调用。
使用最近的反汇编指令检查参数是什么。

回想一下,学习IDA脚本本可以节省很多时间和精力,但我措手不及。如果您要走同样的路,我建议编写IDA脚本。虽然,我不确定您是否需要先使用Hex-Rays将其转换回C代码。

评论


有趣,谢谢-没考虑过暴风雨。 Hex-Rays由于其数据流跟踪而具有吸引力。可能存在某些情况(例如,在重复函数调用的参数中重复使用变量),这些情况可能很难通过纯反汇编来分析。

–user1307
13年3月29日在19:26

是的,从我的角度来看,有些极端情况需要手动分析。但是我的可执行文件集足够大,以至于这项技术可以满足我的需求。当时我只在寻找80%的解决方案。

–mrduclaw
13年3月29日在21:09