|
You last visited: Today at 03:16
Advertisement
Frage zu c++ (dll injection)
Discussion on Frage zu c++ (dll injection) within the C/C++ forum part of the Coders Den category.
08/23/2010, 18:46
|
#1
|
elite*gold: 0
Join Date: Jan 2010
Posts: 399
Received Thanks: 272
|
Frage zu c++ (dll injection)
Hallo,
ich habe es bereits geschafft eine selbstgeschriebene .dll zu injecten. Nun habe ich allerings das Problem, dass sich der erzeugt Thread nach dem automatischen Aufruf der Funktion
Code:
"int __stdcall DllMain(_In_ void * _HDllHandle, _In_ unsigned _Reason, _In_opt_ void * _Reserved)"
wieder schließt.
Ich möchte den Thread gerne so umprogrammieren, dass er jede Sekunde einmal ein paar Adressen aus dem injizierten Prozess ausliest (wie macht man das eigentlich? Mit Read & WriteProcessmemory?) und bei einer Veränderung dieser Adressen darauf reagiert. So möchte ich die Kommunikation meines Hauptprogramms, dass die Values der Adressen ändert, und dem Thread herstellen (bessere Vorschläge nehme ich natürlich gerne entgegen ).
Ein Versuch soetwas mit einer Dauerschleife hinzubekommen ist leider gescheitert, da sich dann der ganze injizierte Prozess aufhängt. Wie könnte ich soetwas also am besten bewerkstelligen?
Bitte verwendet in euren Antworten so viele code Beispiele wie möglich, da ich mich in c++ wirklich nicht auskenne, beim Schreiben der .dll allerdings nicht drumherum komme...
|
|
|
08/23/2010, 21:27
|
#2
|
elite*gold: 150
Join Date: Apr 2007
Posts: 2,372
Received Thanks: 6,628
|
memcpy / memcmp - Createthread
|
|
|
08/23/2010, 22:46
|
#3
|
elite*gold: 0
Join Date: Jan 2010
Posts: 399
Received Thanks: 272
|
Quote:
Originally Posted by wurstbrot123
memcpy / memcmp - Createthread
|
ich denke mal du meinst damit jetzt, wie ich Values aus dem Prozess auslesen kann, oder?
Mein Hauptproblem ist es aber immernoch den erstellten Thread aufrecht zu erhalten und mit ihm zu kommunizieren. Alle Möglchkeiten dies zu bewerkstelligen enden allerdings damit, dass der injizierte Prozess einfriert.
Da er Funktionen im injizierten Prozess aufrufen soll, muss ich him irgendwie die Funktionsnamen und Eingabeparameter "senden".
|
|
|
08/23/2010, 23:02
|
#4
|
elite*gold: 150
Join Date: Apr 2007
Posts: 2,372
Received Thanks: 6,628
|
Hast du dir überhaupt die Funktionen angeguckt ?
CreateThread -->
In den neu erstellten Thread fügst du dann deine Schleife ein, dann wird
der Prozess nicht mehr eingefroren da dann dein Code in einem
anderen Thread läuft.
|
|
|
08/24/2010, 00:04
|
#5
|
elite*gold: 0
Join Date: Jan 2010
Posts: 399
Received Thanks: 272
|
Quote:
Originally Posted by wurstbrot123
Hast du dir überhaupt die Funktionen angeguckt ?
CreateThread -->
In den neu erstellten Thread fügst du dann deine Schleife ein, dann wird
der Prozess nicht mehr eingefroren da dann dein Code in einem
anderen Thread läuft.
|
Wird nicht schon bei der Injektion, also beim injizieren der .dll, ein neuer Thread erzeugt? Mit OllyDbg kann man den sogar sehen, wie er kurz anspringt und wieder weg ist.
|
|
|
08/24/2010, 00:17
|
#6
|
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,904
Received Thanks: 25,394
|
1. memcpy/memset ist nur notwendig, wenn es über int/float Größe hinaus geht, ansonsten, wenn es simple 4 Bytes Adressen sind, änderst du die einfach per Pointer.
2. Deine Idee ist Quatsch, man kommuniziert mit anderen Prozessen via. FileMappings, Pipes, Windows Messages oder auch mal Winsock
|
|
|
08/24/2010, 00:22
|
#7
|
elite*gold: 0
Join Date: Apr 2007
Posts: 943
Received Thanks: 132
|
Quote:
Originally Posted by Nulpe123
Wird nicht schon bei der Injektion, also beim injizieren der .dll, ein neuer Thread erzeugt? Mit OllyDbg kann man den sogar sehen, wie er kurz anspringt und wieder weg ist.
|
Ja es wird ein neuer Thread erzeugt, trotzdem sollte man diesen eigentlich wenig/nicht (oder nur zum Erzeugen eines eigenen Threads) verwenden.
Wenn du den Thread nämlich zu viel machen lässt, kann das zu Problemen führen(hab aber vergessen warum/welche Probleme :P ; glaubs mir einfach)
|
|
|
08/24/2010, 00:45
|
#8
|
elite*gold: 150
Join Date: Apr 2007
Posts: 2,372
Received Thanks: 6,628
|
Wüsste nicht welche wäre mal Intressant zu wissen. Für gleichzeitige
Zugriffe ( falls diese sein müssen ) gibt es ja CRITICAL_SECTION ( s )
|
|
|
08/24/2010, 02:08
|
#9
|
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,904
Received Thanks: 25,394
|
Zb. dass der Prozess anhält.
Injectoren pausieren den Prozess für gewöhnlich so lange, bis die DllMain returnt o.ô
Sieht man zb. wenn man ne Message Loop (zb. durch nen Dialog, den man erstellt) oder irgendne andere Schleife in der DllMain hat, geht das Spiel einfach nicht weiter, der Dialog zwar schon, aber es bringt nicht viel
Außerdem gehören in Einstiegspunkte wie WinMain, DllMain, main immer nur Initialisierungen, der restliche Code kommt raus da, guter Stil undso ;O
Quote:
Wird nicht schon bei der Injektion, also beim injizieren der .dll, ein neuer Thread erzeugt? Mit OllyDbg kann man den sogar sehen, wie er kurz anspringt und wieder weg ist.
|
Klar, aber wenn du keine Schleife in der DllMain hast (was ich dir auch nicht empfehle) ist doch klar, dass der Thread direkt wieder verschwindet.
|
|
|
08/24/2010, 13:59
|
#10
|
elite*gold: 150
Join Date: Apr 2007
Posts: 2,372
Received Thanks: 6,628
|
Quote:
Originally Posted by MrSm!th
Zb. dass der Prozess anhält.
|
Habe wohl beim post von 12345 einiges überlesen :> Das ist mir natürlich alles klar deswegen habe ich ihm ja auch die CreateThread funktion gepostet ^^
|
|
|
09/20/2010, 18:29
|
#11
|
elite*gold: 0
Join Date: Jan 2010
Posts: 399
Received Thanks: 272
|
Folgendes Problem:
Ich möchte in meiner DllMain-Funktion nun einen neuen Thread starten. Das ganze sieht wie folgt aus:
PHP Code:
HANDLE thread; int __stdcall DllMain(_In_ void * _HDllHandle, _In_ unsigned _Reason, _In_opt_ void * _Reserved) { thread = CreateThread(NULL, 0, ThreadFunc,NULL,0,NULL); } DWORD WINAPI ThreadFunc(LPVOID data) { //hier ist jetzt die Dauerschleife mit einer Sleep-Funktion, die das ganze etwas abbremsen soll }
Allerdings meckert mein Compiler, dass er die ThreadFunc nicht findet!
error C2065: 'ThreadFunc': nichtdeklarierter Bezeichner
Wie kann ich die Funktion ThreadFunc für DllMain sichtbar machen?
|
|
|
09/20/2010, 18:37
|
#12
|
elite*gold: 115
Join Date: Oct 2007
Posts: 9,390
Received Thanks: 12,344
|
Funktionsprototyp oben rein schreiben. ;O
|
|
|
09/20/2010, 18:43
|
#13
|
elite*gold: 0
Join Date: Jan 2010
Posts: 399
Received Thanks: 272
|
Edit: Nun habe ich in der Funktion ThreadFunc eine Messagebox hinzugefügt und oben den Funktionsprototypen deklariert:
PHP Code:
DWORD WINAPI ThreadFunc(LPVOID);
HANDLE thread;
int __stdcall DllMain(_In_ void * _HDllHandle, _In_ unsigned _Reason, _In_opt_ void * _Reserved) { thread = CreateThread(NULL, 0, ThreadFunc,NULL,0,NULL); MessageBox(NULL, TEXT("Ich öffne mich immer wieder"), NULL, MB_OK); }
DWORD WINAPI ThreadFunc(LPVOID data) { MessageBox(NULL, TEXT("Thread gestartet"), NULL, MB_OK); }
Wenn ich jetzt allerdings meine DLL injecte erscheint die Messagebox nicht und das injizierte Programm stürzt ab (schließt sich einfach). Wenn ich zudem in der DllMain eine Messagebox hinzufüge scheint die Funktion DllMain eine Art Dauerschleife zu produzieren, denn immer wenn ich auf OK klicke öffnet sich die Messagebox erneut.
Was könnte mein Problem sein?
|
|
|
09/20/2010, 19:11
|
#14
|
elite*gold: 0
Join Date: Oct 2008
Posts: 1,637
Received Thanks: 1,119
|
ich benutze lieber
SuspendThread, GetThreadContext, SetThreadContext, ResumeThread!
mit SetThreadContext wird das EIP register auf eine neue adresse gelegt (EIP = InstructionPointer, (64 bit sollte RIP sein?))
|
|
|
09/20/2010, 19:21
|
#15
|
elite*gold: 0
Join Date: Jan 2010
Posts: 399
Received Thanks: 272
|
Quote:
Originally Posted by HeavyHacker
ich benutze lieber
SuspendThread, GetThreadContext, SetThreadContext, ResumeThread!
mit SetThreadContext wird das EIP register auf eine neue adresse gelegt (EIP = InstructionPointer, (64 bit sollte RIP sein?))
|
Wie würde dafür denn ein Implementierungsbeispiel aussehen? Google will mir da nichts nützliches ausspucken...
|
|
|
|
|
Similar Threads
|
[TIP] SQL Injection
02/11/2009 - RFO Hacks, Bots, Cheats, Exploits & Guides - 6 Replies
This is for someone here that knows the basic use of SQL Injection...
You can edit the website's database and make tweaks on that particular page... i hope you get what I mean ^_^
This is very favorable to private servers. Already done it and hell it rocked the RF World!
Peace out and I know you guys can do what i meant.. ^_^
|
WTB sql injection
11/27/2008 - Trading - 0 Replies
prove me that your coin hack work and i will buy it
|
uo injection
07/03/2008 - General Gaming Discussion - 3 Replies
Hallo zusammen
Bin noch totaler Noob was UO injection betrifft. Ich brauche mal ein wenig Hilfe. Ich bin auf dem shard www.phantsmorgia.de. Die haben da einen eigenen pmclienten denn ich irgendwie nicht umgehen kann. Ich schaff es einfach nicht uo Injection auf diesem Shard zu nutzen. Kann mir vielleicht jemand helfen?
|
URL sql injection
06/24/2008 - RF Online - 2 Replies
any one could give me hints or anything on what url should i put in sql injection for rf online.. im a bit confused.. thanks
|
generelle frage zur dll injection
01/13/2008 - General Coding - 15 Replies
sooo mein zweiter Thread ;D
Diesmal würd ich gern wissen ob es möglich ist direkt auf den speicher des Prozesses zuzugreifen in den eine dll injected wurde und möglicherweise sogar dessen Funktionen auszuführen?
ist doch so oder? :)
gruß, reijin
|
All times are GMT +2. The time now is 03:16.
|
|