
ISA Recovery
펌웨어 바이너리와 그 (어쩌면 틀린) 디스어셈블리를 동작하는 Ghidra 프로세서 사양으로 변환하는 리버스 엔지니어링 파이프라인입니다. 문서화가 없고 Ghidra 지원도 없는 독점 프로세서를 만났을 때, 이 도구는 각 명령어의 실제 인코딩(어느 비트가 opcode이고, 어느 것이 레지스터이며, 어느 것이 즉시값(immediate)인지)을 복구하고, 펌웨어를 디컴파일하기 위해 Ghidra에 직접 로드할 수 있는 SLEIGH 사양을 작성합니다.
내부적으로는 **에이전트 워크플로(agentic workflow)**입니다. 각 단계가 한정된 작업을 위해 프롬프팅된 대규모 언어 모델(LLM)인 고정 파이프라인입니다. 워크플로는 LLM 자체가 아니라 결정적 코드에 의해 조율되며, 마지막에 생성된 모든 SLEIGH 생성자(constructor)는 수용되기 전에 Ghidra의 sleigh 바이너리로 컴파일하여 검증됩니다. 컴파일 실패는 최대 3회의 수리 시도 동안 모델에 피드백됩니다.
Objdump
│
▼
Bootstrap ─── deterministic clustering (no LLM)
│
▼
┌─ Processing Loop ──────────────────────────┐
│ Text Interpreter → Bit Interpreter ──┐ │
│ → Knowledge Manager │ │
│ → Supervisor │ │
│ │ split ─────┘ │
│ └── next cluster ──────────┤
└────────────────────────────────────────────┘
│
▼
Knowledge Base
│
▼
SLEIGH Generator ─── compile-verify-retry loop
│
▼
Ghidra .slaspec
명령어는 구조(바이트 크기, 토큰 패턴, 고정 비트 마스크)에 따라 클러스터로 그룹화됩니다. 그런 다음 각 클러스터는 전문화된 LLM 단계 체인으로 분석됩니다:
add {REG1}, {REG2}, {REG3})을 추출합니다.지식 베이스가 완성되면 별도의 SLEIGH generator가 두 단계로 Ghidra 사양을 구축합니다. 먼저 모든 생성자를 unimpl로 표시한 결정적 골격을 만들고, 그다음 LLM이 명령어 하나씩 p-code 의미론을 채워 넣으며, 각각을 Ghidra의 sleigh 바이너리로 컴파일하고 실패하면 재시도합니다.
분석자를 위한 코-파일럿이지 대체재가 아닌 도구로 설계되었습니다: TUI는 모든 결정을 노출하고, supervisor는 모호한 클러스터를 사람에게 에스컬레이션하며, LLM 대화, 도구 호출, 토큰 사용 기록 전체가 디스크에 저장됩니다.
LEGv8, MIPS, pi32v2, x86에서 테스트되었습니다.
# Docker (recommended)
echo "ANTHROPIC_API_KEY=sk-ant-..." > .env
./docker/run.sh integration_tests/mips
# Local
pip install -e ".[all]"
python -m main --config config.yaml
입력: 펌웨어 바이너리와 objdump 디스어셈블리 — 틀린 아키텍처로 생성된 것이라도 괜찮습니다. 이 도구는 디스어셈블리 문제 자체를 해결하지 않으며, 출력 품질은 입력 디스어셈블리 품질에 비례합니다.
출력: Ghidra .slaspec 파일과 레지스터, 명령어 인코딩, 주소 지정 모드, 아키텍처 특성으로 구성된 JSON 지식 베이스입니다.
전체 문서 — 아키텍처, 에이전트 내부 구조, 실제 사례, 설정 참조 — 는 위키에 있습니다:
pip install -e ".[docs]"
cd wiki && mkdocs serve
그런 다음 http://localhost:8000을 엽니다.
ANTHROPIC_API_KEY 환경 변수run.sh용, 선택 사항)