Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   API Hook (RAD2007---> XE2/3) ? (https://www.delphipraxis.net/171051-api-hook-rad2007-xe2-3-a.html)

misko72 17. Okt 2012 15:33

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 : http://www.michael-puff.de/Programmi...xecutehook.zip

Kann mir jemand helfen ?

gruß
misko

himitsu 17. Okt 2012 15:47

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:
array[..] of char
, owohl sich das Format der PE-Header ganz bestimmt nicht verändert hat)

misko72 17. Okt 2012 16:01

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.) ?

himitsu 17. Okt 2012 16:05

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:
Char
in
Delphi-Quellcode:
AnsiChar
geändert werden (sonst hatte ich in dieser Datei erstmal keine potentiellen Probleme entdecken können),
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

misko72 18. Okt 2012 13:11

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);
...

Assarbad 23. Okt 2012 22:52

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.

misko72 25. Okt 2012 11:08

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..

http://www.entwickler-ecke.de/topic_...3+_110445.html

Irgendwie übersehe ich was, komme nicht weiter mit XE :(


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:38 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