识别 cpp 静态二进制文件中的函数

逆向工程 艾达 静态分析 编译器
2021-07-01 15:11:05

当我打开 cpp 静态二进制文件时,如何识别已知函数,如 fopen/ioctl/printf?它们已被静态编译为二进制文件。

我不知道这个二进制文件的编译器。

1个回答

据我所知,已经实现了 3 种方法来识别库函数:

  1. IDA FLIRT本质上使用字节模式来创建函数签名
  2. Ghidra 的FunctionID功能在散列指令以将函数与其众所周知的名称匹配时会考虑助记符和操作数类型
  3. JEB 的反汇编程序通过使用自定义散列算法对函数的程序集(而非二进制代码)进行散列来创建函数签名

Google Project Zero 的 Thomas Dullien 在他的文章“在可执行代码中搜索静态链接的易受攻击的库函数:帮助研究人员找到 0ld 天中探索了一种基于机器学习技术的实验方法,他在文章中尝试使用相似性散列与距离度量相结合试图识别由不同编译器工具链和编译选项生成的二进制文件中的函数。文章还提到了已发表研究中的替代方法,但除了MACHOC之外,没有可用的公共代码或实现。