A Taxonomy of C Decompiler Fidelity Issues
Usenix security 2024
Carnegie Mellon University
Intro
反编译是分析编译程序并恢复表现相同行为的源代码程序的过程,是计算机安全领域中的关键工具。它使安全从业者能够更快速地深入了解编译程序的行为,尤其在分析恶意软件和商业现成软件(COTS)等安全场景中,源代码可能不可用的情况下。通过将可执行文件转换为可读的类C代码,反编译使安全从业者能够更有效地理解和应对恶意软件等威胁[36]。例如,在ˇDurfina等人的研究中,分析人员使用反编译器分析Psyb0t蠕虫,这是一种感染路由器以构建僵尸网络的恶意软件。
分析和理解可执行代码的行为比分析源代码困难得多,因为在编译过程中会删除信息。高级编程语言包含有助于人类编写和理解代码的抽象和结构,如变量名、类型、注释和控制流结构[34],而可执行程序则没有这些。这些抽象对于可执行程序运行并不是必需的,因此它们被编译器丢弃、简化或优化,以减小可执行文件的大小并最大化执行速度。
----编译过程会丢弃非必需信息
这意味着当分析可执行程序(如没有源代码的恶意软件)时,这些有用的抽象是不存在的。传统上,安全从业者使用反汇编器将程序的语义表示为汇编代码。虽然这比没有好,但汇编代码仍然远非可读。反编译填补了这一差距,通过分析可执行程序的行为并尝试恢复行为的源代码表示,使安全从业者更容易理解和应对威胁。尽管已经进行了大量工作