실습 노트
Reverify가 보여주는 바이너리 AI 분석의 기준: 모델 제안과 바이트 검증 분리
Reverify는 AI의 바이너리 해석을 결정적 도구로 검증하고 VERIFIED·REFUTED·INCONCLUSIVE 결과와 증거를 남깁니다.
바이너리를 읽는 AI에서 가장 위험한 순간은 그럴듯한 설명이 틀렸을 때입니다. 소스 코드에는 이름과 타입이 남아 있지만, 바이너리에는 모델이 추정해야 하는 오프셋·구조체·명령 흐름이 많습니다. Reverify는 이 문제를 “모델에게 더 확신을 주기”가 아니라 모델의 가설과 실제 바이트를 분리하기로 풀려는 도구입니다.
모델은 제안하고 결정적 도구가 판정한다
공식 README의 핵심 문장은 간단합니다. 모델이 구조나 알고리즘에 대한 가설을 제안하면, 결정적이고 순수한 Python 도구가 실제 바이너리를 읽고 그 주장을 검사합니다. 결과는 VERIFIED, REFUTED, INCONCLUSIVE로 나뉘며, 관찰한 바이트와 주소가 함께 돌아옵니다.
이 흐름은 일반적인 “AI가 설명을 생성하고 사람이 믿을지 판단”하는 방식과 다릅니다. 주장 자체를 실행 가능한 검증 단위로 바꿔야 하므로, 에이전트가 다음 가설을 만들 때 이전 결과를 다시 확인할 수 있습니다.
가설 제안 → 바이트·명령·구조 검증 → 증거 반환 → 다음 가설 선택
검증 대상에는 PE·ELF·Mach-O 파싱, x86·x64·ARM·ARM64 디스어셈블리, 패턴 검색, CPU 에뮬레이션, Protobuf/TLV 분석 등이 포함됩니다. 기본 코어는 순수 Python으로 실행되고, 필요하면 Capstone·Unicorn·LIEF를 선택적으로 설치할 수 있습니다.
“검증됨”만으로 충분하지 않은 이유
Reverify는 모든 검증 결과를 똑같이 좋은 증거로 취급하지 않습니다. 파일 시작이 MZ라는 사실처럼 너무 일반적이거나, 같은 주장을 반복하거나, 모델에게 이미 보여준 자료를 그대로 되풀이하는 주장은 정보량이 낮을 수 있습니다. 공식 README는 각 결과에 가중치를 부여하고, 반박된 주장이 없으며 최소 정보량 기준을 넘을 때만 재구성이 grounded하다고 설명합니다.
이 기준은 AI 평가에도 그대로 적용할 수 있습니다. “오류가 발견되지 않았다”와 “새롭고 구체적인 사실을 독립적으로 확인했다”는 다른 결과입니다. 검증 루프를 만들 때는 통과 개수뿐 아니라 어떤 입력을 관찰했고, 얼마나 구별되는 정보를 얻었는지까지 기록해야 합니다.
MCP와 CLI를 함께 제공하는 이유
Reverify는 MCP 서버를 제공해 Claude Code·Cursor 같은 에이전트가 검증 도구를 직접 호출할 수 있도록 하고, 일반 CLI도 제공합니다. 따라서 두 사용 패턴을 나눌 수 있습니다.
- 사람이 CLI로 파일 형식·명령·주소를 확인합니다.
- 에이전트는 MCP로 작은 가설을 보내고 결과 상태를 받습니다.
- CI나 평가 작업은 하나라도
REFUTED가 나오면 실패하도록 게이트를 둘 수 있습니다. - 모델이 바뀌어도 바이트를 판정하는 결정적 층은 유지합니다.
이 구조는 모델을 제거한다는 뜻이 아닙니다. 모델은 어떤 오프셋을 볼지, 어떤 구조를 의심할지 제안하는 탐색 도구로 남고, 최종 사실 판정은 재현 가능한 도구로 이동합니다.
적용 범위와 주의사항
Reverify는 공식 README에서 권한이 있는 역공학, 악성코드 분석, CTF, 상호운용성 연구, 소유하거나 분석 허가를 받은 소프트웨어를 대상으로 한다고 명시합니다. 승인되지 않은 파일을 분석하거나 취약점 악용으로 확장하는 사용법은 이 도구의 공개 설명 범위를 벗어납니다.
작은 실험은 공개 샘플이나 직접 만든 바이너리로 시작하는 편이 좋습니다. 관찰 모드와 예상값 비교 모드를 구분하고, 파일 오프셋·RVA·VA의 의미를 기록하며, INCONCLUSIVE를 실패가 아닌 추가 증거가 필요한 상태로 보존해야 합니다. 모델의 설명을 문서에 복사하기 전에 검증 결과와 원본 파일의 해시·버전을 함께 남기는 것도 중요합니다.
적용 판단
Reverify의 실용적 가치는 역공학 자동화 자체보다 AI가 말한 사실과 실제 관찰을 별도 층으로 저장하는 설계에 있습니다. 바이너리 분석뿐 아니라, AI가 제안하고 결정적 도구가 판정할 수 있는 모든 작업에서 재사용 가능한 패턴입니다.
다만 공식 프로젝트가 강조하는 것은 검증 도구이지, 모델이 자동으로 정확한 분석을 완성한다는 약속이 아닙니다. 분석 대상의 권한, 파일 버전, 도구 지원 범위, INCONCLUSIVE 결과를 사람이 검토하는 절차까지 함께 설계해야 합니다.