Zitat von AsmoAlles anzeigenHier habt ihr mal nen bsp das wens man es ausbaut
grundlage f?r ein in Delphi Geschriebenes Rootkit sein kann:
exe-PE Datein haben eine sog. IAT (Import Adress Table) in der die Functionsadressen der aufzuruffenden Functionen bsp
von geladeten / zu benutzenden API's / DLL stehen.
Hir in diesem Bsp ist die MessageBoxA-Function exportiert.
Wenn man jetzt die Functionsadresse auf eine andere Adresse umbiegt bez diese ?berschreibt werden s?mptliche
Aufr?ffe dieser Function umgeleitet wobei die alte immer noch vorhanden bleibt man muss sich nur die alte merken.
PatchFunction (von Hamtaro):
Code
- procedure PatchIAT(strMod : Pchar; Alt, Neu : Pointer);varpImportDir : pImage_Import_Descriptor;size : CardinaL;Base : Cardinal;pThunk : PDWORD;beginBase := GetModuleHandle(0);pImportDir := ImageDirectoryEntryToData(Pointer(Base),True,IMAGE_DIRECTORY_ENTRY_IMPORT,size);while pImportDIr^.Name <> 0 Do begin If (lstrcmpiA(Pchar(pImportDir^.Name+ Base),strMod) = 0) then begin pThunk := PDWORD(Base + pImportDir^.FirstThunk); While pThunk^ <> 0 Do begin if DWORD(Alt) = pthunk^ Then begin pthunk^ := Cardinal(Neu); end; Inc(pThunk); end; end; Inc(PImportDir);end;end;
Eine kleine Modifikation, die die Sache aber viel praktischer macht:
Code
- procedure PatchIAT(Base : Cardinal; strMod : Pchar; Alt, Neu : Pointer);
- var
- pImportDir : pImage_Import_Descriptor;
- size : CardinaL;
- //Base : Cardinal;
- pThunk : PDWORD;
- begin
- pImportDir := ImageDirectoryEntryToData(Pointer(Base),True,IMAGE_DIRECTORY_ENTRY_IMPORT,size);
- while pImportDIr^.Name <> 0 Do begin
- If (lstrcmpiA(Pchar(pImportDir^.Name+ Base),strMod) = 0) then begin
- pThunk := PDWORD(Base + pImportDir^.FirstThunk);
- While pThunk^ <> 0 Do begin
- if DWORD(Alt) = pthunk^ Then begin
- pthunk^ := Cardinal(Neu);
- end;
- Inc(pThunk);
- end;
- end;
- Inc(PImportDir);
- end;
- end;
man will ja nicht immernur die Funktionen der Exe hooken, sondern auch der DLL-Module