Come utilizzare WinDbg per analizzare il crash dump per l’applicazione VC ++?

Come utilizzo WinDbg per analizzare un file di dump?

    Ecco alcuni passaggi generali che ti porteranno sulla tua strada:

    Innanzitutto, è necessario modificare le impostazioni del compilatore in modo che crei file PDB, anche per le versioni di rilascio. Le versioni successive del compilatore Visual C ++ lo fanno per l’impostazione predefinita, ma in molte versioni di Visual C ++ è necessario farlo da soli. Creare i file del database del programma e quindi conservare un archivio di tali file insieme a ciascuna build dell’applicazione. È fondamentale che ogni build delle tue applicazioni abbia il proprio set di PDB. Non puoi semplicemente riutilizzare gli stessi che hai creato con build 10 per esaminare i dump generati dalla build 15, per esempio. Durante la vita del tuo progetto, finirai con una tonnellata di PDB, quindi preparati a questo.

    Successivamente, è necessario essere in grado di identificare la versione esatta dell’applicazione che ha generato il file di dump. Se stai creando il tuo MiniDump (ad esempio chiamando MiniDumpWriteDump () per esempio), probabilmente il modo più semplice per farlo è semplicemente rendere parte del nome del file del MiniDump il numero di versione completo della tua applicazione. È necessario disporre di uno schema di numerazione della versione ragionevole affinché funzioni. Nel mio negozio, incrementiamo il numero di build su tutti i rami di uno ogni volta che l’autobuilder crea una build.

    Ora che hai ricevuto il file dump dal cliente, conosci la versione precisa dell’applicazione che ha creato il dump e hai trovato i file PDB per questa build.

    Ora è necessario passare attraverso la cronologia del controllo del codice sorgente e trovare il codice sorgente per questa versione esatta del software. Il modo migliore per farlo è applicare ‘etichette’ ai tuoi rami ogni volta che crei una build. Imposta il valore dell’etichetta sul numero esatto della versione e diventa facile da trovare nella cronologia.

    Sei quasi pronto per avviare WinDbg / Visual C ++:

    1. Ottieni l’albero dei sorgenti completo per quella versione della tua applicazione. Mettilo in un posto separato sul tuo disco fisso, ad esempio c:\app_build_1.0.100 per la versione 1.0 dell’applicazione build # 100.
    2. Ottieni i binari per quella versione esatta della tua applicazione e inseriscili da qualche parte sul tuo disco fisso. Potrebbe essere più semplice installare semplicemente la versione dell’applicazione per ottenere i binari.
    3. Inserire i file PDB nella stessa posizione dei file binari nel passaggio 2.

    Ora hai due opzioni per visualizzare il file di dump. È ansible utilizzare Visual Studio o WinDbg. L’utilizzo di Visual Studio è più semplice, ma WinDbg è molto più potente. La maggior parte delle volte la funzionalità di Visual Studio è sufficiente.

    Per utilizzare Visual Studio, tutto ciò che devi fare è aprire il file di dump come se fosse un progetto. Una volta aperto, “esegui” il file di dump ( F5 di default) e se tutti i percorsi sono impostati correttamente ti porteranno direttamente al codice che si è bloccato, ti danno uno stack di chiamate, ecc.

    Per usare WinDbg, devi saltare un paio di cerchi:

    1. Avvia WinDbg
    2. Apri il file di dettagli. ( Ctrl + D per impostazione predefinita)
    3. Dire a WinDbg di ottenere i file di simboli MicroSoft corretti. Digitare .symfix . Ciò potrebbe richiedere alcuni istanti in quanto estrae un sacco di cose da Internet.
    4. Dì a WinDbg dove si trovano i simboli (file PDB). Digitare .sympath+ c:\pdblocation , sostituendo ovunque si inseriscano i file PDB per il percorso. Assicurati di avere il segno più in là senza spazi bianchi tra .sympath e il segno + altrimenti .sympath il passaggio 3.
    5. Dì a WinDbg dove si trova il codice sorgente. Digitare .srcpath c:\app_build_1.0.100 sostituendo il percorso in cui è stato ottenuto il codice dal controllo sorgente per questa versione del software.
    6. Dire a WinDbg di analizzare il file di dump. Scrivi !analyze -v

    Dopo pochi istanti, se tutto è configurato correttamente, WinDbg ti porterà direttamente nel punto in cui si è verificato il crash. A questo punto hai un milione di opzioni per scavare in profondità nello spazio di memoria della tua applicazione, lo stato delle sezioni critiche, le windows, ecc. Ma questo è ben oltre lo scopo di questo post.

    In bocca al lupo!

    (vedi sotto le sezioni “Dump”)

    Esercitazioni di base e dimostrazioni sull’uso di WinDbg

    • Installazione e configurazione di WinDbg (strumenti di debug di Windows)
    • Mike Taulty: una parola per WinDBG
    • Tutorial su WinDbg
    • Debugger di Windows: Parte 1: un tutorial di WinDbg

    Diversi modi per “Start” / Albind WinDBG

    • Avvia debugging con Windbg (include come eseguire il debug di un .msi)
    • Come eseguire il debug di un servizio di Windows
    • Impostazione del debug di Windows

    Aree di lavoro

    Capire come funzionano le aree di lavoro …

    • Pimp up your debugger: creazione di uno spazio di lavoro personalizzato per il debug di windbg
    • Scoprire come funzionano le aree di lavoro in WinDbg

    Cmdtree

    Un “cmdtree” consente di definire un “menu” di comandi debugger per un facile accesso ai comandi usati di frequente senza dover ricordare i nomi dei comandi concisi.

    Non devi mettere tutte le definizioni di comando nello stesso file di testo cmdtree …. puoi tenerle separate e caricarne più se lo desideri (poi ottengono la propria finestra).

    • Helper incredibile .cmdtree
    • Come posso creare una finestra di cmdtree all’avvio in WinDBG
    • Semplificando il debug .net dump in windbg usando .cmdtree
    • Microshaoft Cmdtree
    • Comandi di esecuzione comandi speciali da un’interfaccia utente personalizzata con .cmdtree

    Script di avvio

    È ansible utilizzare l’opzione -c sulla riga di comando per eseguire automaticamente uno script WinDBG all’avvio di WinDBG.

    Offre l’opportunità di triggersre la modalità DML (debugger markup language), caricare determinate estensioni, impostare i punti di interruzione delle eccezioni .NET, impostare i flag del kernel (ad esempio quando si esegue il debug del kernel potrebbe essere necessario cambiare la maschera DbgPrint in modo da visualizzare le informazioni di tracciamento …. ed nt ! Kd_DEFAULT_Mask 0xffffffff), caricare cmdtrees, ecc.

    Un esempio di script:

     $$ 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 

    Cheat Sheets di comando

    • Crash Dump Analysis Poster v3.0
    • Cheat Sheet di SOS (.NET 2.0 / 3.0 / 3.5)
    • Cheat sheet di WinDbg (Art of Dev)
    • WinDbg Kernel-Mode estende i comandi Flashcards

    estensioni

    “Estensioni” consente di estendere la gamma di comandi / funzionalità supportate in WinDBG.

    • bigLasagne (bldbgexts e blwdbgue)
      – l’evidenziazione della syntax dell’assembly e uno strumento di mapping dei driver)
    • Lettore di numeri BigLib
    • Byakugan
      – Rileva metodi antidebugging, visualizzazione / emulazione vista heap, traccia i buffer in memoria
    • Call Flow Analyzer + KnExt
    • CmdHist
      – registra ogni comando eseguito nella sessione di debug in modo da poterlo ri-eseguire facilmente
    • Core Analyzer
      – Controllare le strutture dell’heap per la corruzione, rilevare gli oggetti condivisi dai thread, ecc
    • dom WinDBG Extension
      – (! stlpvector,! idt,! unhex,! grep, ecc.)
    • dumppe
      – scarica il file PE dalla memoria
    • Estensione visualizzatore immagini (Vladimir Vukićević)
    • Strumento di debugger del kit di sviluppo Intel UEFI
      – eseguire il debug del firmware UEFI
    • leaktrap
      – GDI / USER tracker per facilitare il rilevamento delle perdite
    • Mona (richiede PyKD)
      – set di comandi per aiutare nelle analisi avanzate / trovare gli exploit
    • MSEC
      – Fornisce analisi automatizzata degli arresti anomali e valutazione del rischio di sicurezza
    • Narly
      – elenca le informazioni sui moduli caricati, ad esempio se si utilizza SafeSEH, ASLR, DEP, / GS (Buffer Security Checks)
    • Netext (Rodney Viana)
      – (! wservice – elenca gli oggetti servizio WCF,! wconfig – mostra le linee .config,! whttp – elenca HttpContexts,! wselect /! wfrom – supporta SQL come query sugli array)
    • ODbgExt
      – Apri le estensioni del debugger
    • OllyMigrate
      – passare il debuggee a un altro debugger senza riavviare
    • Psscor2
      – un superset di SOS per l’assistenza nel debugging del codice gestito di .NET 2.0
    • Psscor4
      – un superset di SOS per l’assistenza nel debugging del codice gestito di .NET 4
    • PyDBGExt
      – consente l’utilizzo di script Python
    • PyKD
      – consente a Python di essere utilizzato per scriptare WinDBG
    • sdbgext (Nynaeve)
      – (! valloc,! vallocrwx,! heapalloc,! heapfree,! remotecall,! remotecall64,! loaddll,! unloaddll,! close,! killthread,! adjpriv,! ret)
    • SieExtPub
      estensione della legacy … ora integrata in WinDBG in ext.dll
    • SOSEX
      – più comandi per aiutare a eseguire il debug del codice gestito NET 2.0 o 4.0
    • SPT / SDBGExt2 (Steve Niemitz)
      – (! DumpHttpContext,! DumpASPNetRequests,! DumpSqlConnectionPools,! DumpThreadPool, etc)
    • Uniqstack
      – origine a un’estensione debugger (è necessario un account OSR Online per accedervi)
    • Viscope
      – grafico di copertura del codice
    • Wait Chain Traversal / wct.dll (Codeplex Debugging Extensions
      – mostra le catene di attesa dei thread dell’applicazione (aiuta a trovare deadlock )
    • windbgshark
      – integra l’analizzatore di protocollo Wireshark per abilitare la manipolazione e l’analisi del traffico VM
    • Estensioni di WinDBG (Sasha Goldstein)
      – Tracer, WCT, heap_stat, bkb, traverse_map, traverse_vector)
    • Evidenziare WinDBG (ColorWindbg.dll) [Usa Google Traduttore per tradurre il link]
      – evidenziazione syntax asm

    Scrivi la tua estensione

    • Strumenti del mestiere: Parte IV – Sviluppo di DLL di estensione WinDbg
    • Nozioni di base sulle estensioni del debugger: sforzo a breve termine, guadagno a lungo termine

    Utilizzando WinDBG per eseguire il debug del codice gestito

    • Rottura su un’eccezione
    • Rottura su specifica eccezione CLR
    • Debugging .Net codice sorgente framework in Windbg
    • Debug delle eccezioni nel codice gestito usando Windbg
    • Eseguire il debug del codice gestito utilizzando WinDbg e SOS.dll
    • Debug con WinDbg. Deadlock nelle applicazioni.
    • GESTIONE DEBUGGING GESTITO con WINDBG. Introduzione e indice
    • Impostazione dei breakpoint .NET in Windbg per le applicazioni che si bloccano all’avvio

    Scripting (C #, PS, Python, WinDBG)

    • KDAR (Kernel Debugger Anti Rootkit)
      – una raccolta di script WinDBG
    • Script SODNATIVE per script / applicazioni di elaborazione
    • Libreria di script WinDBG
      – una raccolta di script WinDBG
    • Scripting MDbg e DbgHostLib
      – consente al codice gestito di scrivere il Managed Debugger (MDBG) e il DbgEng
    • ExtCS
      – consente il controllo di WinDBG tramite script C #
    • PowerDBG
      – consente il controllo di WinDBG tramite gli script di PowerShell
    • Pykd
      – consente il controllo di WinDBG tramite script Python
    • windbglib
      – libreria wrapper python attorno all’estensione pykd per WinDBG, che imita immlib (in modo da poter usare script scritti originariamente per Immunity Debugger)

    Debugger / Strumenti che utilizzano gli strumenti dbgeng.dll API / WinDBG

    • Un debugger in modalità utente basato su Dbgeng semplice
    • Acorns.Debugging NET Deadlock Detector (utilizza cdb.exe) ( download )
    • CLR Managed Debugger (MDBG)
    • DbgHost – Come controllare un motore di debug
    • Debug Diagnostic Tool v1.2 (DebugDiag), Ver 2.0 + Blog DebugDiag
    • Dynamorio : strumento dinamico di strumentazione binaria in grado di interagire con WinDBG
    • Plug-in IDA + WinDBG
    • GUI WinDBG
    • LeakShell (trova perdite gestite)
    • mdbglib – API di debug gestita
    • PyDbgEng
      – wrapper python per Windows Debugging Engine
    • SOSNET – un fork WinDBG / shell alternativa che si concentra sull’utilizzo dell’estensione SOS e supporta lo script C #
    • Fork di SOSNET O2 – fork di SOSNET che utilizza Rosyln per il motore di scripting C # REPL (read-eval-print-loop)
    • VDB / Vivisect (kenshoto) – fornisce un’API di debugging multipiattaforma su WinDBG
    • WinAppDbg + Heappie-WinAppDbg
    • Scrivere un debugger di base di Windows

    Modi diversi per generare file di dump di crash per analisi post-mortem

    • DebugDiag 2.0
    • Dump Cheat Sheet
      – include come generare dump da macchine virtuali Hyper-V, VMWare ESX e XenServer.
    • Citrix SystemDump
    • Combinazione di tasti per la tastiera
    • MiniDumpWriteDump
      – (tramite chiamata API WIN32 all’interno dell’applicazione). (Esempio per applicazioni C #)
    • Switch NMI o (qui)
      (Funzionalità basata su hardware per generare un NMI … di solito si trova su server di fascia alta, ad esempio HP, oppure è ansible ottenere una scheda PCI aggiuntiva “Universal PCI Dump Switch” ). Sfondo della tecnologia Microsoft NMI.
    • ProcDump
    • Sistema | Impostazioni di sistema avanzate | Avvio e ripristino
      ( informazioni di registro ),
      ( come configurare un dump di memoria completo (completo) ),
      ( come abilitare il dump della memoria completo ),
      ( come abilitare Complete Memory Dump su Windows 7 quando il PC ha molta memoria … normalmente non è disponibile quando più di 2 GB di memoria )
    • Task Manager “Crea file di dump”
    • UserDump , istruzioni (strumento molto vecchio)
    • UserModeProcessDumper , istruzioni
    • Visual Studio “Salva dump come …”
    • WER (Segnalazione errori di Windows …. discariche locali)
    • WinDBG

    Dump Analysis Tools

    • BlueScreenView – trova i file minidump .dmp salvati da Windows dopo un BSOD ed estrae informazioni su ciò che ha causato l’arresto
    • Debug.Analyzer (in grado di analizzare file di dump e plug-in possono essere scritti in .NET)
    • SAD – Simple After Dump (analizzatore post-mortem)
    • Volatilità – quadro per l’analisi della “memoria” registrata nei file di dump ( cheat sheet )

    Strumenti relativi al dumping

    • Citrix dumpcheck – controlla la consistenza del file di dump (sembra che sia stato abbandonato link + link )
    • dumpchk (parte di strumenti di debug) – controlla la coerenza di un file di dump
    • MoonSols Windows Memory Toolkit (in precedenza windd ): converte vari file di dump di memoria grezza in file dmp compatibili con WinDBG
    • vm2dmp – Convertitore di stato Microsoft Hyper-V VM to Memory Dump
    • vmss2core – converte il file di snapshot di VMWare in un file di dump di base ( download ), ( istruzioni )

    Kernel di debug di macchine virtuali

    • VMKD – Estensioni KD della macchina virtuale
    • VirtualKD – (supporto del debugger del kernel per i sistemi operativi ospitati in VMWare / VirtualBox)

    video

    • .NET Cracking 101 # 2 – Nozioni di base su WinDbg
    • Debug .NET per l’ambiente di produzione (Channel9)
    • dotnetConf – Debug avanzato con WinDbg e SOS
    • David Truxall “Debugging with WinDBG”
    • Mike Taulty esegue il debug delle perdite di memoria
    • oredev 2009 Sessione: debug di applicazioni .NET con WinDbg
    • Pluralsight Advanced Windows Debugging
      (più altri a Pluralsight)
    • Tess Ferrandez WinDBG (Channel9)

    Blog

    Alcuni blog (combinazione di debug di codice nativo e gestito).

    • Debug .NET avanzato
    • Tutta la tua base ci appartiene (Sasha Goldshtein)
    • Analizzare-v
    • Debug ASP.NET
    • Cyberiafreak (threading e prog progressivo e debugging avanzato)
    • Debug Analyzer.NET
    • Debug and Beyond
    • Debugging Experts Magazine online
    • Debugging Toolbox (script Windbg, strumenti di debug e risoluzione dei problemi e tecniche per aiutarti a isolare i problemi del software).
    • Decifrare il mio mondo
    • Il WebLog di greggm
    • Note di programmazione per Windows di Junfeng Zhang
    • I bocconcini di Kristoffer
    • Il blog di Mark Russinovich
    • Mike blocca il blog di debug .NET
    • Il blog di Naveen
    • Never Doubt Thy Debugger (Carlo)
    • Note da un angolo oscuro
    • Blog di Ntdebugging (team Microsoft Global Escalation Services)
    • Nynaeve. Avventure nel debugging e reverse engineering di Windows
    • Note per gli sviluppatori PFE per il campo
    • Visual Studio Debugger Team
    • WinDbg di Volker von Einem

    Articoli avanzati e risorse didattiche

    • Tecniche avanzate di debug in WinDbg
    • Debug di applicazioni per MS.Net e Windows (diapositive di PowerPoint)
    • Eseguire il debug di contenitori STL con WinDbg
    • Esercitazioni di debug 1-7 (CodeProject-Toby Opferman)
    • Debugging.tv
    • Developmentor WinDBG Articoli con tag
    • Blog sulla sicurezza di Dr Fu – Esercitazioni sull’analisi dei malware – Approccio al reverse engineering
    • Exploit tutorial tutorial parte 5: Come moduli e plug-in di debugger possono velocizzare lo sviluppo degli exploit di base
    • Caccia ai rootkit
    • Debug del kernel del SO del sistema operativo Microsoft Windows Server remoto utilizzando il programma Dell Windows Debugger Utility (DWDU) ( README del programma di utilità di Windows (R) Debugger 1.1 )

    Debugger alternativi

    • Bokken – ( Inguma ) (GUI per radare)
    • BugDbg
    • Debug ++ (non ancora rilasciato)
    • DEBUGGY
    • Discolored Ring 0 Debugger ( download )
    • edb (Linux)
    • FDBG
    • GoBug
    • Hades (Ring 3 debugger con strategia di rilevamento anti debugger)
    • Hopper (Linux, OSX e Windows) (il debug di Windows non è attualmente implementato)
    • Hyperdbg
    • Debugger IDA
    • ImmunityDebugger
    • Nanomite
    • Obsidian (debugger non intrusivo)
    • OllyDbg
    • PEBrowse
    • RaceVB6 (debugger P-Code VB6)
    • radare
    • radare2ui (GUI per radare)
    • Rasta Ring 0 Debugger (RR0D)
    • Syser Kernel Debugger
    • TRW 2000 (molto vecchio debugger circa W9x) + archivio plugin di dions
    • VisualDux Debugger
    • Wintruder (debugger estendibile)
    • WKTVDebugger (un debugger per Visual Basic P-Code) ( download )
    • x64_dbg
    • Zeta Debugger

    Altri collegamenti

    • Libreria collaborativa di strumenti RCE
      – vasta collezione di debugger e strumenti a livello di sistema
    • cr4zyserb
      – vasta collezione di plugin e altri strumenti di debug
    • Come scrivere i riferimenti di un debugger di Windows (Devon Straw)
      – ampia raccolta di collegamenti che forniscono informazioni dettagliate che sarebbero necessarie se si desidera scrivere il proprio debugger, ad esempio formato di file PDB, formati di file .DMP, struttura dei file PE, come registrare tracce dello stack, ecc. ecc.
    • Tuts4You
      – Unpackers, IDA, OllyDBG, plug-in di Immunity Debugger, ecc.

    Questa è una domanda molto ampia.

    1. Il primo passaggio consiste nel caricare il file di dump in un’istanza di WinDbg.
    2. Successivamente, è necessario assicurarsi di avere una configurazione dei simboli.
    3. Infine, è ansible eseguire il comando !analyze -v per ottenere un’analisi di base eseguita su di esso. È necessario disporre di informazioni sui simboli disponibili per il codice in modo che i file di dump siano utili.

    Il sito Web Memory Dump, Software Trace, Debugging, Malware, Victimware e Intelligence Analysis Portal è stato molto istruttivo per me. Mi è piaciuto molto anche il libro, Advanced Windows Debugging di Mario Hewardt e Daniel Pravat.

    Tess Ferrandez ha una grande serie di tutorial e laboratori di base per iniziare con Windbg. Li consiglio vivamente.