AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Probleme beim Patchen der IAT

Ein Thema von CorVu5 · begonnen am 14. Mär 2008 · letzter Beitrag vom 18. Mär 2008
 
CorVu5

Registriert seit: 31. Dez 2007
26 Beiträge
 
Delphi 7 Professional
 
#1

Probleme beim Patchen der IAT

  Alt 14. Mär 2008, 15:57
Hallo Leute und Hallo Delphi-Praxis,
ich habe folgendes Problem. Und zwar versuche ich grad eine Funktion zu schreiben die die IAT patcht und Funktionsaufrufe sozusagen "umleiten" kann.
Ich stoße dabei auf das Problem ,dass ich zwar die korrekte Adresse ausgegeben bekomme, sagt jedenfalls PEview, @Funktion oder GetProcAddress(GetModuleHAndle('user32.dll'),'Funktion') aber andere Adressen ausgeben.
Möglicherweise liegt ja ein ganz simpler Denkfehler meinerseits vor.


Mein Code bis jetzt:
Delphi-Quellcode:
type
  PImageImportDescriptor = ^TImageImportDescriptor;
  TImageImportDescriptor = packed record
     HintNameTableOffset: DWORD; // RVA to original unbound IAT, aka Characteristics
                                    // 0 for terminating null import descriptor
                                    // PImageThunkData
     TimeDateStamp : DWORD; // 0 if not bound,
                                    // -1 if bound, and real date\time stamp
                                    // in IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT (new BIND)
                                    // O.W. date/time stamp of DLL bound to (Old BIND)
      ForwarderChain : DWORD; // -1 if no forwarders
      NameOffset : DWORD; // RVA to name of the module we're importing from
      IATOffset : DWORD; // RVA to IAT (if bound this IAT has actual addresses)
                                    // PImageThunkData
  end;

  PImageImportByName = ^TImageImportByName;
  TImageImportByName = packed record
    Hint : WORD;
    Name : array[0..255] of Char;
  end;

  PImageThunkData = ^TImageThunkData;
  TImageThunkData = packed record
    case integer of
      0 : (ForwarderString: PBYTE);
      1 : (FunctionPtr : PDWORD);
      2 : (Ordinal : DWORD);
      3 : (AddressOfData : PImageImportByName);
  end;

Delphi-Quellcode:
procedure PatchIAT(Dll : Pchar; OldFunction : Pointer; newFunc : Pointer);
var
image : LoadedImage;
pImageImportDir : PIMAGEIMPORTDESCRIPTOR;
last : PImageSectionHEader;
size : Cardinal;
dllname : Pchar;
pThunk : PImageThunkData;
lTrue : Boolean;
written : Cardinal;
begin
MapAndLoad(Pchar(ParamStr(0)),nil,@image,True,True);
pImageImportDir := ImageDirectoryEntryToData(
                    image.MappedAddress
                    ,False
                    ,IMAGE_DIRECTORY_ENTRY_IMPORT
                    ,size);

while pImageImportDir.NameOffset <> 0 Do begin
  dllname := ImageRVAToVA(image.FileHeader,image.MappedAddress,pImageImportDir.NameOffset,last);
  If (lstrcmpiA(dllname , Dll) = 0) Then break;
  Inc(pImageImportDir);
end;
{Showmessage(dllname);  }
pThunk := ImageRVAToVA(image.FileHeader,image.MappedAddress,pImageImportDir.IATOffset,last);
While pThunk^.FunctionPtr <> nil Do begin
  Showmessage(FloatTostr(Cardinal(pThunk^.FunctionPtr)));
  Showmessage(IntToStr(Integer(Oldfunction)));
  ltrue := (pThunk^.FunctionPtr = OldFunction );
  If lTrue then begin
    Showmessage('FOUND2');
    {VirtualProtectEx(GetCurrentProcess,pThunk.FunctionPtr,4,PAGE_EXECUTE_READWRITE,written);
    WriteProcessMemory(GetCurrentProcess, pThunk.FunctionPtr, NewFunc, sizeof(NewFunc), Written);
    }
break;
  end;
Inc(Pthunk);
end;
UnmapAndLoad(@image);
end;
ALs Beispielaufruf: PatchIAT('user32.dll',GetProcAddress(GetModuleHAndle('user32.dll'),'MessageBoxA'),@newMessageBoxA);
Danke Im Voraus
CorVu5
Das Leben ist wie ein Strand...und dann stirbt man.
  Mit Zitat antworten Zitat
 


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 03:28 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