¿Cómo usar WinDbg para analizar el volcado de locking para la aplicación VC ++?

¿Cómo uso WinDbg para analizar un archivo de volcado?

Aquí hay algunos pasos generales que lo pondrán en su camino:

En primer lugar, debe cambiar la configuración de su comstackdor para que cree archivos PDB, incluso para comstackciones de versiones. Las versiones posteriores del comstackdor de Visual C ++ hacen esto de forma predeterminada, pero en muchas versiones de Visual C ++ debes hacerlo tú mismo. Cree archivos de bases de datos de progtwigs y luego mantenga un archivo de esos archivos junto con cada comstackción de su aplicación. Es fundamental que cada comstackción de sus aplicaciones tenga su propio conjunto de PDB. No puede simplemente reutilizar los mismos que creó con comstackción 10 para examinar los volcados generados por comstackción 15, por ejemplo. Durante la vida de su proyecto, terminará con una tonelada de PDB, así que prepárese para eso.

Luego, debe ser capaz de identificar la versión exacta de su aplicación que generó el archivo de volcado. Si está creando sus propias MiniDumps (llamando a MiniDumpWriteDump (), por ejemplo), probablemente la forma más sencilla de hacerlo es simplemente hacer que parte del nombre de archivo de la MiniDump sea el número de versión completo de su aplicación. Tendrá que tener un esquema de numeración de versiones razonable para que esto funcione. En mi tienda, incrementamos el número de comstackción en todas las twigs en una cada vez que el auto constructor crea una comstackción.

Ahora que ha recibido el archivo de volcado del cliente, conoce la versión precisa de la aplicación que creó el volcado y ha encontrado los archivos PDB para esta comstackción.

Ahora necesita revisar el historial del control de origen y encontrar el código fuente para esta versión exacta del software. La mejor manera de hacerlo es aplicar ‘tags’ a sus sucursales cada vez que realice una comstackción. Establezca el valor de la etiqueta en el número de versión exacto, y se vuelve fácil de encontrar en la historia.

Ya está casi listo para iniciar WinDbg / Visual C ++:

  1. Obtenga el árbol de fonts completo para esa versión de su aplicación. Colóquelo en un lugar separado en su disco duro, digamos c:\app_build_1.0.100 para la versión 1.0 de la aplicación build # 100.
  2. Obtenga los binarios para esa versión exacta de su aplicación y colóquelos en algún lugar de su disco duro. Puede ser más fácil simplemente instalar esa versión de su aplicación para obtener los binarios.
  3. Coloque los archivos PDB en la misma ubicación que los binarios en el paso 2.

Ahora tiene dos opciones para ver el archivo de volcado. Puedes usar Visual Studio o WinDbg. Usar Visual Studio es más fácil, pero WinDbg es mucho más poderoso. La mayoría de las veces, la funcionalidad en Visual Studio será suficiente.

Para usar Visual Studio, todo lo que tienes que hacer es abrir el archivo de volcado como si fuera un proyecto. Una vez abierto, “ejecuta” el archivo de volcado ( F5 por defecto) y si todas las rutas están configuradas correctamente, le llevará directamente al código que se colgó, le dará una stack de llamadas, etc.

Para usar WinDbg, debes pasar por un par de aros:

  1. Comience WinDbg
  2. Abra el archivo de volcado. ( Ctrl + D por defecto)
  3. Indique a WinDbg que obtenga los archivos de símbolos de MicroSoft correctos. Escriba .symfix . Esto puede tomar unos momentos, ya que sacará un montón de cosas de Internet.
  4. Indique a WinDbg dónde están los símbolos (archivos PDB). Escriba .sympath+ c:\pdblocation , sustituyendo siempre que coloque los archivos PDB por la ruta. Asegúrate de que obtienes el signo más allí sin espacio en blanco entre .sympath y el signo + contrario, te equivocarás con el paso 3.
  5. Dile a WinDbg dónde está el código fuente. Escriba .srcpath c:\app_build_1.0.100 sustituyendo la ruta donde obtuvo el código del control de origen para esta versión del software.
  6. Dile a WinDbg que analice el archivo de volcado. Tipo !analyze -v

Después de unos momentos, si todo está configurado correctamente, WinDbg lo llevará directamente a la ubicación de su locking. En este punto, tiene un millón de opciones para profundizar en el espacio de memoria de su aplicación, el estado de las secciones críticas, ventanas, etc. Pero eso está más allá del scope de esta publicación.

¡Buena suerte!

(vea las secciones “Vaciado” a continuación)

