앵커 기반 검색 및 LLM 추론을 활용한 바이너리 함수로부터의 실용적인 소스 코드 복구
요약
본 논문은 리버스 엔지니어링 기법과 LLM 추론을 결합하여 스트립된 바이너리 함수에서 소스 코드를 복구하는 실용적인 파이프라인을 제시합니다. Ghidra로 추출한 앵커를 이용해 후보 파일을 검색하고, 이를 LLM으로 재순위화함으로써 높은 정확도를 달성했습니다.
핵심 포인트
- 리버스 엔지니어링과 LLM 추론의 결합이 소스 코드 복구에 효과적입니다.
- 앵커(Anchor) 기반 검색을 통해 바이너리-소스 매칭 성능을 높였습니다.
- 고품질 소스 코드 데이터베이스가 성공적인 복구의 핵심 요소입니다.
우리는 리버스 엔지니어링, 앵커 기반 소스 코드 검색, 그리고 대규모 언어 모델(LLM) 추론을 결합하여 스트립된 바이너리 함수로부터 소스 코드를 복구하는 실용적인 파이프라인을 제시합니다. 우리의 바이너리-소스 코드 검색 방법은 근사 디컴파일된 의사 코드를 생성하기보다는, 소스 코드 데이터베이스에서 원본 함수를 식별하려고 시도합니다. 이 방법은 Ghidra를 사용하여 문자열, 상수, 외부 호출 및 사용 가능한 함수 이름과 같은 앵커(anchor)를 추출하고, 역색인 검색 데이터베이스를 통해 후보 파일을 검색하며, 후보들을 유력한 함수 스니펫으로 좁히고, 디스어셈블리, 디컴파일된 코드, 그리고 소스 메타데이터를 기반으로 대규모 언어 모델(LLM)을 사용하여 재순위화합니다. 신뢰할 수 있는 일치 항목은 후속 패스에서 앵커로 사용될 수도 있습니다. 스트립되고 최적화된 tcpdump 바이너리를 대상으로 하는 고충실도 소스 코드 데이터베이스를 기반으로 한 평가에서, 우리가 제안하는 바이너리-소스 매칭 방법은 95.2%의 어셈블리 명령어 커버리지를 달성했습니다. GitHub 기반 검색 데이터베이스에 대한 실험에서는 평균 35.5%의 명령어 커버리지로 낮은 성능을 보였는데, 이는 주로 검색 누락(retrieval misses) 때문이었습니다. 이러한 결과는 소스 레벨 바이너리 복구가 고품질 데이터베이스와 함께 탁월하며, 노이즈가 많은 환경에서도 유용한 도구임을 보여줍니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 arXiv Codex (cs.SE)의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기