22
DLL-INJECTION UND BLABLA... LOOK AT THE PRETTY HOUSE -->

DLL-Injection

Embed Size (px)

Citation preview

Page 1: DLL-Injection

DLL-INJECTION UND BLABLA...

LOOK AT THE PRETTY HOUSE -->

Page 2: DLL-Injection

CONTENT

Haxxing• DLL-Injection• Detours• Windows Hooks• Windows Messages• Subclassing• UISpy, Spy++• JNI

Page 3: DLL-Injection

GOAL

Das Ziel ist die Erstellung eines Programms, das den Status eines anderen Programms auslesen und entsprechend darauf reagieren kann.

Page 4: DLL-Injection

UNDERCOVER

Wie kommt man in ein anderes Programm "rein"?

--> DLL-Injection durch Windows Hooks

Page 5: DLL-Injection

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

Page 6: DLL-Injection

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

Page 7: DLL-Injection

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

Page 8: DLL-Injection

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

Page 9: DLL-Injection

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.

Page 10: DLL-Injection

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

Page 11: DLL-Injection

THE WINDOW PROCEDURE

• Empfangene Messages werden an die Window Procedure dispatched

• Die Message wird über eine switch-Anweisung identifiziert und behandelt

Page 12: DLL-Injection

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

Page 13: DLL-Injection

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.

Page 14: DLL-Injection

GUI HAXXING

• Spy++ (Visual Studio)• UI Spy (Windows SDK)

Page 15: DLL-Injection

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

Page 16: DLL-Injection
Page 17: DLL-Injection

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

Page 18: DLL-Injection

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

Page 19: DLL-Injection

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

Page 20: DLL-Injection

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

Page 21: DLL-Injection

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

Page 22: DLL-Injection

JAVA MOUSE/KEYBOARD CONTROL

• Wir müssen die Maus und Tastatur kontrollieren können

• Robot-Klasse• Tipp: Perlin Noise