Tutoriales básicos y demostraciones del uso de WinDbg

  • Instalación y configuración de WinDbg (Windows Debug Tools)
  • Mike Taulty – Una palabra para WinDBG
  • Tutoriales de WinDbg
  • Depuradores de Windows: Parte 1: Un tutorial de WinDbg

Diferentes formas de “Comenzar” / Adjuntar WinDBG

  • Comience a depurar con Windbg (incluye cómo depurar un .msi)
  • Cómo depurar un servicio de Windows
  • Configurar la depuración de Windows

Espacios de trabajo

Comprender cómo funcionan los espacios de trabajo …

  • Prepara tu depurador: Creando un espacio de trabajo personalizado para la depuración windbg
  • Descubriendo cómo funcionan los espacios de trabajo en WinDbg

Cmdtree

Un “cmdtree” le permite definir un “menú” de comandos del depurador para acceder fácilmente a los comandos que se utilizan con frecuencia sin tener que recordar los nombres de los comandos terminados.

No tiene que poner todas las definiciones de comando en el mismo archivo de texto cmdtree … puede mantenerlas separadas y cargar varias si lo desea (luego obtienen su propia ventana).

  • Increíble ayudante .cmdtree
  • ¿Cómo puedo hacer una base de ventana cmdtree al inicio en WinDBG
  • Facilitando la depuración de los volcados .net en windbg usando .cmdtree
  • Microshaoft Cmdtree
  • Comandos especiales de ejecución de comandos desde una interfaz de usuario personalizada con .cmdtree

Guion de inicio

Puede usar la opción -c en la línea de comando para ejecutar automáticamente un script WinDBG cuando inicie WinDBG.

Da la oportunidad de activar el modo DML (Lenguaje de marcado del depurador), cargar extensiones particulares, establecer puntos de interrupción de excepción .NET, establecer indicadores del kernel (por ejemplo, al depurar kernel, es posible que necesites cambiar la máscara DbgPrint para ver la información de rastreo … ed nt ! Kd_DEFAULT_Mask 0xffffffff), carga cmdtrees, etc.

Un script de ejemplo:

 $$ Include a directory to search for extensions $$ (point to a source controlled or UNC common directory so that all developers get access) .extpath+"c:\svn\DevTools\WinDBG\Extensions" $$ When debugging a driver written with the Windows Driver Framework/KMDF $$ load this extension that comes from the WinDDK. !load C:\WinDDK\7600.16385.1\bin\x86\wdfkd.dll !wdftmffile C:\WinDDK\7600.16385.1\tools\tracing\i386\wdf01009.tmf $$ load some extensions .load msec.dll .load byakugan.dll .load odbgext.dll .load sosex .load psscor4 $$ Make commands that support DML (Debugger Markup Language) use it .prefer_dml 1 .dml_start $$ Show NTSTATUS codes in hex by default .enable_long_status 1 $$ Set default extension .setdll psscor4 $$ Show all loaded extensions .chain /D $$ Load some command trees .cmdtree c:\svn\DevTools\WinDBG\cmdtree\cmdtree1.txt .cmdtree c:\svn\DevTools\WinDBG\cmdtree\cmdtree2.txt $$ Show some help for the extensions !wdfkd.help !psscor4.help .help /D 

Command Cheat Sheets

  • Crash Dump Analysis Poster v3.0
  • SOS Cheat Sheet (.NET 2.0 / 3.0 / 3.5)
  • Trucos de WinDbg (Art of Dev)
  • WinDbg Kernel-Mode Extension Commands Tarjetas de vocabulario

Extensiones

Las “extensiones” le permiten ampliar el rango de comandos / características compatibles con WinDBG.

  • BigLasagne (bldbgexts y blwdbgue)
    – resaltado de syntax de ensamblaje y una herramienta de mapeo de controlador)
  • Lector de números BigLib
  • Byakugan
    – detectar métodos antidebugging, visualización / emulación del montón de vista, seguimiento de búferes en la memoria
  • Call Flow Analyzer + KnExt
  • CmdHist
    – registra cada comando que ejecutó en su sesión de depuración para que pueda volver a ejecutar fácilmente
  • Core Analyzer
    – Verifica las estructuras de montón para detectar corrupción, detecta objetos compartidos por hilos, etc.
  • Extensión dom WinDBG
    – (! stlpvector,! idt,! unhex,! grep, etc.)
  • Dumppe
    – vuelca el archivo PE de la memoria
  • Image Viewer Extension (Vladimir Vukićević)
  • Herramienta de depuración Intel UEFI Development Kit
    – depurar firmware UEFI
  • fuga
    – Rastreador de manejo GDI / USER para ayudar en la detección de fugas
  • Mona (requiere PyKD)
    – conjunto de comandos para ayudar en el análisis avanzado / encontrar exploits
  • MSEC
    – proporciona análisis automatizado de lockings y evaluación de riesgos de seguridad
  • Narly
    – enumera información sobre módulos cargados, como si se utiliza SafeSEH, ASLR, DEP, / GS (controles de seguridad del búfer)
  • nexto (Rodney Viana)
    – (! wservice – lista objetos de servicio WCF,! wconfig – muestra líneas .config,! whttp – lista HttpContexts,! wselect /! wfrom – soporta consultas tipo SQL en matrices)
  • ODbgExt
    – abrir extensiones de depurador
  • OllyMigrate
    – pasar el depurador a otro depurador sin reiniciar
  • Psscor2
    – un superconjunto de SOS para ayudar a depurar el código administrado .NET 2.0
  • Psscor4
    – un superconjunto de SOS para ayudar a depurar el código administrado .NET 4
  • PyDBGExt
    – permite el uso de scripts Python
  • PyKD
    – permite que Python se use para crear WinDBG
  • sdbgext (Nynaeve)
    – (! valloc,! vallocrwx,! heapalloc,! heapfree,! remotecall,! remotecall64,! loaddll,! unloaddll,! close,! killthread,! adjpriv,! ret)
  • SieExtPub
    -legacy extension … ahora integrado en WinDBG en ext.dll
  • SOSEX
    – Más comandos para ayudar a depurar código NET 2.0 o 4.0 administrado
  • SPT / SDBGExt2 (Steve Niemitz)
    – (! DumpHttpContext,! DumpASPNetRequests,! DumpSqlConnectionPools,! DumpThreadPool, etc.)
  • Uniqstack
    – fuente a una extensión de depurador (necesita una cuenta en línea OSR para acceder a ella)
  • Visco
    – gráfico de cobertura de código
  • Wait Chain Traversal / wct.dll (Extensiones de depuración de Codeplex
    – mostrar cadenas de espera de subprocesos de aplicación (ayuda a encontrar interlockings )
  • windbgshark
    – integra el analizador de protocolo Wireshark para habilitar la manipulación y el análisis del tráfico de VM
  • Extensiones de WinDBG (Sasha Goldstein)
    – Tracer, WCT, heap_stat, bkb, traverse_map, traverse_vector)
  • Punto destacado de WinDBG (ColorWindbg.dll) [Usar el Traductor de Google para traducir el enlace]
    – resaltado de syntax asm

Escribe tu propia extensión

  • Herramientas del oficio: Parte IV – Desarrollar archivos DLL de extensión WinDbg
  • Fundamentos de las extensiones del depurador: esfuerzo a corto plazo, ganancia a largo plazo

Usando WinDBG para depurar código administrado

  • Rompiendo con una excepción
  • Rompiendo con la excepción CLR específica
  • Depuración del código fuente de .Net Framework dentro de Windbg
  • Depuración de excepciones en código administrado utilizando Windbg
  • Depuración del código administrado utilizando WinDbg y SOS.dll
  • Depuración con WinDbg. Bloqueos en aplicaciones.
  • GESTIONADO ADMINISTRADO con WINDBG. Introducción e índice
  • Estableciendo puntos de interrupción .NET en Windbg para aplicaciones que se bloquean al inicio

