Skip to main content
QUICK REVIEW

[논문 리뷰] Variable Name Recovery in Decompiled Binary Code using Constrained Masked Language Modeling

Pratyay Banerjee, Kuntal Kumar Pal|arXiv (Cornell University)|2021. 03. 23.
Software Engineering Research참고 문헌 51인용 수 5
한 줄 요약

이 논문은 BERT와 바이트 페어 인코딩을 사용하여 복합된 바이너리 코드에서 의미 있는 변수 이름을 복원하는 제약 조건이 있는 마스킹 언어 모델링 방법인 VarBERT를 제안한다. 마스킹 토큰의 수를 정확히 예측하는 데 어려움이 있었으나, 히우리스틱 기반의 후처리 단계를 통해 이를 해결함으로써, 164,632개의 바이너리로 구성된 대규모 데이터셋에서 정확도가 84.15%에 달하여 이전 최고 성능 모델들을 크게 능가한다.

ABSTRACT

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 프로젝트에서 유래한 x86-64 바이너리 164,632개로 구성된 대규모 데이터셋을 기반으로 VarBERT-base와 VarBERT-small 두 가지 변형을 훈련한다.
  • 변수 주변의 문맥적 표현을 추출하여 트랜스포머의 문맥적 표현을 활용해 구문적 및 의미적 맥락을 포착함으로써 이름 예측 성능을 향상시킨다.
  • 정확도와 일반화 성능 지표를 사용하여 훈련 데이터 및 분포 외 코드 샘플에 대해 성능을 평가한다.

실험 결과

연구 질문

  • RQ1제약 조건이 있는 마스킹 언어 모델링이 복합된 바이너리 코드에서 높은 정확도로 변수 이름을 복원하는 데 효과적인가?
  • RQ2DEBIN과 DIRE와 같은 최고 성능 기준 모델들과 비교할 때, 제안된 모델은 정확도와 일반화 능력 측면에서 어떻게 성과를 내는가?
  • RQ3훈련 중에 볼 수 없었던 변수 이름, 특히 공유 라이브러리에서 유래한 이름에 대해 모델의 일반화 능력은 어느 정도인가?
  • RQ4변수 이름이 여러 토큰으로 나뉘어진 경우 모델의 성능은 어떠한가? 주요 실패 유형은 무엇인가?
  • RQ5더 작은, 더 효율적인 BERT 모델이 더 큰, 더 복잡한 아키텍처에 비해 유사하거나 더 뛰어난 성능을 낼 수 있는가?

주요 결과

  • VarBERT-small 모델은 DIRE 데이터셋에서 정확도가 84.15%에 달하여 이전 최고 성능 모델들보다 12.36%포인트 높다.
  • 기존 기준 모델들보다 훨씬 더 뛰어난 일반화 성능을 보이며, 훈련 중에 볼 수 없었던 코드에 대해 일반화 성능이 49% 향상되었다.
  • 다중 토큰 변수 이름에 대해서도 잘 작동하여, 두 개에서 다섯 개의 토큰으로 나뉘어진 이름들에 대해서도 합리적인 정확도를 유지한다.
  • 주요 오류 유형은 토큰 수 예측 오류, 부분적인 토큰 잘못 생성, 문자 수 오차 오류이며, 이는 예측 공간 내의 모호성에서 기인한다.
  • DIRE보다 더 데이터 효율적이고 계산 비용이 낮은 반면, 더 작은 아키텍처임에도 뛰어난 성능을 달성한다.
  • 히우리스틱 기반의 토큰 수 예측 알고리즘이 변수 이름 길이의 불확실성 문제를 효과적으로 해결하여 고정확도 추론을 가능하게 한다.

더 나은 연구,지금 바로 시작하세요

논문 읽기부터 검토까지, 연구 시간을 획기적으로 줄여보세요.

카드 등록 없음 · 무료 플랜 제공

이 리뷰는 AI가 만들고, 인간 에디터가 검토했습니다.