![]() |
Re: Adresse einer Funktion ohne @ ermitteln (evtl über CS:IP
Es ist ein 32 Bit Vista. Ich habe einfach die Funktionen von Nico aufgerufen und so wie ich das verstanden habe, wird ja der Speicher des Zielprozesses sozusagen überschrieben und nacheinander alle Sections der Quelldatei in den Speicher der Zieldatei geschrieben. Die Relocations und Imports sollten also eigentlich vorhanden sein.
Außer dem CreateThread funktioniert die injizierte EXE ja auch. Habe es jetzt mal hier unter Vista testweise mit der nativen NtCreateThreadEx versucht, in der Hoffnung, dass diese evtl. funktioniert. War allerdings nicht der Fall. Das normale NtCreateThread zum Laufen zu bekommen ist mir bisher noch nicht gelungen, allerdings befürchte ich, dass dieser Ansatz das Problem auch nicht lösen kann .. |
Re: Adresse einer Funktion ohne @ ermitteln (evtl über CS:IP
![]() also da wird etwas in der laufenden EXE geändert ^^ Innerhalb der If Result Then Begin-Abfrage wird die EXE getautscht und in der neuen EXE was ersetzt ... stattdessen kann man auch die ganze EXE ersetzten :stupid: |
Re: Adresse einer Funktion ohne @ ermitteln (evtl über CS:IP
Mh, wüsste nicht, wie mir das jetzt weiterhelfen könnte :P Das Ändern der laufenden EXE mache ich ja frei nach Nicos InMemExe Beispiel ..
|
Re: Adresse einer Funktion ohne @ ermitteln (evtl über CS:IP
Nur ist es doch garnicht nötig erst soweit auszuholen
und so richtig scheint es ja über die InMemExe ja auch nicht zu laufen ;) |
Re: Adresse einer Funktion ohne @ ermitteln (evtl über CS:IP
Unter XP läuft alles perfekt, nur halt unter Vista nicht. Würde mich auch so einfach mal interessieren, was da so grundlegend geändert wurde.
|
Re: Adresse einer Funktion ohne @ ermitteln (evtl über CS:IP
Nunja, wenn in Programm an einem anderem Platz geladen werden muß, dann muß Windows doch die Adressen verschieben.
Wenn beide Programme an die selbe Adresse geladen werden sollen, dann muß doch die InMemExe werschoben und alle Zeiger die auf sie zeigen müssen ebenfalls zur neuen Position verschoben werden ... vielleicht hat Microsoft da was geändert? ich hätte da eher gedacht daß es gesser geht wenn die InMemExe eine andere Position hat, als die laufende Exe :gruebel: (warum hat dein Programm eigentlich nicht ImageBase = $004000000 ? ... nur mal so aus Neugierde) |
Re: Adresse einer Funktion ohne @ ermitteln (evtl über CS:IP
Nene die Sache ist da noch bisschen komplizierter. Die ImageBase habe ich mittlerweile auch wieder auf $004000000 festgelegt, allerdings musste ich bemerken, dass es auch mit dieser ImageBase unter Vista nicht funktioniert.
Das Prinzip der InMemExe ist ja folgendes: Es wird der Zielprozess suspended gestartet. Danach werden alle ImageNtSections der QuellEXE durchgegangen und mittels VirtualAllocEx und WriteProcessMemory in den Zielprozess gebracht. So sollte man praktisch die QuellEXE im Kontext des Zielprozesses ausführen, was ja auch funktioniert. Nur der komische ERROR_BAD_EXE_FORMAT Fehler unter Vista im Zusammenhang mit CreateThread gibt mir Rätsel auf. |
Re: Adresse einer Funktion ohne @ ermitteln (evtl über CS:IP
Du hast OldGrumpy's Frage zu den 64 Bit noch nicht beantwortet ... also nutzt du nun ein Vista64?
[add] übersehn Wenn ja, dann kommt dieser Fehler wohl ganz schön oft da vor :shock: ![]() [add] :gruebel: |
Re: Adresse einer Funktion ohne @ ermitteln (evtl über CS:IP
Hat er doch:
Zitat:
|
Re: Adresse einer Funktion ohne @ ermitteln (evtl über CS:IP
Autsch, also dass das so funktioniert, ist echt erstaunlich. Es gibt aber Randbedingungen die Du vielleicht nicht kennst. Wenn Du einen Prozess suspended startest, dann geht der Systemloader erstmal hin, erzeugt einen Prozess, lädt das Image in den Speicher, lädt DLLs dazu die in der Import table vermerkt sind, erzeugt die ganzen Tabellen mit Systemadressen (die Funktionsnamen werden in konkrete Adressen aufgelöst und in einer Sprungtabelle vermerkt), TLS behandelt, und noch einiges mehr. Erst danach kehrt der Systemloader zurück. Wenn Du jetzt die Exe im Prozess mit Deiner eigenen überschreibst, dann muessten IMHO:
- Die Abhängigkeiten 1:1 identisch sein, d.h. alle Imports gleich (alle DLLs und Funktionen daraus) - Der Einsprungpunkt identisch sein (es sei denn man geht hin und ändert die Prozessorregister des Hauptthreads entsprechend) - Die Exe an der original image base address liegen und ausgeführt werden (da keine Relocations bearbeitet werden) Ich vermute mal stark, dass Vista im Zuge der verbesserten Systemsicherheit da zusätzliche Checks verpasst bekommen hat. Ich kann mich gerne mal in der Richtung umhören, vielleicht weiss da jemand was :) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:24 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz