![]() |
API Hook (RAD2007---> XE2/3) ?
Hallo,
Kriege nicht richtig übersetzt die API Hook`s , unter RAD2007 geht alles nur bei XE3 , funktioniert nicht richtig hier kann man einen beispiel finden : ![]() Kann mir jemand helfen ? gruß misko |
AW: API Hook (RAD2007---> XE2/3) ?
Das Ding ist einfach nicht für Unicode ausgelegt.
Seit D2009 wird der Code so also nicht mehr laufen. z.B. sind da Records falsch deklariert (
Delphi-Quellcode:
, owohl sich das Format der PE-Header ganz bestimmt nicht verändert hat)
array[..] of char
|
AW: API Hook (RAD2007---> XE2/3) ?
Bei diesem Projekt geht nur nicht CreateProcessW teil, so klar ist das da was verschoben ist, nur die frage ist was , wo ..
Falls es nicht "konvertierbar" ist , bin ich froh für jeden vorschlag wie ich es lösen könnte (keine komerzielle hooks, wo ich noch signing zertifikat haben muss usw.) ? |
AW: API Hook (RAD2007---> XE2/3) ?
Konvertierbar ist es schon ... es muß nur jemand die Zeit/Lust haben, den Code mal durchzugehn.
z.B. müssen in PEStuff alle
Delphi-Quellcode:
in
Char
Delphi-Quellcode:
geändert werden (sonst hatte ich in dieser Datei erstmal keine potentiellen Probleme entdecken können),
AnsiChar
aber ob da noch mehr ist (in den anderen Dateien), kann ich auf die Schnelle nicht erkennen. Und wenn, dann ist der Code erstmal nur für Win32 nutzbar. - OSX-Dateien haben natürlich andere Strukturen und zum Ausführen klappt das mit den APIs nicht - ob/wie sich Win64-EXEn unterscheiden, weiß ich jetzt nicht, aber der Programmcode ist vermutlich auch an einigen Stellen nicht ausgelegt, um damit kompiliert zu werden |
AW: API Hook (RAD2007---> XE2/3) ?
32 Bit umsetzung habe ich fertig (War nur die umstellung der Daten-Typen), jetzt nur die 64 bit macht mir problem auf einer stelle ...
Hat einer ahnung warum ?
Code:
HookUnit.pas
function PatchAddress(OldFunc, NewFunc: Pointer): integer; var BeenDone: TList; function PatchAddressInModule(hModule: THandle; OldFunc, NewFunc: Pointer): integer; var Dos: PImageDosHeader; NT: PImageNTHeaders; ImportDesc: PImage_Import_Entry; rva: DWORD; Func: PPointer; DLL: LPCSTR; f: Pointer; written: Size_T; begin Result := 0; Dos := Pointer(hModule); if BeenDone.IndexOf(Dos) >= 0 then Exit; BeenDone.Add(Dos); OldFunc := FinalFunctionAddress(OldFunc); if IsBadReadPtr(Dos, SizeOf(TImageDosHeader)) then Exit; if Dos.e_magic <> IMAGE_DOS_SIGNATURE then Exit; NT := Pointer(integer(Dos) + dos._lfanew); // if IsBadReadPtr(NT,SizeOf(TImageNtHeaders)) then exit; RVA := NT^.OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress; {------------------------------------------------------------------------} { unter 64 bit NVA ist immer 0 ! Und hier kommt die function nicht weiter} {------------------------------------------------------------------------} if RVA = 0 then Exit; { Hier endet die funktion immer } {------------------------------------------------------------------------} ImportDesc := Pointer(integer(Dos) + RVA); ... |
AW: API Hook (RAD2007---> XE2/3) ?
Ich weiß mangels 64bit-fähiger Version von Delphi nicht wie die deklariert sind, aber in winnt.h finden sich verschiedene Strukturen für 32 und 64bittige Header ...
IMAGE_NT_HEADERS64 und IMAGE_NT_HEADERS ... das sind (logischerweise) verschiedene Dinge ... analoges gilt für IMAGE_OPTIONAL_HEADER64 und IMAGE_OPTIONAL_HEADER32 und so weiter. Kurzum, du liest vermutlich an der falschen Stelle des Headers. |
AW: API Hook (RAD2007---> XE2/3) ?
Danke für deine Antwort,
Habe dies mit Headern auch gemacht trotzdem beim Patchen lauft da was schief, habe sogar bei entwickler-ecke ein anderen Beitrag gemacht wo ich keine Header Brauche.. ![]() Irgendwie übersehe ich was, komme nicht weiter mit XE :( |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:14 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