AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Adresse einer Funktion ohne @ ermitteln (evtl über CS:IP)
Thema durchsuchen
Ansicht
Themen-Optionen

Adresse einer Funktion ohne @ ermitteln (evtl über CS:IP)

Ein Thema von Zacherl · begonnen am 13. Dez 2007 · letzter Beitrag vom 17. Dez 2007
Antwort Antwort
Seite 3 von 6     123 45     Letzte »    
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#21

Re: Adresse einer Funktion ohne @ ermitteln (evtl über CS:IP

  Alt 16. Dez 2007, 11:49
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 ..
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#22

Re: Adresse einer Funktion ohne @ ermitteln (evtl über CS:IP

  Alt 16. Dez 2007, 17:47
http://www.delphipraxis.net/internal...t.php?t=123395

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
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#23

Re: Adresse einer Funktion ohne @ ermitteln (evtl über CS:IP

  Alt 16. Dez 2007, 18:07
Mh, wüsste nicht, wie mir das jetzt weiterhelfen könnte Das Ändern der laufenden EXE mache ich ja frei nach Nicos InMemExe Beispiel ..
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#24

Re: Adresse einer Funktion ohne @ ermitteln (evtl über CS:IP

  Alt 16. Dez 2007, 18:29
Nur ist es doch garnicht nötig erst soweit auszuholen
und so richtig scheint es ja über die InMemExe ja auch nicht zu laufen
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#25

Re: Adresse einer Funktion ohne @ ermitteln (evtl über CS:IP

  Alt 16. Dez 2007, 19:23
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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#26

Re: Adresse einer Funktion ohne @ ermitteln (evtl über CS:IP

  Alt 16. Dez 2007, 19:45
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
(warum hat dein Programm eigentlich nicht ImageBase = $004000000 ? ... nur mal so aus Neugierde)
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#27

Re: Adresse einer Funktion ohne @ ermitteln (evtl über CS:IP

  Alt 16. Dez 2007, 20:21
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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#28

Re: Adresse einer Funktion ohne @ ermitteln (evtl über CS:IP

  Alt 16. Dez 2007, 20:52
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
Bei Google suchenERROR_BAD_EXE_FORMAT

[add]
$2B or not $2B
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#29

Re: Adresse einer Funktion ohne @ ermitteln (evtl über CS:IP

  Alt 16. Dez 2007, 20:55
Hat er doch:
Zitat von Zacherl:
Es ist ein 32 Bit Vista.
  Mit Zitat antworten Zitat
Benutzerbild von OldGrumpy
OldGrumpy

Registriert seit: 28. Sep 2006
Ort: Sandhausen
941 Beiträge
 
Delphi 2006 Professional
 
#30

Re: Adresse einer Funktion ohne @ ermitteln (evtl über CS:IP

  Alt 16. Dez 2007, 21:09
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
"Tja ja, das Ausrufezeichen... Der virtuelle Spoiler des 21. Jahrhunderts, der Breitreifen für die Datenautobahn, die k3wle Sonnenbrille fürs Usenet. " (Henning Richter)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 6     123 45     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:49 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz