一句话:无需编译器元数据,结合数据统计与代码行为特征实现复杂二进制精确反汇编,精度提升3-4倍。
对 stripped 二进制进行精确反汇编是二进制分析、插桩与逆向工程的第一步。x86 等复杂指令集难以区分代码与嵌入数据,已有方法或假设不存在嵌入数据,或依赖编译器生成的重定位信息、异常处理元数据等,但真实复杂二进制常包含嵌入数据且缺少这些元数据。本文提出一种新方法:利用数据的统计特性检测代码,并利用代码的行为特性标记数据;同时提出新的静态分析与数据驱动的概率技术,并通过优先级错误纠正算法将二者结合。在复杂二进制上,该方法比此前最佳结果精确 3 至 4 倍。
Accurate disassembly of stripped binaries is the first step in binary analysis, instrumentation and reverse engineering. Complex instruction sets such as the x86 pose major challenges in this context because it is very difficult to distinguish between code and embedded data. To make progress, many recent approaches have either made optimistic assumptions (e.g., absence of embedded data) or relied on additional compiler-generated metadata (e.g., relocation info and/or exception handling metadata). Unfortunately, many complex binaries do contain embedded data, while lacking the additional metadata needed by these techniques. We therefore present a novel approach for accurate disassembly that uses statistical properties of data to detect code, and behavioral properties of code to flag data. We present new static analysis and data-driven probabilistic techniques that are then combined using a prioritized error correction algorithm to achieve results that are 3X to 4X more accurate than the best previous results.