Home of Gamehacking - Archiv

Normale Version: C++ Code Injection(ohne DLL)
Sie sehen gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hey Leute,

Ich würde mich jetzt dann gerne mit der Code Injection mithilfe eines in c++ geschriebenen Programms beschäftigen. Dabei will ich keine DLL in einen anderen Prozessen injecten, sondern den Code aus einem thread oder ähnlichem in meinem Programm in den prozess schreiben. Zunächst müsste ich eine geeignete Stelle in dem Programm finden, wo ich mein Code reinschreiben könnte. Dies kann ich ja entweder manuell, in dem ich einen freien Speicher suche, oder mit VirtualAllocEx Speicher anfordere. Würde ich eine normale DLL mithilfe eines Programmes injecten wollen, müsste ich jetzt ja ausschließlich mit WriteProcessMemory die DLL mithilfe des Pfaded an die freie Stelle im Speicher schreiben. Nur wie mache ich das mit dem Code, der sich direkt in einem Thread in meinem Programm befindet?
Wäre sehr nett, wenn mir hier jemand ein Beispiel oder ähnliches zeigen könnte^^

Danke im voraus und liebe Grüße! Smiling
(12.07.2012, 22:33)Colix schrieb: [ -> ]Hey Leute,

Ich würde mich jetzt dann gerne mit der Code Injection mithilfe eines in c++ geschriebenen Programms beschäftigen. Dabei will ich keine DLL in einen anderen Prozessen injecten, sondern den Code aus einem thread oder ähnlichem in meinem Programm in den prozess schreiben. Zunächst müsste ich eine geeignete Stelle in dem Programm finden, wo ich mein Code reinschreiben könnte. Dies kann ich ja entweder manuell, in dem ich einen freien Speicher suche, oder mit VirtualAllocEx Speicher anfordere. Würde ich eine normale DLL mithilfe eines Programmes injecten wollen, müsste ich jetzt ja ausschließlich mit WriteProcessMemory die DLL mithilfe des Pfaded an die freie Stelle im Speicher schreiben. Nur wie mache ich das mit dem Code, der sich direkt in einem Thread in meinem Programm befindet?
Wäre sehr nett, wenn mir hier jemand ein Beispiel oder ähnliches zeigen könnte^^

Danke im voraus und liebe Grüße! Smiling
Hallo erstmal,
Wenn ich dich richtig verstehe, willst du in deinem eigenes Programm einen Code injecten. Wenn ich dich da richtig verstanden habe, frage ich mich wofür.

Mal davon abgesehen ist soweit ich das noch im Hinterkopf habe (bin nicht mehr so fit in c++) geht das aber leichter per DLL injection.

Aber wie gesagt, so genau weiss ich es auch nichtmehr, und eine genauere Beschreibung deines Vorhabens wäre auch gut.

Also, du verstehst das glaub ich falsch, ich mein das so:

Ich hab einen Code in meinem C++ programm. Dieser Code befindet sich in einem Thread. Ich will diesen thread, bzw. den darin enthaltenen Code, in einen anderen Prozess an eine freie Stelle(CodeCave oder durch VirtualAllocEX angeforderten Speicher) schreiben.
Zu einer DLL will ich nicht zurückgreifen, auch wenn das einfacher wäre!

Heißt:

Code:
int main()
{
     // Dort nun den thread unten bzw. den darin enthaltenen Code an eine freie        Stelle von einem Prozess schreiben.

     return 0;
}

DWORD WINAPI InjectThread()
{
      // irgendwas ^^
}

Hoffe es ist nun klar, was ich mein, wenn nicht, einfach nochmal fragen^^
Danke trotzdem für die schnelle Antwort! Smiling

Mit anderen Worten willst Du das erreichen wie herkömmliche Trainer funktionieren?!
Du hast nen Programm und von diesem Programm willst Du in ein anderes Programm irgendwelche Daten schreiben...
Ich hab jetz zwar mit C++ nichts am Hut aber dazu sei Dir vielleicht die Memory Funktion von Acubra ans Herz gelegt. Zumindest auch von der informativen Seite her...

