Autor Beitrag
Tobi482
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 135



BeitragVerfasst: Do 06.07.06 00:53 
Hi Leute,

ich habe eine Frage für die ich etwas weiter ausholen muss.
Ich fang einfach mal an ... :-D

Ich habe mir etwas in den Kopf gesetzt was mich nicht mehr los lässt. Ich benutze häufig ein Programm X (keine Schleichwerbung^^). Zur Laufzeit von X hat der Prozess sämtliche Kontrolle über den Fenster-Focus. Es setzt seine eigene Form nach ganz oben, eine Art Exlusive-Top-Level-Mode.
X ist, ganz allgemein gesagt, ein Client eines großen Datennetzwerkes und ist mit einem eingebauten Chatsystem ausgestattet. Die gesamte Oberfläche von X besteht aus Controls, die alle Marke-Eigenbau sind, also nicht von Windows(API) gestellt werden (ähnlich der ITunes Oberflächenemulierung).
Das häufige switchen zwischen Prozessen stört die wenigsten Programme. Jedoch gibt es immer wieder "schwarze Schafe", die mit Warnhinweisen anmerken, dass häufiges Prozesswechseln zu einem instabilen Laufzeitprozess führt. Zu dieser Sorte von Programmen gehört auch X. Ich kann also X nur dann den Top-Level Status nehmen, wenn ich einen instabilen Fortlauf in betracht ziehe (nicht akzeptabel).

Mein Ziel ist es an Informationen zugelangen, die von Programmen im Hintergrund erstellt wurden. Diese Informationen sollen genannten eingebauten Chatsystem von X ausgegeben werde. Ich möchte also eigene Chatnachrichten in meinem Client ausgeben.

Dabei ist es nicht möglich, diese Nachrichten über das TCP/IP Protokoll durch einen Sniffer oder Paket-Injection zuübertrage, da X eine Verschlüsselung verwendet, die nicht ohne größeren Aufwand zu knacken ist (letzte Möglichkeit, nur bedingt akzeptabel).

Ich erinnere mich an eine Möglichkeit von der ich früher einmal gehört habe, die mir an logischten erscheint.

1998~2001 spielte ich ein Computerspiel, welches große Beliebtheit genoss. Viele Spieler bedeutet auch viele "Cheater". Ich erinner mich an eine Art Tool, welches mit einem "Loader" durch DLL-Injection eigenen Code in den Spielprozess injektierte. Dieser Code enthielt "Function Pointer", welche auf vorhandene Prozeduren im Spiel pointernten. Mit diesen "Function Pointern" war es möglich eigene Chatnachrichten (Chat-Bots) zuerzeugen.

Diese Möglichkeit sollte auch bei X funktionieren.

--------------------------------------------------------------------------

Ich habe also einen eigenen Loader entworfen, der eine beliebige DLL in den Laufzeitprozess von X injektiert.

Mein Ziel ist es also nun die Speicher-Adressen der "Functions" zu finden, die Chatzeilen in das Chatsystem von X hinzufügen.

Fragen:

1. Wie finde diese Speicher-Adressen?
2. Gibt es bekannte oder gute Tools, Debugg-Tools, die mir dabei helfen könnten?
3. Wenn ich die Adressen habe, wie finde ich die dazugehörogen Parameter der Functionen?
4. Gibt es einen Fachbegriff, der das beschreibt, was ich machen möchte und
unter dem ich mich informieren könnte?

PS: Ich bin für jede Antwort oder Idee dankbar.

Mit freundlichen Grüßen
Tobi
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Do 06.07.06 09:35 
Siehe uallCollection ... Gibt's Links dazu hier im Forum ... Ansonsten hilft auch ne Suche nach Hook ...

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Tobi482 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 135



BeitragVerfasst: Do 06.07.06 10:22 
Hi,
Danke für deine Antwort !

Das Hooken sit nicht mein Problem. Soweit ich das sehen kann ist die
uallCollection eine Art Hook-Package.

Bei den gesuchten Functions handlet es sich ja nicht um importierte DLL Functions. Es sind functions, die direkt aus dem Quellcode stammen.
Ich bin bin mir fast 100% das die Designer dieser genannten "Cheat-Tools" nicht den Quellcode besaßen, da es sich um eine kommerzielle Software handelte.

1. Wie sind sie an die Adressen für die Functions gekommen?
2. Woher wussten sie welche Parameter übergeben werden mussten?

Eine möglichkeitg wäre ja das Dissambling oder Decompiling der exe, aber ich kann mir nicht vorstellen, dass man einen Rückgewandelten ASM code von 10~15 MB verstehen kann oder daraus die functionen findet.

3. Gibt es bekannte Tools, die die Prozess Architektur überwachen?

Irgendwie muss es ihnen ja gelungen sein einen Wrapper zuerstellen, der über Injetction der Rest getan hat.

Mit freundlichen Grüßen
Tobi
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Do 06.07.06 20:30 
Deine Annahmen sind nicht ganz richtig ...

Wenn man sowas macht, nutzt man meist einen Debugger (z.B. OllyDbg), der zu gewissen Teilen auch Disambliert. Es bedarf aber sehr viel Erfahrung und Hintergrundwissen, um anhand der Register-Werte und dem ASM-Code die Funktionalität zu reproduzieren. Wenn man weiß, welcher Befehl während einer Operation etwa ausgeführt wird, ist es eigentlich kein großes Ding mehr, die Einsprungpunkte dafür ausfindig zu machen (einfach dem Source folgen und die Aufruf-Adressen merken).

Um diesen Ansatz zu finden, brauch man ein wenig mehr (u.a. Geduld).

Kleines Beispiel: Um einen Wall-Hack zu machen, hookt man glBegin und merkt sich alle Aufrufstellen, von denen aus glBegin mit bestimmten Parametern aufgerufen wurde. Was man erhält sind die möglichen Aufrufpunkte, an denen eine Mauer oder andere Dinge gezeichnet werden.

Ach ja: Die Parameter ;-) Wenn man einen Routinen-Quelltext hat, sagen wir

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
asm
    PUSH    EBP
    MOV     EBP, ESP
    MOV     EAX, DWORD PTR [EBP+$08]
    ADD     EAX, DWORD PTR [EBP+$0C]
    POP     EBP
end;


Ist es ein Leichtes, die Parameter zu erkennen - Dafür gibt's die Aufrufkonventionen, die da viel erleichtern. In diesem Beispiel werden also Werte an EBP+$08 und EBP+$0C vom Stack gelesen... Ein untrügliches Zeichen, dass hie wahrscheinlich stdcall genutzt wird. Schaut man sich zusätzlich noch die Operation des Sources an, sieht selbst ein ASM-Anfänger recht schnell, dass es sich um das Standard-Beispiel zur Addition zweier DWORDs handelt und die Parameter damit zwei DWORDs A und B sein müssen.

Für Dein Vorhaben also der Tipp: Setz Dich mit den absoluten Grundlagen in ASM und der Programmierung von ASM auseinander, so dass Du auch fremde Sources (bzw. das Assemblat des Delphi-Compilers) verstehen kannst (ohne den Source oder Kommentare dafür zu haben).

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Tobi482 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 135



BeitragVerfasst: So 09.07.06 17:30 
Super Danke :-D

Genau so einen Denkanstoß hab ihc gebraucht^^ ;-)

ok werde mich mal etwas mit außeinander setzten^^
Mein ASM ist etwas eingerostet. Ich muss mich erstmal an die ganzen
Registernamen setzten und die nochmal angucken.

Nocheinmal ein großes Dankeschön für deinen Zeitaufwand.

Mit freundlichen Grüßen
Tobi