跟踪辅助代码识别?

逆向工程 工具 调试
2021-06-11 08:03:33

我正在从事一个 RE 项目,并且有一个对我有很大帮助的工具的想法,并想看看它是否已经存在。

我想在二进制文件中找到代码的特定部分。搜索字符串等没有多大帮助。所以,我有一个想法,如果我可以运行程序两次,一次我会让程序执行与我正在寻找的代码相对应的事情,第二次我不会执行该操作。

如果我在两次运行期间都执行了一些基本块,我也许可以做一个“差异”并使用它来缩小功能在二进制文件中的位置。

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

2个回答

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

在任何允许脚本断点的调试器中快速实现一些东西并不难:

  1. 在每个函数/基本块/指令上放置断点(取决于您的偏好和调试器允许的内容)。在断点处理程序中,记录命中然后禁用/删除断点。
  2. 运行程序并做所有你能做的,除了你感兴趣的部分。
  3. 退出程序。
  4. 更改断点处理程序以停止执行,或将其记录在单独的日志文件中。
  5. 再次运行程序并练习您需要的部分。一个或多个剩余的断点应该被击中。他们会为您指出有趣的代码。

你可以查看一个 ollydbg 插件 conditional branch logger

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

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