我编写了一个简单的IDA插件,该插件在函数调用后查找mov MEM_LOCATION eax,并为存储返回值的内存添加名称。在函数调用之后,我将搜索范围限制为仅几条指令,如果在存储返回值之前看到另一个调用,则可以进行紧急救援。除了这些启发式方法外,是否还有更严格的方法来跟踪返回值的去向?

#1 楼

在静态上下文中,这称为“数据流分析”。例如,Hex-Rays将函数调用的返回位置信息合并到其函数表示中,以确定数据流入的位置。您没有提供关于要如何使用此信息的详细信息,但我想知道,研究一下编写Hex-Rays插件可能是值得的。

评论


我用Python实现了IDA插件。我将使用什么算法对EAX的内容进行数据流分析?我需要编写自定义内容还是有可用的工具?我对静态上下文感兴趣,因为我试图在开始反转之前添加有用的名称。

–user2142
2013年6月12日19:36

#2 楼

该问题的更通用名称是数据污染。
将某些数据标记为污点,然后在其余代码中跟踪污点传播。
关于污点分析的研究很多,工具也很多。看看bitblaze(尤其是taint跟踪器的编辑:只是发现它没有可用的独奏器并已过时...),它包含了taint跟踪的一部分。

如果您需要更“轻量级”的东西,请查看julio auto和bsdaemon的VDT,这些VDT更加面向开发利用,但可能会告诉您事情的工作原理。 VDT实际上所做的事情与您所做的非常相似,但是相反。给定执行跟踪,您可以从某个值进行向后搜索,以查看如何初始化,如何使用它以及影响了什么代码。

有关更多学术方法的信息,请查看“您想要了解的有关动态污点分析和正向符号执行的全部信息”。东西可以静态实现。
我现在想不出任何示例/工具。
我相信有人会想出更多的工具和想法。

评论


谢谢,这是一个非常好的答案。我最终接受了有关静态技术的答案,因为这是我遇到问题的上下文。

–user2142
13年6月13日在23:33