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 5 von 6   « Erste     345 6      
Benutzerbild von OldGrumpy
OldGrumpy

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

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

  Alt 17. Dez 2007, 16:34
Ich vermute mal, Du kannst Dir zu einem laufenden Prozess ganz einfach die gerade ablaufende Exe holen, und da schauste dann einfach rein. In psapi.dll und imagehlp.dll sind ja die wesentlichen APIs drin und auch dokumentiert. Die MS-eigenen Exen könnten zudem digital signiert sein, die zu verändern dürfte dann einen ziemlichen Aufwand bedeuten
"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
Benutzerbild von Zacherl
Zacherl

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

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

  Alt 17. Dez 2007, 16:37
Zitat von OldGrumpy:
Ich vermute mal, Du kannst Dir zu einem laufenden Prozess ganz einfach die gerade ablaufende Exe holen, und da schauste dann einfach rein. In psapi.dll und imagehlp.dll sind ja die wesentlichen APIs drin und auch dokumentiert. Die MS-eigenen Exen könnten zudem digital signiert sein, die zu verändern dürfte dann einen ziemlichen Aufwand bedeuten
Ja die laufenden Exen kann man sich holen, nur was bringt mir das? Mh siehe mein letztes Edit: Injiziere ich meine Exe in eine MS Exe, bei der ich vorher die ImageBase angeglichen habe funktioniert die Sache wunderbar.
  Mit Zitat antworten Zitat
Benutzerbild von OldGrumpy
OldGrumpy

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

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

  Alt 17. Dez 2007, 16:50
Irgendwie reden wir da wohl an einander vorbei. Du sollst nur folgenden Schritt zusätzlich implementieren:

Alt:
Setze Startadresse auf $00400000, kopiere Kram rüber und los geht's.

Neu:
Hole Startadresse aus dem Image der Exe in deren Prozess injiziert werden soll, kopiere Kram rüber und los geht's.

Wo ist denn da das Problem?

Edith sagt:
BaseAddress := VirtualAllocEx(ProcessInfo.hProcess, Pointer(NtHeaders.OptionalHeader.ImageBase), NtHeaders.OptionalHeader.SizeOfImage, MEM_RESERVE or MEM_COMMIT, PAGE_READWRITE); Da holst Du doch die Baseaddress, sorg einfach dafür, dass das die Base wird, die zur Ziel-Exe passt Im Code fehlt auch an etlichen Stellen Fehlerbehandlung, gerade Sachen wie VirtualAllocEx und VirtualProtectEx sollte man nicht in "fire and forget"-Manier benutzen sondern immer akribisch auch die Rückgabewerte checken.
"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
Benutzerbild von Zacherl
Zacherl

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

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

  Alt 17. Dez 2007, 17:29
Die Fehlerbehandlung mache ich später. Habe die Stelle jetzt so abgeändert, wobei Target das komplette Image von Notepad enthält.

Delphi-Quellcode:
BaseAddress := VirtualAllocEx(ProcessInfo.hProcess,
            Pointer(PImageNtHeaders(
            Cardinal(Target) + Cardinal(Windows.PImageDosHeader(Target).
            _lfanew))^.OptionalHeader.ImageBase),
            NtHeaders.OptionalHeader.SizeOfImage,
            MEM_RESERVE or MEM_COMMIT, PAGE_READWRITE);
Ergebniss: Notepad startet ganz normal Allerdings werden VirtualAllocEx, WriteProcessMemory und co korrekt ausgeführt. Vermutlich muss man noch irgendwas am EntryPoint feilen oder?

Sorry mein Fehler .. ne Notepad startet mit meiner MessageBox, aber wieder bekomme ich ERROR_BAD_EXE_FORMAT bei CreateThread.
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#45

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

  Alt 17. Dez 2007, 17:35
Wenn du an den Problemen mit der Image-Base arbeiten willst, kannst du ja mal debuggen. Das geht relativ einfach, wenn du den Delphi-Debugger dazuschaltest und dann an einem definierten Punkt anhältst, indem du dort einm
Delphi-Quellcode:
asm
  int 3
end;
einbaust. Dann kannst du wenigstens mal schauen, ob die Thread-Funktions-Adresse korrekt auf den Stack gepusht wird und die globalen Variablen korrekt angesprochen werden (auch wenn du sagst, dass sie funktionieren, habe ich Bauchschmerzen dabei).
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

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

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

  Alt 17. Dez 2007, 17:40
Ich kann den Prozess nicht debuggen. Weder mit Delphi noch mit OllyDbg ..
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#47

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

  Alt 17. Dez 2007, 17:41
Wie hast du es denn probiert? Mit Run->Attach to process... ?
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

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

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

  Alt 17. Dez 2007, 17:42
Genau. Es kommt nur der Fehler: "Vorgang kann nicht fortgesetzt werden" und Olly sagt Ähnliches: "Unable to attach the process notepad.exe".
  Mit Zitat antworten Zitat
Benutzerbild von OldGrumpy
OldGrumpy

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

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

  Alt 17. Dez 2007, 18:40
Da wäre dann doch wohl der Moment gekommen, einen Kernelmode-Debugger zur Hand zu nehmen
"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
Benutzerbild von Zacherl
Zacherl

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

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

  Alt 17. Dez 2007, 18:53
Mhh nach was genau soll ich den suchen? Bzw welche Funktion sollte ich debuggen? Kernelmode Debugger für Vista? Gibts da schon was?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 5 von 6   « Erste     345 6      


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 00:22 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