Extensión de Descompilación de Windbg vía LLM


Este proyecto es un esqueleto de extensión de WinDbg para Windows x64 que resuelve una función por nombre o dirección, reconstruye una vista de flujo de control determinista, y solicita directamente a un LLM desde la extensión para producir pseudocódigo.
Diseño
src/extension: DLL de extensión de WinDbg y comando !decomp.
src/shared: código JSON, analizador, protocolo y verificador compartido por la extensión.
scripts: ayudantes de compilación y copia de proveedor.
third_party/dbgeng: copia opcional de dbgeng.h y dbgeng.lib incluida.
third_party/zydis: árbol fuente estable de Zydis incluido, usado por defecto cuando está presente.
Alcance Actual
- Suposiciones solo x64
- Análisis de memoria en vivo a través de DbgEng
- Desensamblado estructurado basado en Zydis para recuperación estable de mnemónicos/operandos
- Recuperación de rango de función por región de símbolo, desenrollado y heurística
- Recuperación estilo SSA-lite para argumentos de registro entrantes, locales en pila, candidatos de fusión y condiciones de rama normalizadas
- Hechos de valor IR de bajo nivel con sugerencias de uso-def, expresiones canónicas de copia/constante y marcadores de definición muerta
- Hechos de estado de valor a nivel de bloque para definiciones alcanzantes convergidas de entrada/salida en registros y locales de pila
- Hechos de región de flujo de control respaldados por dominadores para bucles naturales, candidatos if/else, candidatos switch, metadatos de inducción de bucle y metadatos de rango/predeterminado de switch
- Hechos ABI x64 para slots de sombra/hogar, deltas de puntero de pila, reconocimiento de prólogo/epílogo, llamadas sin retorno, llamadas de cola, thunks, candidatos de envoltorio de importación y argumentos de llamada recuperados en registro/pila
- Recuperación de argumentos x64 de Microsoft consciente de SIMD/FP para
xmm0 a xmm3, con protecciones de idioma vector cero para evitar argumentos entrantes falsos
- Sugerencias de recuperación de tipo para valores tipo puntero, locales de pila, desplazamientos de campo, arrays de índice escalado, comparaciones tipo enum, pruebas de bitflag y candidatos a vtable
- Hechos de modismo y patrón de biblioteca para ayudantes de memoria/cadena, cookies de seguridad, sondas de pila, asignadores, inicializadores de agregados y cargas globales/de importación RIP-relativas
- Hechos de destino de llamada para llamadas directas, llamadas indirectas por registro/memoria, candidatos de llamada virtual/desplazamiento vtable, tipo de retorno, modelo de parámetros, efectos secundarios, efectos de memoria, sugerencias de propiedad y confianza
- Hechos de ofuscación estilo OLLVM para despachadores de aplanamiento de flujo de control, aristas semánticas recuperadas, aristas muertas de predicado opaco y modismos de sustitución de instrucciones escalares
- Hechos de preparación para desofuscación más control
/deobf:on|off sobre si los hechos de ofuscación recuperados pueden guiar la reescritura pseudo-C
- Hechos de grafo de evidencia que vinculan hechos de analizador de alta señal, PDB y comportamiento observado de vuelta a la base de instrucción/bloque
- Indicación de refinamiento primero con un esqueleto de pseudocódigo generado por el analizador, resúmenes conscientes del grafo para regiones CFG, condiciones y bloques importantes, selección de hechos de alta señal clasificados y muestreo disperso para conjuntos grandes de hechos
- Enlaces DML de WinDbg para navegación a entrada/bloque básico/evidencia/destino de llamada cuando el callback de salida soporta DML
- Modos de resultado separados para resumen, explicación de evidencia, solo hechos, prompt de depuración, JSON y estilo de modelo de datos
- Interruptores de corrección de usuario para sugerencias de no retorno, tipo, campo y renombrado
- Hechos de política de análisis conscientes de sesión para sesiones en vivo, volcado, kernel y similares a TTD
- Hechos de comportamiento observado del contexto actual del depurador, incluyendo muestras de argumentos de registro, puntos calientes de memoria y sugerencias de consulta TTD cuando estén disponibles
- Clasificación de cadena/global/IAT RIP-relativa y sugerencias de firma de destino de llamada para el prompting del LLM
- Prototipo consciente de PDB cargado, parámetro/local con ámbito, campo, enumeración y sugerencias de línea fuente para el prompting del LLM
- Llamadas LLM directas en proceso desde la extensión
- Adaptador HTTP compatible con OpenAI o fallback mock determinista
- Pase de verificador sobre la salida del LLM
Uso en WinDbg
Cargue la extensión desde la salida de compilación, luego ejecute !decomp contra un símbolo o una dirección:```text
.load C:\path\to\decomp.dll
!decomp /doctor
!decomp module!FunctionName
!decomp 0x7ffb`12345678
Usa `/doctor` cuando la configuración parezca incorrecta o antes de habilitar un proveedor de LLM:```text
!decomp /doctor
!decomp /doctor:net
/doctor no requiere un objetivo y no llama al proveedor. Reporta la ruta/estado de configuración, resumen del proveedor/modelo/punto final, presencia de autenticación sin secretos, configuración de tiempo de espera/token/fragmentación, soporte DML, clase/cualificador de sesión, tipo de procesador y advertencias de PDB.
/doctor:net se acepta como una solicitud explícita de verificación de red, pero actualmente informa que el ping del proveedor se omite. La extensión no realiza un sondeo de red desde el modo doctor.
- Los valores secretos como claves API, tokens de portador, tokens de actualización y cadenas de consulta de URL no se imprimen.
Los objetivos pueden ser símbolos públicos/privados, nombres de funciones exportadas o direcciones. Si el objetivo se resuelve a una dirección dentro de una función, la extensión intenta recuperar el rango de la función contenedora a partir de símbolos, datos de desenredo y heurísticas de flujo de control. Coloque comillas alrededor de los objetivos que contengan espacios:```text
!decomp "my module!Function With Spaces"
La ruta de comando normal realiza análisis local, construye hechos del analizador, opcionalmente llama al endpoint LLM configurado, verifica la respuesta contra la evidencia recuperada, e imprime pseudo-C más confianza, advertencias y notas de incertidumbre:```text
!decomp ntdll!RtlAllocateHeap
!decomp kernel32!Sleep
!decomp game.exe!CheckIntegrity
Normal, brief, y explain output incluye un flujo de progreso compacto incluso sin /verbose. Las ejecuciones largas de LLM muestran finalización del análisis local, progreso de fragmentos, avisos de reintento, inicio de fusión, verificación y la sugerencia de cancelación con Ctrl+Break. Los modos legibles por máquina como /view:json, /view:facts, /view:prompt, y /view:data suprimen las líneas de progreso y los enlaces auxiliares DML para que los scripts reciban solo la carga útil solicitada.