Suchen und Finden
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
Alle Preise verstehen sich inklusive der gesetzlichen MwSt.