从理论上讲,像 IDA 这样的二进制分析工具应该可以生成一个输入来触发特定的分支补丁。因此,例如一个可执行文件,它接受一个命令行参数,分析输入并沿着特定的分支路径冒险。
有没有人知道有任何工具/插件可以为我提供沿着特定路径冒险所需的输入?输入可能来自命令行参数、网络 IO(我想这是最困难的,因为在有趣的通信发生之前它可能需要大量的协议握手)、DLL 导出调用参数、磁盘上的文件。
这似乎是一个难题,因为需要大量的图形遍历,但对于自动化工具来说完全可能吗?
从理论上讲,像 IDA 这样的二进制分析工具应该可以生成一个输入来触发特定的分支补丁。因此,例如一个可执行文件,它接受一个命令行参数,分析输入并沿着特定的分支路径冒险。
有没有人知道有任何工具/插件可以为我提供沿着特定路径冒险所需的输入?输入可能来自命令行参数、网络 IO(我想这是最困难的,因为在有趣的通信发生之前它可能需要大量的协议握手)、DLL 导出调用参数、磁盘上的文件。
这似乎是一个难题,因为需要大量的图形遍历,但对于自动化工具来说完全可能吗?
有一些项目正在研究它。最突出的可能是angr。请注意,这些项目中的每一个(截至目前)都不会用于生产,因为它们大多不稳定,仅适用于极端情况(大多数 SMT 实现)或需要很长时间才能返回任何内容(动态符号执行)。
可悲的是,您描述的用例并非微不足道。找到这些输入需要数据流分析,这依赖于语义架构信息和正确恢复的控制流图。
执行此操作的程序需要支持大多数调用约定并了解库函数访问的寄存器(或分析它们)。图遍历不是这里的问题,但在处理循环等方面存在问题。
看看Ponce,今年 Hex-Rays 插件上下文的获胜者:
http://research.trust.salesforce.com/Introducing-Ponce-One-click-symbolic-execution/
它不是“一键式”(您至少需要手动标记输入),但它似乎工作得很好。它使用Triton(带 Z3)来完成繁重的工作。