Was genau ist ein GLWrapper?

Hi,
was genau ist ein GLWrapper und vorallem wie funktioniert er?
Noch besser wär wenn jemand ein Tutorial kennt in dem erklärt wird wie man einen
schreibt!

Danke im voraus,
Xalon
 
Erklär mal genauer was du meinst.
Also was mir dazu einfällt sind Methoden um OpenGL-Funktionen zu hooken, um damit z.B. Wallhacks für Spiele zu schreiben. Dabei reicht es schon eine Dll mit dem gleichen Namen einer opengl-dll zu schreiben, die die selben Funktionen exportiert und in diesen die Originial-Funktionen aufruft. Dann setzt man bei der gewünschten Funktion seinen Code ein und man hat sehr viel Einfluss auf das Spielgeschehen.
Es kann aber auch sein, dass du etwas vollkommen anderes mit "GLWrapper" meinst.
 
Du meinst also ich müsste ALLE Funktionen der Original DLL auch in meiner DLL haben und dann einfach immer die Funktionen der alten aufrufen??

Danke,
Xalon
 
Das ist nur eine Möglichkeit. Es gibt einfachere Methoden, wie z.B. Manipulation der IAT(falls die Addresse nicht per GetProcAddress ermittelt wird) oder die ersten Bytes der gewünschten Funktion mit einem jmp zu deiner Funktion zu überschreiben(das muss aber von dem Prozess aus gemacht werden, für den die Funktion gehookt werden soll). Die letzte Methode habe ich auch mal bei einem Crackme von mir angewandt.(ist hier irgendwo im Crackme-Forum).

Noch ein paar Links zum Thema Hooking:
http://research.microsoft.com/sn/detours/
http://www.codeproject.com/system/hooksys.asp
 
Ein Wrapper ist in der Progammierung eine Schnittstelle die eine Funktionalität meist ebenfalls eine Schnittstelle verpackt (engl.: to wrap) um weitere Funktionalität hinzuzufügen oder die Schnittstelle zu vereinfachen.

Speziell für das was Lesco geschrieben hat, ist das mehr oder weniger aufwändig weil man alle Funktionen weiterleiten muss. Wenn es dir aber nur um ein paar Funktionen geht kannst du auch mit API-Hooking durch Code-Injection arbeiten.

EDIT:
Sch... zu langsam.
 
Wie kann ich denn API-Funktionen Hooken indem ich DLL-Injection mache??

Xalon

Edit:
Wwelche Methode ist besser,
CreateRemoteThread
oder
WriteProcessMemory
?
 
Also, du injectest die Dll in den entsprechenden Prozess(dafür gibt es mehrere Wege, wie z.B. Message-Hooks per RegisterWindowsHookEx). Dann ermittelst du per LoadLibrary und GetProcAddress die Addresse der Funktion. Dann berechnest du den relativen Abstand zwischen deiner neuen Funktion und der Original-Funktion. Dann speicherst du die ersten 5 Bytes der alten Funktion und berechnest wieder den Abstand von dem Speicherort der 5 Bytes zu der Original-Funktion+5 und schreibst
E9 <relativer Abstand:Speicherort der 5 Bytes <-> Originalfunktion+5>
hinter die 5 gespeicherten Bytes (evtl. noch ein retn dahinter).
Nun schreibst du per WriteProcessMemory ein
E9 <relativer Abstand: Callback-Funtion <-> Original-Funktion>
an die Adresse der Original-Funktion.
Das hat zur Folge, dass jedesmal wenn die Original-Funktion aufgerufen wird, zu deiner Funktion gesprungen wird. Wenn du nun die alte Funktion aufrufen willst, musst du nur die gespeicherten 5-Bytes aufrufen, diese werden ausgeführt, und durch den Sprung-Befehl der vorher eingefügt wurde, springt der dann wieder in die Original-Funktion führt diese aus und kehrt zu deiner Callback-Funktion zurück und du kannst das Ergebnis nachbearbeiten und dann zurückgeben.

Das ganze ist ein wenig kompliziert, vorallem musst du bei den Aufruf-Konventionen aufpassen, dass die dir nicht den Stack kaputt machen.
Mehr Details findest du im Detours-Source und in den Intel-Docs(bzgl. der einzusetzenden Sprünge).
Wenn du willst, kann ich auch mal den Source von meinem Crackme, dass MessageBoxA hookt geben, allerdings, habe ich da die Trampoline-Funktion(die originalen 5-Bytes + Sprung in die alte Funktion) weggelassen, da ich noch MessageBoxExA zur Verfügung hatte und die alte Funktion daher nicht mehr gebraucht habe.
 
Zurück
Oben