[论文解读] Variable Name Recovery in Decompiled Binary Code using Constrained Masked Language Modeling
该论文提出VarBERT,一种结合BERT与字节对编码(Byte-Pair Encoding)的约束掩码语言建模方法,用于从反汇编二进制代码中恢复有意义的变量名。通过引入启发式后处理步骤解决掩码标记数量预测的挑战,该模型在包含164,632个二进制文件的大规模数据集上实现了84.15%的精确匹配准确率,显著优于先前的最先进方法。
Decompilation is the procedure of transforming binary programs into a high-level representation, such as source code, for human analysts to examine. While modern decompilers can reconstruct and recover much information that is discarded during compilation, inferring variable names is still extremely difficult. Inspired by recent advances in natural language processing, we propose a novel solution to infer variable names in decompiled code based on Masked Language Modeling, Byte-Pair Encoding, and neural architectures such as Transformers and BERT. Our solution takes extit{raw} decompiler output, the less semantically meaningful code, as input, and enriches it using our proposed extit{finetuning} technique, Constrained Masked Language Modeling. Using Constrained Masked Language Modeling introduces the challenge of predicting the number of masked tokens for the original variable name. We address this extit{count of token prediction} challenge with our post-processing algorithm. Compared to the state-of-the-art approaches, our trained VarBERT model is simpler and of much better performance. We evaluated our model on an existing large-scale data set with 164,632 binaries and showed that it can predict variable names identical to the ones present in the original source code up to 84.15\% of the time.
研究动机与目标
- 为解决在剥离的二进制文件中恢复有意义变量名这一关键挑战,该挑战会阻碍逆向工程的进行。
- 改进现有方法如DEBIN和DIRE,这些方法存在泛化能力差、计算成本高或性能有限的问题。
- 利用自然语言处理领域的最新进展——特别是BERT和掩码语言建模——用于低级代码中的变量名恢复。
- 开发一种更简单、数据效率更高的模型,使其在多样化的二进制程序中具有良好泛化能力。
- 通过自动化语义名称推断,减少在逆向工程过程中重命名变量所需的大量人工工作。
提出的方法
- 使用约束掩码语言建模对基于BERT的模型进行微调,其中掩码标记代表反汇编代码中未知的变量名。
- 使用字节对编码从原始反汇编C代码中学习代码特定的词汇表,以更好地对低级代码结构进行分词。
- 引入基于启发式的后处理算法,预测每个变量名的正确掩码标记数量,以解决掩码预测中的关键挑战。
- 在来自GitHub C项目、共164,632个x86-64二进制文件的大规模数据集上,训练两种变体——VarBERT-base和VarBERT-small。
- 利用Transformer的上下文表征,捕捉变量周围的句法和语义上下文,从而提升名称预测性能。
- 通过在训练数据和分布外代码样本上的精确匹配准确率与泛化性能指标,评估模型表现。
实验结果
研究问题
- RQ1约束掩码语言建模能否在反汇编二进制代码中以高准确率有效恢复变量名?
- RQ2与DEBIN和DIRE等最先进基线模型相比,所提模型在准确率和泛化能力方面表现如何?
- RQ3该模型在训练过程中未见过的变量名(尤其是来自共享库的变量名)上泛化程度如何?
- RQ4当变量名被拆分为多个标记时,模型表现如何?其主要失败模式是什么?
- RQ5更小、更高效的BERT模型能否实现与更大、更复杂架构相当或更优的性能?
主要发现
- VarBERT-small模型在DIRE数据集上实现了84.15%的精确匹配准确率,比先前最先进模型高出12.36个百分点。
- 与基线模型相比,该模型在未见代码上的泛化性能显著更优,在泛化性能上提升了49%。
- 该模型在多标记变量名上表现良好,即使变量名被拆分为2至5个标记,仍能保持合理的准确率。
- 主要错误类型为错误的标记数量预测、部分标记误生成以及字符数偏移的错误,这些错误源于预测空间中的歧义性。
- 与DIRE相比,该模型在数据效率和计算开销方面更具优势,同时采用更小的模型架构却实现了更优的性能。
- 基于启发式的标记数量预测算法有效解决了变量名长度不确定性的挑战,从而实现了高精度推理。
更好的研究,从现在开始
从阅读论文到最终审阅,大幅缩短您的研究时间。
无需绑定信用卡
本解读由 AI 生成,并经人工编辑审核。