Kuna: 코딩 에이전트 시대의 디컴파일러 개발
요약
본 기사는 LLM을 활용하여 개발된 실험적인 디컴파일러 Kuna를 소개합니다. Kuna는 C 프로그램의 제어 흐름 구조화 측면에서 IDA Pro에 필적하는 성능을 보여주었으며, 특히 다른 디컴파일러의 기능을 학습하고 자율적으로 개선하는 새로운 접근 방식을 제시했습니다. 이 프로젝트는 단순히 도구를 넘어선 과학적인 실험으로, 인간 주도의 연구와 통찰력이 필수적임을 강조합니다.
핵심 포인트
- LLM 기반 Kuna가 C 프로그램 구조화에서 IDA Pro에 필적하는 성능을 보임.
- Kuna는 다른 디컴파일러의 기능을 학습하여 자율적으로 개선되는 새로운 접근 방식을 제시함.
- 이 프로젝트는 단순한 도구 개발이 아닌, 과학적인 연구 실험임을 강조함.
- 성공 시 angr 등 기존 디컴파일러가 Kuna를 필요로 하게 될 것이라는 비전을 제시함.
오늘 저는 Air Force Research Lab (AFRL) 방문 교수 연구원 및 Metalware 연구 펠로우로 근무하면서 여름 동안 개발해 온 실험적인 디컴파일러인 Kuna를 공개합니다.
하지만 제가 '개발해 왔다'고 말할 때, 이 프로젝트의 거의 모든 코드를 LLM이 작성했다는 점을 명확히 해야 합니다.
그럼에도 불구하고 현재 상태에서 이 디컴파일러는 C 프로그램의 제어 흐름 구조화 측면에서 업계 표준인 IDA Pro (9.2)에 필적합니다. 최근 벤치마크 결과에서 Kuna는 함수 중 44.4%에서 완벽한 구조화를 달성했으며, 이는 IDA의 45.7%와 비교됩니다.
이는 주로 자율적인 개선을 통해 이루어졌습니다. LLM은 지난 몇 년 동안 등장한 근본적인 지표들에서 자신이 IDA Pro보다 성능이 떨어지는 예시들을 연구함으로써 이를 수행했습니다.
이러한 전략을 사용하여, 다른 디컴파일러가 어려운 문제를 어떻게 해결하는지 시행착오를 통해 효과적으로 학습할 수 있습니다.
IDA Pro만이 이 개선 과정에서 연구된 유일한 디컴파일러는 아니었습니다.
이 대규모 개선 실험에는 Ghidra와 angr 디컴파일러도 포함되었습니다. 저는 후자(angr)의 핵심 개발자로 박사 과정을 모두 보냈습니다.
이 학습 방법은 LLM이 Kuna에 angr의 20가지가 넘는 근본적인 기능을 재구현할 수 있게 했으며, 이는 저희가 디컴파일 분야의 과학적 발전을 통해 설계하는 데 몇 년이 걸렸던 것입니다.
제가 이 모든 것을 강조하는 이유는 이 프로젝트가 단순히 잡동사니를 넘어선 것임을 명확히 하기 위함입니다. 이것은 자동으로 개선되는 과학적으로 흥미로운 도구를 개발하기 위한 진정한 실험적인 접근 방식입니다.
Kuna와 Hex-Rays의 인기 있는 angr 스위치 기능 발췌본

이 모든 것을 말하면서도, 저는 이 접근 방식의 한계점과 이 작업이 연구 커뮤니티에 미칠 수 있는 영향을 인정하고 싶습니다.
먼저, Kuna는 수십 년에 걸친 과학자와 엔지니어들의 디컴파일러 연구 발전을 통해 비로소 가능해졌습니다. 사실 Kuna는 NSA의 Ghidra를 Rust 포트로 만든 것이며, angr의 파이프라인과 더 유사하게 재작업되었습니다. 이것이 제가 당분간 angr 디컴파일러를 떠날 계획이 없는 이유이기도 합니다. angr 디컴파일러는 여전히 제가 디컴파일 분야의 최첨단 알고리즘을 개발하기 위해 가장 먼저 찾는 곳입니다. 단순히 그것이 그 목적으로 설계되었기 때문입니다.
반면에 Kuna는 높은 수준의 과학적 피드백만으로 무엇을 할 수 있는지 알아보기 위한 실험입니다.
현재 시점에서는 Kuna로 손으로 무언가를 작성하는 것이 훨씬 더 어려울 것입니다.
Kuna는 angr(및 기타 오픈 소스 연구)를 필요로 하며, 저의 희망은 시간이 더 흐른 후에 angr가 Kuna를 필요로 하게 될 것이라는 점입니다 (만약 이 실험이 성공한다면).
둘째, Kuna가 '자동적' 개선을 시작하기 위해서는 과학적 통찰력이 필요하며, 이것이 다른 어떤 디컴파일러도 아직 이런 작업을 하지 못한 이유(제가 아는 한)를 설명해 줄 것입니다.
이 지점에 도달하려면 새로운 근본적인 메트릭을 발견하고, 인간의 리버싱 가치와 일치하는 것을 연구하며, 의미 있는 벤치마크에 필요한 데이터가 무엇인지 이해하기 위해 수년간 통찰력을 모아야 했습니다.
요점은 이렇습니다. 이것 역시 자동 연구가 아니며, 인간이 주도하는 연구가 필요하다는 것입니다.
셋째, 그리고 마지막으로, 이 디컴파일러에는 여전히 상당히 많은 발전이 이루어져야 합니다. 우리는 구조화(structuring) 측면에서는 잘하고 있지만, 디컴파일은 단순한 구조화를 넘어섭니다! 우리는 타입을 개선하고, 최적화(optimizations), 재컴파일 가능성(recompilability), 변수 식별 등... 아시겠죠. 결국 이것은 우리가 Kuna를 개발하는 데 사용하는 프레임워크 내에서 이 모든 것을 달성하는 것이 가능한지 알아보기 위한 실험입니다. 그리고 저(우리)는 여러분의 도움이 정말 필요합니다.
Kuna의 내부 구조, 프로젝트 목표, 또는 자동 개선(automatic improvement) 작동 방식에 관심이 있다면 코드를 확인하거나 더 기술적인 후속 게시물을 기다려 주세요. 언제나처럼, 제 아이디어를 다듬고 연구를 진전시키는 데 도움을 준 분들께 감사를 표하고 싶습니다. 저의 박사 학위 지도 교수님이신 Fish와 Yan은 제 연구에 가장 큰 영감을 주셨습니다. 또한, 제 연구가 영향력을 가질 수 있도록 도와준 Metalware, AFRL, 그리고 국방부(Department of Defense)로부터 얻은 통찰력에도 감사합니다.
실험의 다음 체크포인트에서 뵙겠습니다!
AI 자동 생성 콘텐츠
본 콘텐츠는 HN Claude Code Search의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기