Zunächst möchte ich nicht eine DLL injizieren. Ich möchte Code mit WriteProcessMemory() injizieren (wenn das überhaupt möglich ist). Ich habe bereits ReadProcessMemory() verwendet, daher denke ich, dass Schreiben keine große Sache ist.
Nun, können sagen, es ist eine Funktion, bei TargetProgram.exe + D78C612
und lassen Sie uns sagen, dass es wie folgt aufgerufen werden:C++: Code-Injektion zum Aufruf einer Funktion
push eax
push [esp+08]
push edx
push 00
push TargetProgram.exe+AF76235
push 04
call TargetProgram.exe+D78C612
Wie genau würde ich dies mit Write erreichen()?
Ich meine, wo finde ich einen Abschnitt, in dem ich meinen Code injizieren kann, ohne wichtige Dinge zu überschreiben. Und am wichtigsten, wie würde ich die Funktion nennen?
Einfach einen Sprung zu meinem Code in der aktiven Routine machen, zurück springen und danach löschen? Aber wie würde ich die Routine finden?
So viele Fragen und ich habe keine Ahnung, wie ich anfangen soll ... Ich hoffe, du kannst mir helfen. :)
Und wenn Sie die Zeit haben, würde ich wirklich gerne einen Beispielcode einer Funktion-Aufruf-Injektion sehen.
Ich habe ein ähnliches Problem wie OP, aber ich bekomme nicht Ihren ersten WriteProcessMemory Anruf. Als lokale_Adresse kann ich die Adresse meiner Funktion übergeben, aber ich kann ihre Länge in einem nächsten Argument nicht überschreiten. Einfach weil ich keine Ahnung habe wie groß es ist (da der Compiler es noch nicht kompiliert hat). Ist WriteProcessMemory also geeignet, um eine Funktion/einen Code von meinem Prozess in einen anderen zu schreiben? Edit: oder ist die einzige Key-Writing-Funktion in Assembler (ich kann es dann zählen) anstelle von C++? – Kra
@Kra In den meisten Fällen können Sie Ihre C-Funktion nicht einfach in einen anderen Prozess kopieren, da die Sprungadressen unterbrochen werden. Sie müssen entweder Relocations reparieren oder einen Code schreiben, der verschoben werden kann.In beiden Fällen müssen Sie die Assemblersprache verwenden. Um Ihre Frage nach der Funktionscodelänge zu beantworten, können Sie versuchen, Optimierungen zu deaktivieren und zwei Funktionen f1() und f2() zu schreiben, wobei f2 im Code f1 folgt. Dann können Sie die Adresse von f1 von der Adresse von f2 subtrahieren und [hoffentlich] die Länge von f1 erhalten. Aber die Funktionsgröße ist hier das kleinste Problem. – Max
Bekam den Punkt. Vielen Dank. – Kra