문맥 기반 인‑컨텍스트 디컴파일로 실행 가능한 코드 재생성

문맥 기반 인‑컨텍스트 디컴파일로 실행 가능한 코드 재생성
안내: 본 포스트의 한글 요약 및 분석 리포트는 AI 기술을 통해 자동 생성되었습니다. 정보의 정확성을 위해 하단의 [원본 논문 뷰어] 또는 ArXiv 원문을 반드시 참조하시기 바랍니다.

초록

본 논문은 최적화된 바이너리에서 원본 소스 코드를 복원하고, 복원된 코드를 재컴파일·재실행할 수 있도록 하는 하이브리드 프레임워크 ICL4Decomp을 제안한다. 인‑컨텍스트 학습(I​CL)을 활용해 (1) 유사 바이너리·소스 쌍을 검색해 예시로 제공하고, (2) 컴파일러 최적화 규칙을 자연어 형태로 프롬프트에 삽입한다. 실험 결과 O0‑O3 최적화 수준과 GCC·Clang 컴파일러 전반에 걸쳐 기존 최첨단 디컴파일러 대비 재실행 가능률이 평균 40% 향상됨을 보였다.

상세 분석

ICL4Decomp은 두 가지 상보적인 인‑컨텍스트 정보원을 결합한 점이 핵심이다. 첫 번째는 대규모 (어셈블리, 소스) 페어 코퍼스를 사전 구축하고, 고차원 임베딩을 통해 목표 함수와 의미적으로 가장 유사한 k개의 예시를 실시간으로 검색한다. 여기서 사용된 Nova 인코더는 기능 대비 대비 학습과 최적화 대비 학습을 동시에 수행해, 최적화 수준이 달라져도 함수 의미가 유지되는 임베딩을 생성한다. 검색 단계에서는 CSLS 기반 유사도 계산과 카테고리‑aware 재랭킹을 적용해, 알고리즘·문자열·IO·시스템·수학 등 기능 카테고리가 일치하는 예시를 우선 선택한다. 이렇게 구성된 예시 집합 C_ret은 “어셈블리 → 소스” 매핑을 명시적으로 보여주어 LLM이 구조적·문법적 패턴을 빠르게 파악하도록 돕는다.

두 번째 인‑컨텍스트 정보는 최적화 규칙이다. 컴파일러가 수행하는 루프 전개, 레지스터 재사용, 인라인 확장 등 변환을 자연어로 서술한 규칙 집합 C_opt을 프롬프트에 삽입한다. 이는 LLM이 최적화에 의해 손실된 제어 흐름이나 변수 스코프 정보를 추론하는 데 필요한 힌트를 제공한다. 특히, 최적화 수준이 높을수록 어셈블리와 원본 소스 간의 구조적 차이가 커지므로, 규칙 기반 힌트가 재구성 정확도를 크게 끌어올린다.

모델 자체는 파라미터를 고정한 상태에서 프롬프트만으로 동작한다. 따라서 새로운 바이너리나 다른 컴파일러에 대해 추가 학습이 필요 없으며, 프롬프트 설계만으로 손쉽게 적용 범위를 확장할 수 있다. 실험에서는 GPT‑4‑Turbo와 같은 최신 LLM을 사용했으며, 디코딩은 온도 0.0, 토큰 제한 1024로 설정해 결정론적 출력을 확보했다.

평가 지표는 재실행 가능률(re‑executability)이며, 이는 (1) 생성된 소스가 컴파일러 오류 없이 빌드되는지, (2) 동일 입력에 대해 원본 바이너리와 동일한 출력/부작용을 보이는지를 테스트 스위트로 검증한다. 결과는 O3 최적화에서 기존 Hex‑Rays, Ghidra, DeGPT 등에 비해 55%~70% 수준의 재실행 가능률을 달성했으며, 전체 평균은 약 40% 포인트 상승했다. 또한, Ablation Study를 통해 C_ret만 사용했을 때와 C_opt만 사용했을 때 각각 약 20%·15%의 개선 효과가 있음을 확인했고, 두 정보를 결합했을 때 시너지 효과가 가장 크게 나타났다.

한계점으로는 (1) 프롬프트 길이 제한으로 인해 k가 너무 커지면 성능이 감소하고, (2) 규칙 집합이 현재는 정형화된 자연어 서술에 의존해 자동 확장이 어려우며, (3) 테스트 스위트가 충분히 포괄적이지 않을 경우 재실행 가능률이 과대 평가될 수 있다. 향후 연구에서는 동적 규칙 생성, 멀티모달 어셈블리‑소스 매핑, 그리고 대규모 실세계 악성코드 데이터셋을 통한 일반화 검증을 제안한다.


댓글 및 학술 토론

Loading comments...

의견 남기기