DLL-I NJECTION   UND   BLABLA ... LOOK   AT   THE   PRETTY   HOUSE  -->
C ONTENT Haxxing DLL-Injection Detours Windows Hooks Windows Messages Subclassing UISpy, Spy++ JNI
G OAL Das Ziel ist die Erstellung eines Programms, das den Status eines anderen Programms auslesen und entsprechend darauf reagieren kann.
U NDERCOVER Wie kommt man in ein anderes Programm "rein"? --> DLL-Injection durch Windows Hooks
W INDOWS  API Stellt Funktionen bereit, um mit Windows zu interagieren #include <windows.h> von Windows SDK Für uns wichtig sind z.B. Namen von Fenstern abfragen Text aus Textboxen lesen Position von Fenstern abfragen und setzen ...
DLL-I NJECTION DLLs sind libraries, die zur Laufzeit geladen werden können DLLs haben eine art &quot;main&quot;-Funktion (DllMain), die immer aufgerufen wird, wenn die DLL in einen Prozess oder Thread geladen wird die DLL wieder entladen wird D.h. wir müssen unsere DLL irgendwie in den gewünschten Prozess laden Registry AllocMemory/WriteMemory Windows Hooks
W INDOWS  H OOKS 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 &quot;hook&quot;. -Wikipedia
W INDOWS  H OOKS Einfach aufzusetzen Nötig: Hook-Procedure (Callback) Wir tun nichts in der Hook-Procedure Nebeneffekt: Ausführende DLL wird in alle &quot;gehookten&quot; Prozesse geladen. Remember DllMain...
I NSIDE 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.
W INDOWS  M ESSAGES 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
T HE  W INDOW  P ROCEDURE Empfangene Messages werden an die Window Procedure dispatched Die Message wird über eine switch-Anweisung identifiziert und behandelt
W INDOWS  M ESSAGES 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...
S UBCLASSING 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 H AXXING Spy++ (Visual Studio) UI Spy (Windows SDK)
E XKURS : T EXT  A USLESEN Microsoft Research: Detours Assembler-Library (or so I'm told) Kann einzelne Funktionen &quot;Umleiten&quot; Tiefe Windows Funktionen als Bottlenecks (z.B. DrawText) Methode: Funktion abfangen Argumente &quot;nach Hause&quot; senden Ursprüngliche Funktion aufrufen Man kann aber auch Spass damit haben
 
A SSEMBLING   THE   COMMUNICATION Master-Slave Architektur Master ist unser Programm 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
J AVA  N ATIVE  I NTERFACE ermöglicht Java, Funktionen in einer dll zu callen mit ein bisschen Aufwand auch umgekehrt nicht gerne gesehen JVM &quot;schluckt&quot; Messages Window Procedure benötigt Window benötigt Lösung: Erstelle leeres Dummy-Fenster  als Empfänger (und Sender) von Messages
U SING  JNI Java Methoden als &quot;native&quot; (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
U SING  JNI - R EVERSE Ein JNI call übergibt der dll einen Pointer zum &quot;JNI Environment&quot; und einen zur aufrufenden Klasse jni.h stellt Funktionen bereit, um damit auf die aufrufende Klasse zuzugreifen
F INAL   ARCHITECTURE Master-Programm in Java Injiziert Slave ins Target 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
J AVA   MOUSE / KEYBOARD   CONTROL Wir müssen die Maus und Tastatur kontrollieren können Robot-Klasse Tipp: Perlin Noise

DLL-Injection

  • 1.
    DLL-I NJECTION UND BLABLA ... LOOK AT THE PRETTY HOUSE -->
  • 2.
    C ONTENT HaxxingDLL-Injection Detours Windows Hooks Windows Messages Subclassing UISpy, Spy++ JNI
  • 3.
    G OAL DasZiel ist die Erstellung eines Programms, das den Status eines anderen Programms auslesen und entsprechend darauf reagieren kann.
  • 4.
    U NDERCOVER Wiekommt man in ein anderes Programm &quot;rein&quot;? --> DLL-Injection durch Windows Hooks
  • 5.
    W INDOWS API Stellt Funktionen bereit, um mit Windows zu interagieren #include <windows.h> von Windows SDK Für uns wichtig sind z.B. Namen von Fenstern abfragen Text aus Textboxen lesen Position von Fenstern abfragen und setzen ...
  • 6.
    DLL-I NJECTION DLLssind libraries, die zur Laufzeit geladen werden können DLLs haben eine art &quot;main&quot;-Funktion (DllMain), die immer aufgerufen wird, wenn die DLL in einen Prozess oder Thread geladen wird die DLL wieder entladen wird D.h. wir müssen unsere DLL irgendwie in den gewünschten Prozess laden Registry AllocMemory/WriteMemory Windows Hooks
  • 7.
    W INDOWS H OOKS 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 &quot;hook&quot;. -Wikipedia
  • 8.
    W INDOWS H OOKS Einfach aufzusetzen Nötig: Hook-Procedure (Callback) Wir tun nichts in der Hook-Procedure Nebeneffekt: Ausführende DLL wird in alle &quot;gehookten&quot; Prozesse geladen. Remember DllMain...
  • 9.
    I NSIDE Wirsind 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.
  • 10.
    W INDOWS M ESSAGES 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
  • 11.
    T HE W INDOW P ROCEDURE Empfangene Messages werden an die Window Procedure dispatched Die Message wird über eine switch-Anweisung identifiziert und behandelt
  • 12.
    W INDOWS M ESSAGES 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...
  • 13.
    S UBCLASSING 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.
  • 14.
    GUI H AXXINGSpy++ (Visual Studio) UI Spy (Windows SDK)
  • 15.
    E XKURS :T EXT A USLESEN Microsoft Research: Detours Assembler-Library (or so I'm told) Kann einzelne Funktionen &quot;Umleiten&quot; Tiefe Windows Funktionen als Bottlenecks (z.B. DrawText) Methode: Funktion abfangen Argumente &quot;nach Hause&quot; senden Ursprüngliche Funktion aufrufen Man kann aber auch Spass damit haben
  • 16.
  • 17.
    A SSEMBLING THE COMMUNICATION Master-Slave Architektur Master ist unser Programm 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
  • 18.
    J AVA N ATIVE I NTERFACE ermöglicht Java, Funktionen in einer dll zu callen mit ein bisschen Aufwand auch umgekehrt nicht gerne gesehen JVM &quot;schluckt&quot; Messages Window Procedure benötigt Window benötigt Lösung: Erstelle leeres Dummy-Fenster  als Empfänger (und Sender) von Messages
  • 19.
    U SING JNI Java Methoden als &quot;native&quot; (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
  • 20.
    U SING JNI - R EVERSE Ein JNI call übergibt der dll einen Pointer zum &quot;JNI Environment&quot; und einen zur aufrufenden Klasse jni.h stellt Funktionen bereit, um damit auf die aufrufende Klasse zuzugreifen
  • 21.
    F INAL ARCHITECTURE Master-Programm in Java Injiziert Slave ins Target 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
  • 22.
    J AVA MOUSE / KEYBOARD CONTROL Wir müssen die Maus und Tastatur kontrollieren können Robot-Klasse Tipp: Perlin Noise