2016-04-12 16 views
0

Es ist mir nur gelungen, einen Abschnitt und einen Code zu einer PE-Datei (in diesem Fall meine proxy.exe) in Windows 10 hinzuzufügen. Ich habe auch den Eingangspunkt an den Anfang meines neuen Abschnitts geändert. Wenn ich die gepatchte .exe ausführe, wird mein Stub aufgerufen und ich höre einen hochfrequenten Signalton (ich habe zuerst mit einem Signalton getestet), so weit, so gut.PE-Header - Neuer Abschnitt - Wie OEP-Adresse im Speicher zu berechnen?

Aber jetzt möchte ich zum OEP zurückkehren. Aber wie kann ich die adresse meines oep in speicher berechnen? Ich dachte über dieses Problem nach und ich kam mit einer? Lösung ?:

Zählen Sie die Rsize aller Abschnitte mit Ausnahme der einen ich frisch hinzugefügt, dann bekomme ich die Adresse meiner Stub im Speicher (Delta Offset) und subtrahieren die Gesamtgröße davon. Jetzt sollte ich am Anfang des .text-Abschnitts im Speicher stehen. Danach füge ich den Offset für den oep hinzu und das ist es.

Funktioniert das oder habe ich einen Fehler gemacht Gibt es einen anderen, wahrscheinlich einfacheren Weg? Und was ist mit Dlls, gibt es einen Unterschied für die gesamte Prozedur?

http://i.imgur.com/tpUH8x4.png < - Bild von Stub

Vielen Dank im Voraus! ;)

+0

Welches Betriebssystem? Mein Verständnis ist, dass die Platzierung einer ausführbaren Datei von der O.S abhängig ist (falls es eine gibt). –

+0

Oh, ich habe vergessen, sorry - Windows 10. * Post bearbeitet –

Antwort

0

Mit OEP vermute ich, dass Sie IMAGE_OPTIONAL_HEADER beheben. AddressOfEntryPoint.

Ok, wenn ich es richtig verstanden habe, dann nehmen Sie die IP -> subtrahieren Sie den Offset mit der erwarteten RVA (zugehörige virtuelle Adresse), um die geladene Adresse des Moduls zu erhalten und fügen Sie es dem RVA des OEP hinzu echte Adresse des Einstiegspunktes Wenn Sie die Mathematik richtig machen, sollte dies funktionieren.

Ich habe noch keine Kommentarberechtigungen, aber ich denke, es sollte als Kommentar eingehen und nicht antworten, da ich nicht genau dieses Ding probiert habe, aber es ist ein Vorschlag, der dem ähnlich ist, was ein Compiler für die Binärdatei tut.

OEP ist eine RVA, während der Injektion haben Sie die ORIG_RVA und die injected_RVA, die Sie ersetzt haben. Fügen Sie in Ihrer Injektionslogik einfach

Offset hinzu: push orig_rva.

Fügen Sie dann für den Offset einen Verschiebungseintrag in die Umlagerungstabelle des PE hinzu. Der Lader erledigt den Rest.