
Reverify의 기능
Reverify는 바이너리 분석 중 환각을 줄이도록 설계된 AI 지원 리버스 엔지니어링 툴킷입니다. 언어 모델의 재구성을 그대로 신뢰하는 대신, Reverify는 이를 가설로 취급하고 실제 바이너리와 대조합니다.
워크플로는 간단합니다. 모델이 제안하고 결정론적 도구가 검증합니다. Reverify는 바이트를 디스어셈블하고, 패턴을 검색하고, 실행 파일 형식을 파싱하고, 문자열을 추출하고, 코드를 에뮬레이션하고, 와이어 형식을 검사할 수 있습니다. 검증된 주장은 관찰된 증거와 함께 VERIFIED, REFUTED, INCONCLUSIVE 중 하나의 결과를 받습니다.
Reverify는 악성 코드 분석, CTF 과제, 상호 운용성 연구, 소유하고 있거나 검사 권한을 받은 소프트웨어 등 승인된 리버스 엔지니어링에만 사용하세요.
주요 기능
- 결정론적 검증: 주장은 AI가 생성한 설명을 그대로 수용하는 대신 대상 바이너리에서 관찰된 바이트를 기준으로 판단됩니다.
- 실행 파일 파싱: 지원되는 경우 아키텍처, 진입점, 섹션, 임포트, 익스포트를 포함해 PE, ELF, Mach-O 파일을 검사합니다.
- 디스어셈블리 및 에뮬레이션: x86, x64, ARM, ARM64 코드를 분석하며, 기능은 활성 백엔드에 따라 달라집니다.
- 패턴 및 문자열 분석:
??와일드카드를 사용해 AOB 패턴을 검색하고, 오프셋과 함께 ASCII 또는 UTF-16LE 문자열을 추출합니다. - 프로토콜 검사: 스키마 없이 Protobuf 및 TLV 데이터를 디코딩합니다.
- 리버스 엔지니어링 유틸리티: Frida 후킹을 생성하고, 정렬된 헥스 덤프를 만들며, 바이너리 차이 또는 패치를 생성합니다.
- 에이전트 통합: Claude Code 및 Cursor와 같은 도구에서 사용할 수 있도록 Reverify를 Model Context Protocol 서버로 실행합니다.
- 순수 Python 폴백: 기본 패키지는 Ghidra나 필수 네이티브 분석 엔진 없이도 작동합니다.
설치 및 설정
순수 Python 코어 설치
PyPI에서 CLI와 MCP 서버를 설치합니다.
pip install reverify
이 명령은 순수 Python 코어를 설치하며, 시작하는 가장 간단한 방법입니다.
선택적 고급 엔진 설치
향상된 파싱, 디스어셈블리, 에뮬레이션 기능을 사용하려면 전체 추가 기능을 설치합니다.
pip install "reverify[full]"
전체 설치를 하면 Reverify에서 디스어셈블리에 Capstone, CPU 에뮬레이션에 Unicorn, PE, ELF, Mach-O 파싱에 LIEF를 사용할 수 있습니다. 이러한 패키지를 사용할 수 없으면 Reverify는 순수 Python 구현으로 폴백합니다.
활성화된 엔진을 확인합니다.
reverify backends
체크아웃에서 직접 실행
패키지를 설치하지 않고 저장소를 사용할 수도 있습니다.
python reverify/cli.py auto sample.bin --json
python reverify/cli.py parse-pe sample.exe --json
python reverify/cli.py disasm 90505831C0C3 --arch x86_64
기본 바이너리 분류
auto 명령으로 시작하면 파일 형식과 아키텍처를 감지하고, 섹션을 검사하며, 주요 문자열을 보고합니다.
reverify auto sample.bin --json
다른 스크립트, CI 작업 또는 AI 에이전트가 결과를 프로그래밍 방식으로 사용해야 할 때 --json 옵션이 유용합니다.
PE, ELF 또는 Mach-O 파일을 집중적으로 파싱하려면 parse를 사용합니다.
reverify parse sample.bin --json
Windows 실행 파일의 경우 전용 PE 파서를 사용해 PE32 또는 PE32+ 헤더, 임포트, 익스포트를 검사할 수 있습니다.
reverify parse-pe sample.exe --json
원시 바이트 디스어셈블리
disasm 명령은 16진수 머신 코드를 디코딩할 수 있습니다. 다음 예제는 짧은 x86-64 시퀀스를 분석합니다.
reverify disasm 90505831C0C3 --arch x86_64
디스어셈블리는 제안된 명령어 시퀀스가 바이트와 일치하는지 확인하는 데 유용합니다. Reverify는 바이너리 섹션의 코드도 디스어셈블할 수 있으므로, 주장을 모델이 생성한 고립된 해석이 아니라 파일 내용에 연결할 수 있습니다.
검증 루프 사용
Reverify의 주장은 바이너리에 대한 구조화된 가설입니다. verify 명령은 주장을 평가하고 툴킷이 관찰한 증거와 함께 상태를 반환합니다.
명령어 시퀀스 검증
다음 주장은 4096 오프셋의 바이트가 push, mov, sub로 시작하는 함수 프롤로그로 디코딩되는지 확인합니다.
reverify verify sample.bin --claim '{
"kind": "instructions",
"offset": 4096,
"mnemonics": ["push", "mov", "sub"],
"note": "function prologue"
}'
Reverify는 제안된 해석을 단순히 반복하지 않습니다. 관련 바이트를 읽고 디스어셈블한 다음, 요청된 니모닉 시퀀스가 뒷받침되는지 보고합니다.
에뮬레이션 결과 검증
에뮬레이터에서 머신 코드를 실행하고 결과 레지스터를 확인해 동작에 대한 주장도 테스트할 수 있습니다.
reverify verify - --claim '{
"kind": "emulate_result",
"code": "b805000000b90300000001c8c3",
"arch": "x86",
"expect_registers": {"eax": 8}
}'
이 검증은 제공된 루틴이 eax를 8과 같게 유지하는지 확인합니다. 이는 명령어가 무엇을 계산하는 것처럼 보이는지에 대한 모델의 설명을 그대로 수용하는 것보다 강력한 검사입니다.
사용 가능한 주장 유형
Reverify는 다음과 같은 주장 종류를 지원합니다.
bytes_at은 지정된 위치의 바이트를 확인합니다.pattern_present는 바이트 패턴의 존재 여부를 확인합니다.string_present는 바이너리에 특정 문자열이 있는지 확인합니다.instructions는 제안된 명령어 시퀀스를 확인합니다.emulate_result는 에뮬레이션 후 예상 레지스터 결과를 확인합니다.protobuf_field는 Protobuf 필드 주장을 확인합니다.pe_import는 PE 임포트 주장을 확인합니다.
일괄 검증 및 CI 게이팅
대규모 분석의 경우 여러 주장을 JSON 파일에 저장한 후 함께 검증할 수 있습니다.
reverify verify sample.bin --claims-file claims.json
주장 중 하나라도 반박되면 CLI는 0이 아닌 상태 코드로 종료됩니다. 따라서 CI 파이프라인과 자동화된 에이전트 워크플로에 적합합니다. 재구성된 구조나 루틴이 게시되거나 이후 단계에서 사용되기 전에 거부할 수 있습니다.
실용적인 워크플로는 다음과 같습니다.
auto,parse,strings또는disasm을 사용해 초기 증거를 수집합니다.- 분석가 또는 모델이 범위를 좁힌 주장을 작성하도록 합니다.
- 관련 주장을 JSON 파일에 저장합니다.
verify를 실행하고 모든REFUTED또는INCONCLUSIVE결과를 검토합니다.- 뒷받침되는 주장이 관찰된 증거에 근거할 때까지 재구성 내용을 수정하고 반복합니다.
추가 분석 명령
Reverify에는 검증 프로세스를 지원할 수 있는 여러 전용 명령이 포함되어 있습니다.
- 패턴 스캔: 정확한 바이트와
??와일드카드가 포함된 AOB 검색에는pattern-scan을 사용합니다. - 문자열 추출:
strings를 사용해 ASCII 및 UTF-16LE 문자열을 찾고 오프셋을 유지합니다. - 마이크로 에뮬레이션:
emulate를 사용해 CPU 레지스터 및 스택 동작을 검사합니다. - 와이어 형식 분석: 스키마 없는 데이터 분석에는
decode-protobuf또는decode-tlv를 사용합니다. - Frida 통합: 인터셉터 스크립트를 생성하려면
gen-hook을 사용합니다. - 원시 데이터 검사: 바이너리 데이터를 정렬된 형태로 확인하려면
hexdump를 사용합니다. - 변경 분석: 바이너리 차이 확인 및 패치 생성을 위해
diff-patch를 사용합니다. - 경계 감사: 방어적 파일 시스템 및 SSRF 경계 확인에는
audit-boundary를 사용합니다.
재구성으로 검증 루프 완성
reconstruct 명령은 Reverify의 폐쇄 루프 접근 방식을 구현합니다. 모델이 주장을 제안하고, 결정론적 도구가 이를 판정하며, 근거에 기반한 결과에 도달할 때까지 프로세스를 반복합니다. 모델에 완전한 구조나 알고리즘을 요청한 뒤 첫 응답을 권위 있는 것으로 간주하는 것보다 이 방식이 바람직합니다.
신뢰할 수 있는 결과를 얻으려면 주장을 작고 검증 가능하게 유지하세요. 정확한 바이트, 짧은 명령어 시퀀스, 임포트된 함수 또는 레지스터 결과에 대한 주장은 바이너리 전체에 대한 포괄적인 설명보다 검증하고 수정하기 쉽습니다.
Reverify와 AI 에이전트 연결
저장소 체크아웃에서 다음 명령으로 MCP 서버를 시작합니다.
python reverify/mcp_server.py
그런 다음 Claude Code 또는 Cursor와 같은 MCP 호환 클라이언트가 서버를 실행하도록 구성할 수 있습니다. 에이전트는 Reverify의 구문 분석, 디스어셈블리, 스캔 및 검증 도구를 직접 호출할 수 있습니다.
MCP 도구 re_verify_claim은 동일한 검증 루프를 에이전트에 제공합니다. 이를 통해 에이전트는 가설을 제출하고 VERIFIED, REFUTED 또는 INCONCLUSIVE 결과를 받은 후 결론을 보고하기 전에 분석을 수정할 수 있습니다.
고급 팁
- 활성 백엔드를 먼저 확인하세요: 분석 전에
reverify backends를 실행하여 Capstone, Unicorn 및 LIEF를 사용할 수 있는지 확인합니다. - JSON 출력을 우선하세요: 스크립트, 에이전트 또는 CI 시스템에서 결과를 구문 분석할 경우
--json을 사용합니다. - 관찰과 해석을 분리하세요: 상위 수준의 설명을 작성하기 전에 오프셋, 바이트, 디코딩된 명령어 및 레지스터 상태를 기록합니다.
- 불확실한 결과를 정직하게 다루세요:
INCONCLUSIVE결과는 검증이 아닙니다. 더 많은 증거를 수집하거나 주장의 범위를 좁히세요. - 관련 주장을 일괄 처리하세요: 구조적 확인과 동작 확인을 claims 파일에 넣어 하나의 반박된 가정이 자동화된 재구성을 중단하도록 합니다.
- 동작 관련 주장에는 에뮬레이션을 사용하세요: 어떤 루틴이 계산하는 내용을 주장한다면 디스어셈블리에만 의존하지 말고 예상 레지스터 상태를 검증합니다.
- 이식성을 위해 순수 Python 대체 구현을 사용하세요: 기본 패키지로 시작한 다음 성숙한 네이티브 엔진이 필요할 때
reverify[full]을 설치합니다.
결론
Reverify는 중요한 주장이 바이너리에 대한 결정론적 확인을 통과하도록 요구함으로써 AI 지원 리버스 엔지니어링을 더욱 견고하게 만듭니다. CLI는 신속한 선별, 구문 분석, 디스어셈블리, 패턴 스캔, 에뮬레이션 및 일괄 검증을 지원하며, MCP 서버는 AI 에이전트가 동일한 증거 기반 워크플로에 접근할 수 있도록 합니다. 그 결과는 확신에 찬 추측이 아니라 관찰된 바이트에 근거한 분석입니다.
Reverify는 MIT 라이선스로 제공되며 PyPI에서 이용할 수 있습니다.
