실시간 함수를 디스어셈블하고 LLM을 사용하여 검증된 의사 코드를 생성하는 WinDbg x64 확장 프로그램.


이 프로젝트는 함수를 이름이나 주소로 확인하고, 결정론적 제어 흐름 뷰를 재구성하며, 확장에서 직접 LLM에 물어 의사 코드를 생성하는 Windows x64 WinDbg 확장 스켈레톤입니다.
src/extension: WinDbg 확장 DLL 및 !decomp 명령.src/shared: 확장에서 공유하는 JSON, 분석기, 프로토콜 및 검증기 코드.scripts: 빌드 및 벤더 복사 도우미.third_party/dbgeng: 선택적 벤더된 dbgeng.h 및 dbgeng.lib 복사본.third_party/zydis: 기본적으로 제공되는 벤더된 안정적인 Zydis 소스 트리.xmm0부터 xmm3까지의 SIMD/FP 인식 Microsoft x64 인수 복구/deobf:on|off 제어빌드 출력에서 확장을 로드한 다음, 심볼 또는 주소에 대해 !decomp를 실행합니다:```text
.load C:\path\to\decomp.dll
!decomp /doctor
!decomp module!FunctionName
!decomp 0x7ffb`12345678
설정이 잘못된 것 같거나 LLM 제공자를 활성화하기 전에 `/doctor`를 사용하세요:```text
!decomp /doctor
!decomp /doctor:net
/doctor는 대상(target)이 필요하지 않으며 공급자(provider)를 호출하지 않습니다. 설정 경로/로드 상태, 공급자/모델/엔드포인트 요약, 비밀(secret) 없이 인증(auth) 존재 여부, 타임아웃/토큰/청크(chunking) 설정, DML 지원, 세션 클래스/한정자(qualifier), 프로세서 유형 및 PDB 주의사항을 보고합니다./doctor:net은 명시적인 네트워크 확인 요청으로 허용되지만, 현재 공급자 핑(ping)이 생략되었다고 보고합니다. 확장 프로그램은 닥터 모드에서 네트워크 프로브(probe)를 수행하지 않습니다.대상(target)은 공개/비공개 심볼(symbol), 내보낸 함수 이름 또는 주소(address)가 될 수 있습니다. 대상이 함수 내부의 주소로 확인되는 경우, 확장 프로그램은 심볼, 되감기(unwind) 데이터 및 제어 흐름 휴리스틱(heuristic)에서 포함하는 함수 범위를 복구하려고 시도합니다. 공백이 포함된 대상은 따옴표로 묶습니다:```text !decomp "my module!Function With Spaces"
일반적인 명령 경로는 로컬 분석을 수행하고, 분석기 사실을 구축하며, 선택적으로 구성된 LLM 엔드포인트를 호출하고, 복구된 증거에 대해 응답을 검증한 후, 의사 C 코드와 신뢰도, 경고 및 불확실성 메모를 출력합니다:```text
!decomp ntdll!RtlAllocateHeap
!decomp kernel32!Sleep
!decomp game.exe!CheckIntegrity
Normal, brief, explain 출력에는 /verbose 없이도 간결한 진행 상황 스트림이 포함됩니다. 긴 LLM 실행에서는 로컬 분석 완료, 청크 진행 상황, 재시도 알림, 병합 시작, 검증 및 Ctrl+Break 취소 힌트가 표시됩니다. /view:json, /view:facts, /view:prompt, /view:data와 같은 기계 판독 가능 모드는 진행 줄과 DML 도우미 링크를 생략하여 스크립트가 요청된 페이로드만 수신하도록 합니다.
/view:*를 사용하여 보고 싶은 내용을 선택하세요. 이렇게 하면 명령어 표면이 작게 유지됩니다. 하나의 옵션으로 모든 출력 모드를 제어할 수 있습니다.```text
!decomp /view:brief module!HotPath
!decomp /view:explain module!BranchyFunction
!decomp /view:json module!FunctionName
!decomp /view:facts module!FunctionName
!decomp /view:prompt module!FunctionName
!decomp /view:data module!FunctionName
!decomp /view:analyzer module!FunctionName
!decomp /view:plan module!FunctionName
- `brief`는 대상, 신뢰도, 요약, 그리고 첫 번째 불확실성 또는 검증 경고를 출력합니다.
- `explain`은 증거, 제어 흐름, 타입 힌트, 관찰된 동작, 호출 대상 섹션을 추가합니다.
- `json`은 기계가 읽을 수 있는 요청 및 응답 JSON을 출력합니다.
- `facts`는 분석기 사실만 출력하고 LLM 경로를 비활성화합니다.
- `prompt`는 정확한 시스템 프롬프트, 사용자 프롬프트 및 프롬프트 사실을 출력합니다. LLM 호출을 비활성화합니다.
- `data`는 WinDbg JavaScript/NatVis 스타일 자동화에 사용하기 위한 안정적인 JSON 스냅샷을 출력합니다.
- `analyzer`는 LLM을 호출하지 않고 결정론적 분석기 전용 의사 코드 경로를 렌더링합니다.
- `plan`은 LLM을 호출하거나 결과 캐시를 업데이트하지 않고 로컬 분석을 수행하고 사전 점검 계획을 출력합니다. 대상/모듈/범위 개수, PDB 가용성, 세션 정책, 예상 청킹, 프롬프트 크기 관련 개수 및 실용적 권장 사항을 포함합니다.
명령이 멈춘 것처럼 보이거나 전체 진행 스트림을 보려면 `/verbose`를 사용하세요.```text
!decomp /verbose module!SlowFunction
!decomp /verbose /view:json module!SlowFunction
/verbose는 대상 확인, 함수 범위 복구, 바이트 읽기, 디스어셈블리, 분석기 사실 구성, PDB/세션 강화, 의사 코드 토큰화, 검증기 결과와 같은 로컬 단계를 출력합니다./verbose는 프롬프트 크기, 요청 토큰 예산, HTTP 연결/전송/수신 단계, 응답 청크 크기, 완료 이유, 추출된 모델 JSON 미리보기, 재시도 횟수 및 검증기 피드백 재시도 결정을 출력합니다./verbose는 간결한 진행 스트림을 전체 추적으로 대체합니다. 간결한 진행 줄로 시간이 어디에 소비되는지 진단하기에 충분하지 않을 때 사용하십시오.!decomp 명령 중 WinDbg에서 Ctrl+Break를 눌러 취소를 요청하십시오. 확장 프로그램은 로컬 분석 단계 사이 및 LLM 작업자를 기다리는 동안 인터럽트를 확인한 다음 활성 동기 HTTP I/O에 중지를 요청합니다./brief, /explain, /json, /facts-only, /debug-prompt, /data-model, /dx, /no-llm과 같은 레거시 별칭은 여전히 이전 스크립트에서 작동하지만, 새 예제에서는 /view:*를 사용합니다.
Window viewer:```text !decomp /view:window module!FunctionName !decomp /view:window /view:explain module!FunctionName
- `/view:window`는 대상에 대해 일반적인 `!decomp` 결과 경로를 실행하고, 전체 렌더링된 결과를 별도의 뷰어에서 엽니다.
- 뷰어는 콘솔 경로와 동일한 응답 렌더러를 사용한 후, 디버거 창이 발견될 경우 그 창이 소유하는 네이티브 Win32 모덜리스 도구 창을 엽니다.
- 디버거 출력은 네이티브 뷰어 창 핸들을 보고합니다. 뷰어 창을 생성할 수 없으면 명령이 경고를 출력하고 일반 콘솔 결과로 대체됩니다.
- DML 전용 링크는 뷰어에서 명령 문자열과 함께 텍스트 레이블로 렌더링됩니다. RichEdit을 사용할 수 있는 경우 창은 섹션 제목, 메타데이터 스타일링 및 의사 코드 강조를 포함한 GitHub 스타일의 RTF 레이아웃을 사용하며, 그렇지 않으면 일반 텍스트로 대체됩니다.
- 현재 세션에 이전에 캐시된 결과가 있는 경우 뷰어는 왼쪽에 기록 목록을 표시하여 분석을 다시 실행하지 않고도 현재 출력과 이전 디컴파일 결과 간에 전환할 수 있습니다.
- `/view:json`, `/view:facts`, `/view:prompt`, `/view:data`는 기계가 읽을 수 있는 콘솔 출력으로 유지되며 뷰어로 리디렉션되지 않습니다.```text
!decomp /limit:deep module!LargeFunction
!decomp /limit:huge module!VeryLargeFunction
!decomp /limit:12000 module!VeryLargeFunction
!decomp /timeout:120000 module!SlowFunction
/limit:deep 명령어 상한을 8192로 올립니다./limit:huge 명령어 상한을 16384로 올립니다./limit:N 명령어 상한을 명시적으로 설정합니다./timeout:MS 이 호출에 대한 요청 시간 제한을 재정의합니다.decomp.llm.json에 의해 제어됩니다. 명령줄 명령어 상한은 확장 프로그램이 프롬프트 전에 복구를 시도하는 로컬 코드의 양을 제어합니다./deep, /huge, /maxinsn:N은 계속 지원됩니다.난독화 인식 디컴파일:```text !decomp /deobf:on module!FlattenedFunction !decomp /deobf:off module!FlattenedFunction !decomp /view:facts /deobf:off module!FlattenedFunction
- `/deobf:on`이 기본값입니다. 분석기는 여전히 원시 사실을 출력하지만, 높은 신뢰도의 OLLVM 스타일 디스패처 복구, 불투명한 데드 엣지 증명, 대체 관용구, 의미론적 CFG 오버레이가 프롬프트 사실, 병합 정책, 검증기 충돌 정책, 구조화된 의사 C 복구를 안내할 수 있습니다.
- `/deobf:off`는 `obfuscation`, `semantic_control_flow`, `deobfuscation_readiness` 사실을 계속 표시하지만, 재작성 안전 동작을 비활성화하고, 제어 흐름 구조화를 원시 CFG에 유지하며, 프롬프트/병합/검증기 경로가 원시 난독화된 형태를 보존하도록 지시합니다.
- 디스패처, 가짜 분기(bogus branch) 또는 대체 표면을 확장 프로그램에 요청하지 않고 직접 검사하려면 `/deobf:off`를 사용하세요.
- `/deobfuscation:on|off`는 더 긴 별칭으로 허용됩니다.