View
906
Download
0
Tags:
Embed Size (px)
Citation preview
DLL-INJECTION UND BLABLA...
LOOK AT THE PRETTY HOUSE -->
CONTENT
Haxxing• DLL-Injection• Detours• Windows Hooks• Windows Messages• Subclassing• UISpy, Spy++• JNI
GOAL
Das Ziel ist die Erstellung eines Programms, das den Status eines anderen Programms auslesen und entsprechend darauf reagieren kann.
UNDERCOVER
Wie kommt man in ein anderes Programm "rein"?
--> DLL-Injection durch Windows Hooks
WINDOWS API
• Stellt Funktionen bereit, um mit Windows zu interagieren
• #include <windows.h> von Windows SDK• Für uns wichtig sind z.B.
o Namen von Fenstern abfrageno Text aus Textboxen leseno Position von Fenstern abfragen und setzeno ...
DLL-INJECTION
• DLLs sind libraries, die zur Laufzeit geladen werden können
• DLLs haben eine art "main"-Funktion (DllMain), die immer aufgerufen wird, wenno die DLL in einen Prozess oder Thread geladen
wirdo die DLL wieder entladen wird
• D.h. wir müssen unsere DLL irgendwie in den gewünschten Prozess ladeno Registryo AllocMemory/WriteMemoryo Windows Hooks
WINDOWS HOOKS
In computer programming, the term hooking covers a range of techniques used to alter or augment the behavior of an operating system, of applications, or of other software components by intercepting function calls or messages or events passed between software components. Code that handles such intercepted function calls, events or messages is called a "hook".
-Wikipedia
WINDOWS HOOKS
• Einfach aufzusetzen• Nötig: Hook-Procedure (Callback)• Wir tun nichts in der Hook-Procedure• Nebeneffekt: Ausführende DLL wird in alle
"gehookten" Prozesse geladen.• Remember DllMain...
INSIDE
• Wir sind drin, was nun?• Problem: DllMain wird nur ein Mal ausgeführt.• Wir hinterlassen dem Programm also einen kleinen
Spion, mit dem wir später Kontakt aufnehmen können.
WINDOWS MESSAGES
• Alles läuft über Messages• OS gibt den Fenstern Befehle oder Informationen• Werden von Fenstern interpretiert• Sichtbar mit Spy++• Eigentlich Enums• Können bis zu 2 Parameter mitführen
THE WINDOW PROCEDURE
• Empfangene Messages werden an die Window Procedure dispatched
• Die Message wird über eine switch-Anweisung identifiziert und behandelt
WINDOWS MESSAGES
Es ist möglich, Messages selbst vom eigenen Programm aus an ein beliebiges Fenster im System zu senden. Es ist sogar möglich, eigene Messages zu definieren.Dies wollen wir ausnützen, und so mit unserem Spion kommunizieren.
Wenn wir doch nur unseren Spion dazu bringen könnten, sich Messages anzuhören...
SUBCLASSING
Subclassing is a technique that allows an application to intercept and process messages sent or posted to a particular window before the window has a chance to process them.- MSDN
Wir machen also unsere eigene Window Procedure und setzen sie vor die eigentliche.
GUI HAXXING
• Spy++ (Visual Studio)• UI Spy (Windows SDK)
EXKURS: TEXT AUSLESEN
• Microsoft Research: Detours• Assembler-Library (or so I'm told)• Kann einzelne Funktionen "Umleiten"• Tiefe Windows Funktionen als Bottlenecks (z.B.
DrawText)• Methode:
o Funktion abfangeno Argumente "nach Hause" sendeno Ursprüngliche Funktion aufrufen
• Man kann aber auch Spass damit haben
ASSEMBLING THE COMMUNICATION
• Master-Slave Architekturo Master ist unser Programmo Slave sitzt im Target
• Slave reagiert auf Befehle• Kommunikation durch Windows Messages• Achtung: HWNDs bei jedem Start anders• FindWindow• Problem: Master ist in Java geschrieben
JAVA NATIVE INTERFACE
• ermöglicht Java, Funktionen in einer dll zu callen• mit ein bisschen Aufwand auch umgekehrt• nicht gerne gesehen• JVM "schluckt" Messages• Window Procedure benötigt• Window benötigt• Lösung: Erstelle leeres Dummy-Fenster
als Empfänger (und Sender) von Messages
USING JNI
• Java Methoden als "native" (ohne Body) deklarieren• Mit javah Header erstellen• Header in cpp einbinden und Methoden
implementieren• Als dll kompilieren• Mit LoadLibrary in Java einbinden• In Java lassen sich nun die native methoden callen
USING JNI - REVERSE
• Ein JNI call übergibt der dll einen Pointer zum "JNI Environment" und einen zur aufrufenden Klasse
• jni.h stellt Funktionen bereit, um damit auf die aufrufende Klasse zuzugreifen
FINAL ARCHITECTURE
• Master-Programm in Javao Injiziert Slave ins Targeto Initialisiert Dummy-Window
• Slave grast die GUI nach Views ab und erlangt Pointers zu deren Models
• Master sendet requests über JNI• Slave bearbeitet requests und sendet
Antwort an Dummy• Dummy pusht in Master hinein• Master enthält KI und
führt Mausclicks aus
JAVA MOUSE/KEYBOARD CONTROL
• Wir müssen die Maus und Tastatur kontrollieren können
• Robot-Klasse• Tipp: Perlin Noise