C++ WriteProcessMemory
Nein ihr versteht falsch ^^
ich will beispielsweise eine MessageBox in ein anderes Programm injecten und dort ausführen lassen. Dabei will ich nicht auf eine DLL zurückgreifen, sondern den Code(MessageBox) von meinem Programm an eine freie Stelle(CodeCave..) in einem anderen Prozess schreiben.
Mir ist unklar wie ich das genau machen soll. Mit CreateRemoteThread den thread, in der sich die MessageBox befindet, in dem anderen Prozess erstellen?

(13.07.2012, 13:31)Colix schrieb: [ -> ]Nein ihr versteht falsch ^^
ich will beispielsweise eine MessageBox in ein anderes Programm injecten und dort ausführen lassen. Dabei will ich nicht auf eine DLL zurückgreifen, sondern den Code(MessageBox) von meinem Programm an eine freie Stelle(CodeCave..) in einem anderen Prozess schreiben.
Mir ist unklar wie ich das genau machen soll. Mit CreateRemoteThread den thread, in der sich die MessageBox befindet, in dem anderen Prozess erstellen?

Warum willst du mit deinem Programm in einem anderen eine Messagebox anzeigen lassen. Erkläre uns doch mal bitte genau was du machen willst (wofür die Messagebox gut sein soll etc...)

Und wiso bindest du die dll dann nicht in deinem Programm mit ein wo es dann z.B per Knopfdrück injeciert?

Eine .dll für Messageboxen etc ist schnell geschrieben.
Wenn ich heute abend zuhause bin mach ich das mal schnell und lad es mal hoch Smiling
Will es einfach mal anschauen, um darauf aufzubauen, frag mich nicht warum.^^ Ich bin durchaus imstande eine DLL zu erstellen, die eine MessageBox ausführen lässt, ist ja auch nicht so schwer, nur das ganze ohne dll, alles in meiner exe hat immoment einen gewissen Reiz für mich Happy

Liebe Grüße

Colix
Hey,
ich glaube ich habe dich verstanden.

Also, wie du schon erkannt hast, musst du eine CodeCave schreiben. Also suchst du dir zunächst einen Platz um eine CodeCave zu schreiben. Nun gucken wir uns an, wie eine MessageBox überhaupt im ASM Code aussieht:
[attachment=966]
Zuerst wird der Style Parameter gepusht, dann der Title Parameter, dann der Text Parameter und zum Schluss das Window Handle. Anschließend wird dann natürlich die MessageBox-Funktion gecalled. Die Reihenfolge der Parameter ist also rückwärts.

In deiner CodeCave musst du jetzt nichts anderes machen. Du schreibst also einfach folgenden Code:
[code=ASM]
push 0 ;mb_ok
push addresse zum titel
push addresse zum text
push 0;wir brauchen kein handle anzugeben
call MessageBox
[/code]
Und wenn das Programm die MessageBox API/Funktion nicht importiert musst Du zusätzlich die Import Table anpassen...
Danke erstmal für die Antwort! Das hat schon gut geklappt! :P

Ich verärger euch bestimmt, aber das ist dennoch nicht das, was ich generell versuche. Ich versuche so was ähnliches wie hier: http://www.c-plusplus.de/forum/293686-full

Hab mir das auch schon angeschaut, verstehe aber nicht ganz was dort passiert und steige einfach nicht richtig durch. Vielleicht könnt ihr, Acubra, fr33k oder sonstige, die schon etwas mehr Erfahrung haben, mir ein wenig zu helfen. Mit dem Anfang des Codes kann ich schon mal recht wenig anfangen und auch so ist mir der WPM auch nicht wirklich klar :( Was passiert da eigentlich genau?

ich denke jetzt wisst ihr worauf ich hinaus will und hoffe das sich der ein oder andere nett zeigt, mir zu helfen.

Danke für die schnellen Antworten von euch!
Seiten: 1 2