DeepSeek을 리더로 4개의 Qwen3.5-9B 모델을 활용한 바이너리 리버스 엔지니어링
We put DeepSeek in charge of four Qwen3.5-9B models to reverse engineer binaries using smaller open models.
핵심 요약
DeepSeek이 4개의 소형 Qwen 모델을 지휘하여 바이너리를 리버스 엔지니어링하는 실험을 진행했습니다.
- 모델 협업 구조 — DeepSeek이 리더로서 작업을 분배하고 Qwen 9B 모델들이 파이썬으로 함수를 재작성함
- 검증 시스템 — diff_test 오라클을 통해 원본 바이너리와 재작성된 코드의 동작을 바이트 단위로 비교함
- 성능 분석 — 소형 작업에서는 단일 모델보다 팀 단위 작업이 오버헤드로 인해 효율이 떨어지는 경향을 보임
- 지시사항 최적화 — 리더 모델이 작업 도중 소형 모델들의 프롬프트와 도구를 수정하며 성능을 개선함
최근 'Reverse Engineer Anything'이 엄청 화제였는데, 우리가 본 인상적인 리버스 엔지니어링 결과물들은 죄다 (폐쇄형) 프론티어 모델을 쓴 것들이었음. 그래서 우리는 작은 로컬 모델들을 더 큰 모델이 지휘하게 만들면 비용도 줄이고, 더 많은 사람들이 리버스 엔지니어링을 할 수 있지 않을까 싶어서 한번 시도해 봄 :)
셋업
-
리더: DeepSeek-V4.1-Flash. 바이너리를 디스어셈블하고, 함수 이름 짓고, 시그니처랑 메모리 레이아웃 복구한 다음, 힌트가 포함된 작업들을 공유 보드에 올림.
-
워커: 4× Qwen3.5-9B. 각자 작업 하나씩 집어와서 파이썬으로 함수 하나를 다시 짜는 역할.
-
오라클 (
diff_test): 원본 바이너리 함수랑 파이썬으로 짠 코드를 600번 정도 돌려보면서 리턴 값이랑 상태값 바이트 하나하나까지 다 비교함. 워커는 100% 일치할 때만 제출 가능. -
하니스: ipython 기반의 최소한의 하니스. 리더는 워커의 하니스(프롬프트, 도구 등)가 도움이 될 것 같으면 수정할 수 있음. (이게 제일 재밌는 부분임)
개념 증명(PoC)을 위해 Claude Code로 직접 만든 작은 C 프로그램 두 개를 타겟으로 잡고 컴파일했음. 팀은 오직 바이너리만 볼 수 있었음. 베이스라인으로 DeepSeek(리더) 혼자서 각 작업을 수행하게도 해봄.
| Task | Run | Functions | Escalated | Cost | Time |
|---|---|---|---|---|---|
| HF logo animation | Team | 38/38 | 15 | $2.97 | 86 min |
| HF logo animation | Solo | 38/38 | — | $0.87 | 14 min |
| Space shooter | Team | 56/56 | 20 | $3.60 | 100 min |
| Space shooter | Solo | 56/56 | — | $3.28 | 54 min (4 launches) |
작은 작업에서는 팀으로 움직이는 게 오히려 오버헤드임. 리더가 작은 모델들 관리하고 수정하느라 혼자 하는 것보다 시간이 더 걸림.
