我正在研究一个RE项目,并且想出一个可以极大帮助我的工具,并想知道它是否已经存在。

我想在其中找到代码的特定部分。二进制搜索字符串等并没有太大帮助。因此,我有一个想法,如果我可以两次运行该程序,一旦让该程序执行与我要查找的代码相对应的事情,而第二次不执行该操作,该怎么办。 >
如果我在两次运行中都有执行基本块的痕迹,那么我也许可以做一个“ diff”并使用它来缩小功能在二进制文件中的位置。

这样的工具是否已经存在,或者有更好的方法来缩小执行代码的范围。

#1 楼

这种方法通常称为“差异调试”。我知道可以使用以下工具:




Pedram Amini的PaiMei

Myx by Joxean Koret
IDA的踪迹replayer允许区分两个执行跟踪(也由Joxean实现)

BinNavi具有此功能

简单之处在于@dionthegod

来自Carlos Garcia的脚本它使用Mario Vilas的WinAppDbg框架

在任何允许脚本化断点的调试器中快速实现某些东西并不难:块/指令(取决于您的喜好和调试器允许的内容)。在断点处理程序中,记录命中值,然后禁用/删除断点。
运行程序并执行除您感兴趣的部分外的所有操作。
退出程序。
更改断点处理程序以停止执行,或将其记录在单独的日志文件中。
再次运行程序并练习所需的部分。剩下的一个或多个断点应该命中。他们会将您指向有趣的代码。


#2 楼

您可以查看ollydbg插件conditional branch logger

http://www.woodmann.com/collaborative/tools/index.php/Conditional_Branch_Logger

它为条件分支解析可执行文件(je , jne .... jecxz....loopd etc)
在它们上设置日志记录断点,并将结果记录到txt文件中,该文件可用于区分两个不同执行方案之间路径中的
转移