Vorwort | 6 |
Danksagungen | 8 |
Inhaltsverzeichnis | 10 |
Einführung | 14 |
1 Ihre Entwicklungsumgebung einrichten | 16 |
1.1 Anforderungen an das Betriebssystem | 16 |
1.2 Python 2.5 herunterladen und installieren | 17 |
1.2.1 Python unter Windows installieren | 17 |
1.2.2 Python unter Linux installieren | 17 |
1.3 Einrichten von Eclipse und PyDev | 19 |
1.3.1 Des Hackers bester Freund: ctypes | 20 |
1.3.2 Dynamische Libraries nutzen | 21 |
1.3.3 C-Datentypen konstruieren | 23 |
1.3.4 Parameter per Referenz übergeben | 25 |
1.3.5 Strukturen und Unions definieren | 25 |
2 Debugger und Debugger-Design | 28 |
2.1 Universal-CPU-Register | 29 |
2.2 Der Stack | 31 |
2.3 Debug-Events | 33 |
2.4 Breakpunkte | 34 |
2.4.1 Software-Breakpunkte | 34 |
2.4.2 Hardware-Breakpunkte | 37 |
2.4.3 Speicher-Breakpunkte | 39 |
3 Entwicklung eines Windows-Debuggers | 42 |
3.1 Prozess, wo bist Du? | 42 |
3.2 Den Zustand der CPU-Register abrufen | 50 |
3.2.1 Threads aufspüren | 51 |
3.2.2 Alles zusammenfügen | 52 |
3.3 Debug-Event-Handler implementieren | 56 |
3.4 Der machtvolle Breakpunkt | 60 |
3.4.1 Software-Breakpunkte | 60 |
3.4.2 Hardware-Breakpunkte | 65 |
3.4.3 Speicher-Breakpunkte | 69 |
3.5 Fazit | 73 |
4 PyDbg - ein reiner Python-Debugger für Windows | 74 |
4.1 Breakpunkt-Handler erweitern | 74 |
4.2 Handler für Zugriffsverletzungen | 77 |
4.3 Prozess-Schnappschüsse | 80 |
4.3.1 Prozess-Schnappschüsse erstellen | 80 |
4.3.2 Alles zusammenfügen | 82 |
5 Immunity Debugger - Das Beste beider Welten | 86 |
5.1 Den Immunity Debugger installieren | 86 |
5.2 Immunity Debugger - kurze Einführung | 87 |
5.2.1 PyCommands | 88 |
5.2.2 PyHooks | 88 |
5.3 Entwicklung von Exploits | 90 |
5.3.1 Exploit-freundliche Instruktionen finden | 90 |
5.3.2 »Böse« Zeichen filtern | 92 |
5.3.3 DEP unter Windows umgehen | 95 |
5.4 Anti-Debugging-Routinen in Malware umgehen | 99 |
5.4.1 IsDebuggerPresent | 100 |
5.4.2 Prozessiteration unterbinden | 100 |
6 Hooking | 102 |
6.1 Soft Hooking mit PyDbg | 102 |
6.2 Hard Hooking mit dem Immunity Debugger | 107 |
7 DLL- und Code-Injection | 114 |
7.1 Erzeugung entfernter Threads | 114 |
7.1.1 DLL-Injection | 116 |
7.1.2 Code-Injection | 118 |
7.2 Zum Übeltäter werden | 121 |
7.2.1 Dateien verstecken | 121 |
7.2.2 Eine Hintertür codieren | 122 |
7.2.3 Kompilieren mit py2exe | 126 |
8 Fuzzing | 130 |
8.1 Fehlerklassen | 131 |
8.1.1 Pufferüberläufe | 131 |
8.1.2 Integerüberläufe | 132 |
8.1.3 Formatstring-Angriffe | 134 |
8.2 Datei-Fuzzer | 135 |
8.3 Weitere Überlegungen | 141 |
8.3.1 Codedeckungsgrad (Code Coverage) | 141 |
8.3.2 Automatisierte statische Analyse | 142 |
9 Sulley | 144 |
9.1 Sulley installieren | 145 |
9.2 Sulley-Primitive | 145 |
9.2.1 Strings | 146 |
9.2.2 Trennsymbole | 146 |
9.2.3 Statische und zufällige Primitive | 146 |
9.2.4 Binäre Daten | 147 |
9.2.5 Integerwerte | 147 |
9.2.6 Blöcke und Gruppen | 148 |
9.3 WarFTPD knacken mit Sulley | 149 |
9.3.1 FTP - kurze Einführung | 150 |
9.3.2 Das FTP-Protokollgerüst erstellen | 151 |
9.3.3 Sulley-Sessions | 152 |
9.3.4 Netzwerk- und Prozessüberwachung | 153 |
9.3.5 Fuzzing und das Sulley-Webinterface | 154 |
10 Fuzzing von Windows-Treibern | 158 |
10.1 Treiberkommunikation | 159 |
10.2 Treiber-Fuzzing mit dem Immunity Debugger | 160 |
10.3 Driverlib - das statische Analysetool für Treiber | 163 |
10.3.1 Gerätenamen aufspüren | 164 |
10.3.2 Die IOCTL-Dispatch-Routine aufspüren | 165 |
10.3.3 Unterstützte IOCTL-Codes aufspüren | 167 |
10.4 Einen Treiber-Fuzzer entwickeln | 169 |
11 IDAPython - Scripting für IDA Pro | 174 |
11.1 IDAPython installieren | 175 |
11.2 IDAPython-Funktionen | 176 |
11.2.1 Utility-Funktionen | 176 |
11.2.2 Segmente | 176 |
11.2.3 Funktionen | 177 |
11.2.4 Cross-Referenzen | 177 |
11.2.5 Debugger-Hooks | 178 |
11.3 Beispielskripten | 179 |
11.3.1 Aufspüren von Cross-Referenzen auf gefährliche Funktionen | 179 |
11.3.2 Codeabdeckung von Funktionen | 181 |
11.3.3 Stackgröße berechnen | 182 |
12 PyEmu - der skriptfähige Emulator | 186 |
12.1 PyEmu installieren | 186 |
12.2 PyEmu-Übersicht | 187 |
12.2.1 PyCPU | 187 |
12.2.2 PyMemory | 188 |
12.2.3 PyEmu | 188 |
12.2.4 Ausführung | 188 |
12.2.5 Speicher- und Register-Modifier | 188 |
12.2.6 Handler | 189 |
12.3 IDAPyEmu | 194 |
12.3.1 Funktionen emulieren | 196 |
12.3.2 PEPyEmu | 199 |
12.3.3 Packer für Executables | 200 |
12.3.4 UPX-Packer | 200 |
12.3.5 UPX mit PEPyEmu entpacken | 201 |
Index | 206 |