ich möchte einen Dll Injector in C# schreiben.
Eigentlich ist alles andere fertig bis auf das wichtigste: den Teil des Programms der die Dll injected.
Wie funktioniert eine Injection in C#?
Habe in google gesucht aber nichts gefunden.
Lass mich raten du hast bis jetzt nicht viel mehr gemacht als eine Oberfläche zusammengestellt.
Es gibt mehrere möglichkeiten eine Dll zu injectieren. Die meisten injectoren funktionieren so das sie eine funktion die eine Dll lädt in den Prozessspeicher des opfer pogramms schreiben und diese dort zum ausführen bringen.
Da du aber sprache verwendest die bytecode erzeugt und die opfer pogramme warscheinlich aus maschienencode bestehen, wird man das mit c# nicht alleine auf diese art realiesieren können.
Lass mich raten du hast bis jetzt nicht viel mehr gemacht als eine Oberfläche zusammengestellt.
Es gibt mehrere möglichkeiten eine Dll zu injectieren. Die meisten injectoren funktionieren so das sie eine funktion die eine Dll lädt in den Prozessspeicher des opfer pogramms schreiben und diese dort zum ausführen bringen.
Da du aber sprache verwendest die bytecode erzeugt und die opfer pogramme warscheinlich aus maschienencode bestehen, wird man das mit c# nicht alleine auf diese art realiesieren können.
Richtig geraten!
Danke für die Hilfe, aber kennst du vieleicht ein Tutorial wo genauer auf Code injection mit C\C++ oä. eingegangen wird?
jo, du musst(so hab ich es zumindest gemacht) ein e C++ Dll schreiben, und eine C++ exe die die Dlll injectet, vielicht kann man auch die Dll direkt von C# aus injecten, mir ist das allerdings nicht so gelungen.
Einen Injektor kann man ohne Probleme in .NET programmieren, nur die DLL die du injizierst muss nativ sein, eine .NET assembly wird nicht funktionieren.
Die DLL Injektion geht ziemlich einfach, du holst dir mit system.Diagnostic.Process.EnterDebugMode(); erstmal Debug Privilegien, dann musst du dir ein Prozess Handle, mit den richtigen rechten zu dem Prozess in den du die DLL injizieren möchtest, holen, um danach in diesem Prozess etwas Speicher zu allozieren in den du dann den kompletten Pfad der DLL schreibst, dann rufst du die Windows Api CreateRemoteThread auf die Adresse von LoadLibrary auf und übergibst als lpParamter die Adresse des Strings mit dem DLL Pfad.
Alle Informationen wie genau man die Windows Apis verwendet findest du auf MSDN.com.
Edit: Die API für das Allozieren von Speicher in einem fremden Prozess heißt VirtualAllocEx
Auf MSDN steht auch immer wie man die Windows Api Funktionen in den .NET Sprachen richtig benutzt.
hier mal nen link zu einem tutorial wie man es in C macht .
Quote:
Originally Posted by Bot_interesierter
Einen Injektor kann man ohne Probleme in .NET programmieren, nur die DLL die du injizierst muss nativ sein, eine .NET assembly wird nicht funktionieren.
Die DLL Injektion geht ziemlich einfach, du holst dir mit system.Diagnostic.Process.EnterDebugMode(); erstmal Debug Privilegien, dann musst du dir ein Prozess Handle, mit den richtigen rechten zu dem Prozess in den du die DLL injizieren möchtest, holen, um danach in diesem Prozess etwas Speicher zu allozieren in den du dann den kompletten Pfad der DLL schreibst, dann rufst du die Windows Api CreateRemoteThread auf die Adresse von LoadLibrary auf und übergibst als lpParamter die Adresse des Strings mit dem DLL Pfad.
Aber LoadLibrary muss ja innerhalb des opferpogramms aufgerufen werden.
Also musste man doch Loadlibrary in eine funktion packen und diese in das opferpogramm rein schreiben und diese funktion dann mittels CreateRemotetThread ausfuhren. Aber wen jetzt diese function die Loadlibrary beinhaltet in bytecode vorliegt dann bezweifel ich das man sie einfach mit CreateRemoteThread aufrufen kann.
EDIT:
Ich mein auch das in dem tutorial vom HABO das ich oben gelinkt habe irgendwo drin stand das man kein byte code verwenden darf.
@Akorn
Man kann LoadLibrary direkt über CreateRemoteThread ausführen, es gibt keinen Grund irgendwelche Funktionen in den Speicher des Ziels zu schreiben, daher auch keine Probleme mit Bytecode, das Problem wäre allerdings auch zu umgehen mit einer unmanaged Funktion, damit kann man quasi nativen Code in C# schreiben, allerdings wird es etwas kompliziert diesen Code dann zu kopieren, einfach wäre es direkt Shell Code also assembler zu schreiben und diesen zu injizieren.
Aber wie gesagt das alles ist unnötig da man LoadLibrary mit CreateRemoteThread ausführen kann.
Injection How To 03/05/2011 - General Gaming Discussion - 17 Replies 1.) Wo kriege ich Injection her?
-> http://injection.sourceforge.net/
2.) Knallt euch dann alles in ein Verzeichnis, besorgt euch dann einne der supporteten Clients (steht in der ilpatch.cfg)
3.) Decrypted diesen Client mit UORice
-> http://stud4.tuwien.ac.at/~e9425109/UO_RICE.htm
Sql injection 01/19/2010 - Kal Online - 34 Replies Eine frage woher bekomme ich den Sql Injection + tut würde mich freuen wenn einer mir weiter hilft danke
SQL injection. 02/12/2008 - Zero - 0 Replies Hi all, This is a curious topic because i have found numerous occasions where this has happened on the chinese version of the game.
Also i was wondering if anyone knows of any occasions where it has been done on the English servers?
I've been researching into this and apparently it requires tracing the packets back to the DB server then using a program (once you have the address) to inject your own SQL code into the database indefinitely editing your character to what ever your choosing...