Scripting (C #, PS, Python, WinDBG)

  • KDAR (Kernel Debugger Anti Rootkit)
    – una colección de scripts de WinDBG
  • Sysnative BSOD Scripts / Aplicaciones de procesamiento
  • Biblioteca de secuencias de comandos WinDBG
    – una colección de scripts de WinDBG
  • Scripting MDbg y DbgHostLib
    – permite que el código administrado script el depurador gestionado (MDBG) y el DbgEng
  • ExtCS
    – permite el control de WinDBG a través de scripts de C #
  • PowerDBG
    – permite el control de WinDBG a través de scripts de Powershell
  • Pykd
    – permite el control de WinDBG a través de scripts de Python
  • windbglib
    – Biblioteca de contenedor de Python alrededor de la extensión pykd para WinDBG, imitando Immlib (para que pueda usar scripts escritos originalmente para Immunity Debugger)

Depuradores / Herramientas que usan la API dbgeng.dll / Herramientas WinDBG

  • Un depurador de modo de usuario basado en Dbgeng simple
  • Acorns.Debugging NET Deadlock Detector (utiliza cdb.exe) ( descargar )
  • Depurador gestionado CLR (MDBG)
  • DbgHost – Cómo controlar un motor de depuración
  • Debug Diagnostic Tool v1.2 (DebugDiag), Ver 2.0 + DebugDiag Blog
  • Dynamorio : herramienta de instrumentación binaria dinámica que puede interactuar con WinDBG
  • IDA + plugin WinDBG
  • GUI WinDBG
  • LeakShell (encontrar fugas administradas)
  • mdbglib – API administrada de depuración
  • PyDbgEng
    – envoltorio de python para el motor de depuración de Windows
  • SOSNET : un shell de WinDBG / shell alternativo que se concentra en usar la extensión SOS y admite la creación de scripts de C #
  • Tenedor SOSNET O2 de SOSNET que usa Rosyln para el motor de scripting C # REPL (read-eval-print-loop)
  • VDB / Vivisect (kenshoto): proporciona una API de depuración multiplataforma en capas en WinDBG
  • WinAppDbg + Heappie-WinAppDbg
  • Escribir un depurador básico de Windows

Diferentes formas de generar archivos de volcado de choque para el análisis post-mortem

  • DebugDiag 2.0
  • Dump Cheat Sheet
    – incluye cómo generar volcado desde Hyper-V, VMWare ESX y VM de XenServer.
  • Citrix SystemDump
  • Combinación de teclas de teclado
  • MiniDumpWriteDump
    – (a través de la llamada a la API WIN32 dentro de su aplicación). (Ejemplo para aplicaciones C #)
  • Interruptor NMI , o (aquí)
    (función basada en hardware para generar un NMI … que generalmente se encuentra en servidores de gama alta, por ejemplo HP o puede obtener una tarjeta PCI adicional “Universal PCI Dump Switch” ). Fondo de tecnología de Microsoft NMI.
  • Procdump
  • Sistema | Configuración avanzada del sistema | Inicio y recuperación
    ( información de registro ),
    ( cómo configurar un volcado de memoria completo)
    ( cómo habilitar el volcado completo de memoria ),
    ( cómo habilitar Complete Memory Dump en Windows 7 cuando la PC tiene mucha memoria … normalmente no disponible cuando hay más de 2 GB de memoria )
  • Administrador de tareas “Crear archivo de volcado”
  • UserDump , instrucciones (herramienta muy antigua)
  • UserModeProcessDumper , instrucciones
  • Visual Studio “Guardar volcado como …”
  • WER (informe de errores de Windows … volcados locales)
  • WinDBG

Herramientas de análisis de volcado

  • BlueScreenView : busca los archivos .dmp del minivolcado guardados por Windows después de un BSOD y extrae información sobre lo que causó el locking.
  • Debug.Analyzer (puede analizar los archivos de volcado y los complementos se pueden escribir en .NET)
  • SAD – Simple After Dump (analizador post mortem)
  • Volatilidad : marco para analizar la “memoria” registrada en los archivos de volcado ( hoja de referencia )

Herramientas relacionadas con volcado

  • Citrix dumpcheck: comprueba la coherencia del archivo de volcado (parece que se ha abandonado el enlace + enlace )
  • dumpchk (parte de Debugging Tools) – verifica la consistencia de un archivo de volcado
  • MoonSols Windows Memory Toolkit (anteriormente windd ) – convierte varios archivos de volcado de memoria bruta en archivos dmp compatibles con WinDBG
  • vm2dmp – Conversor de estado a memoria de Microsoft VM de VM Hyper-V
  • vmss2core : convierte el archivo de instantánea de VMWare en un archivo de volcado de núcleo ( descargar ), ( instrucciones )

Kernel Debugging Virtual Machines

  • VMKD – Extensiones KD de máquina virtual
  • VirtualKD – (soporte del depurador del kernel para SO alojado en VMWare / VirtualBox)

Videos

  • .NET Cracking 101 # 2 – Conceptos básicos de WinDbg
  • Depuración de .NET para el entorno de producción (Channel9)
  • dotnetConf – Depuración avanzada con WinDbg y SOS
  • David Truxall “Depuración con WinDBG”
  • Mike Taulty Depuración de memory leaks
  • Sesión de oredev 2009: Depuración de aplicaciones .NET con WinDbg
  • Pluralsight Advanced Windows Debugging
    (más varios otros en Pluralsight)
  • Tess Ferrandez WinDBG (Channel9)

Blogs

Algunos blogs (mezcla de depuración de código nativo y administrado).

  • Depuración avanzada de .NET
  • Toda su base es de nosotros (Sasha Goldshtein)
  • Analizar-v
  • Depuración de ASP.NET
  • Cyberiafreak (enhebrado y avanzado de Windows Prog y depuración)
  • Debug Analyzer.NET
  • Depurar y más allá
  • Revista de expertos en depuración en línea
  • Debugging Toolbox (scripts de Windbg, herramientas y herramientas de solución de problemas y solución de problemas para ayudarlo a aislar problemas de software).
  • Descifrar mi mundo
  • WebLog de greggm
  • Las notas de progtwigción de Windows de Junfeng Zhang
  • Las cositas de Kristoffer
  • El blog de Mark Russinovich
  • Mike Stalls .NET Debugging Blog
  • El blog de Naveen
  • Nunca dudes de tu depurador (Carlo)
  • Notas de un rincón oscuro
  • Blog de Ntdebugging (equipo de Microsoft Global Escalation Services)
  • Nynaeve. Aventuras en la depuración de Windows e ingeniería inversa
  • Notas del desarrollador de PFE para el campo
  • Equipo de depurador de Visual Studio
  • WinDbg por Volker von Einem

Artículos avanzados y recursos tutoriales

  • Técnicas avanzadas de depuración en WinDbg
  • Depuración de aplicaciones para MS.Net y Windows (diapositivas de Powerpoint)
  • Depuración de contenedores STL con WinDbg
  • Tutoriales de depuración 1-7 (CodeProject-Toby Opferman)
  • Debugging.tv
  • Artículos de desarrollo o WinDBG etiquetados
  • Blog de seguridad del Dr. Fu – Tutoriales de análisis de malware – Enfoque de ingeniería inversa
  • Exploit writing writing tutorial parte 5: cómo los módulos y plugins de depuración pueden acelerar el desarrollo básico de exploits
  • Caza Rootkits
  • Depuración Remota del Kernel del Sistema Operativo Microsoft Windows Server Utilizando la Utilidad del Depurador Dell Windows (DWDU) ( DELL (TM) Windows (R) Debugger Utility 1.1 README )

Depuradores alternativos

  • Bokken – ( Inguma ) (GUI para radare)
  • BugDbg
  • Debug ++ (no publicado aún)
  • Debuggy
  • Descolorido Ring 0 Debugger ( descargar )
  • edb (Linux)
  • FDBG
  • GoBug
  • Hades (depurador Ring 3 con estrategia de detección anti depurador)
  • Hopper (Linux, OSX y Windows) (La depuración de Windows no está implementada actualmente)
  • Hyperdbg
  • Depurador IDA
  • ImmunityDebugger
  • Nanomita
  • Obsidiana (depurador no intrusivo)
  • OllyDBG
  • PEBrowse
  • RaceVB6 (depurador de código P VB6)
  • radare
  • radare2ui (GUI para radare)
  • Depurador Rasta Ring 0 (RR0D)
  • Syser Kernel Debugger
  • TRW 2000 (depurador muy antiguo alrededor de W9x) + archivo plugin dions
  • Depurador VisualDux
  • Wintruder (depurador extensible)
  • WKTVDebugger (un depurador para el código P de Visual Basic) ( descargar )
  • x64_dbg
  • Zeta Debugger

Otros enlaces

  • Biblioteca colaborativa de herramientas RCE
    – gran colección de herramientas de depuración y de nivel de sistema
  • cr4zyserb
    – gran colección de complementos y otras herramientas de depuración
  • Cómo escribir las referencias de un depurador de Windows (Devon Straw)
    – gran colección de enlaces que le proporciona información detallada que necesitaría si quisiera escribir su propio depurador, por ejemplo, formato de archivo PDB, formatos de archivo .DMP, estructura de archivos PE, cómo registrar los rastreos de stack, etc., etc.
  • Tuts4You
    – Unpackers, IDA, OllyDBG, plugins de inmunidad al depurador, etc.

Esta es una pregunta realmente amplia.

  1. El primer paso es cargar el archivo de volcado en una instancia de WinDbg.
  2. Luego, debe asegurarse de tener una configuración de símbolos.
  3. Finalmente, puede ejecutar el comando !analyze -v para realizar un análisis básico. Necesita tener información de símbolos disponible para su código para hacer que los archivos dump valgan la pena.

El sitio web Memory Dump, Software Trace, Debugging, Malware, Victimware y Intelligence Analysis Portal ha sido muy informativo para mí. También disfruté mucho el libro, Advanced Windows Debugging, de Mario Hewardt y Daniel Pravat.

Tess Ferrandez tiene un gran conjunto de tutoriales básicos y laboratorios para comenzar con Windbg. Los recomiendo mucho.