![]() |
Re: CreateToolHelp32SnapShot hooks umgehen
:shock:
Wie wäre es mit RtlQueryProcessDebugInformation()? Kleiner Tip: die Toolhelp-API von Windows 2000 aufwärts basiert auf den Native APIs, ergo muß es da was geben. |
Re: CreateToolHelp32SnapShot hooks umgehen
Man - ich bin erschlagen lol.
Wenn man mal anfangen will hinter die normalen windows funktionen zu blicken wird man erschlagen... Jedenfalls hab ich code von nico gefunden ![]() der mit zeigen sollte was du meinst. Naja tut es nicht wirklich lol - muß wohl erstmal damit spielen ums zu begreifen. In den native apis hab ich das gefunden:
Delphi-Quellcode:
Logischerweise sagt mir das nichts, vielleicht hilft mir wirklich das rumspielen mit nicos code :)
function RtlQueryProcessDebugInformation(
ProcessId : ULONG; DebugInfoClassMask : ULONG; DebugBuffer : PDEBUG_BUFFER ): NTSTATUS; stdcall; Arnulf Edit: Ach debugBuffer dürfte wohl das sein was ich suche lol - sachen gibts. Dazu hab ich nur noch eine frage was ist der Handle eines Moduls? Ist das die Base adresse? - also beginnt dort dann der dos header und alle weiteren? Danke Arnulf |
Re: CreateToolHelp32SnapShot hooks umgehen
Zitat:
Zitat:
Zitat:
|
Re: CreateToolHelp32SnapShot hooks umgehen
Zitat:
Zitat:
ich dachte wenn ich loadlibrary verwende wird immer der header mitsamt aller funktionen geladen? wo drifte ich denn jetzt wieder ab - jetzt wirds freaky :). Darauf basiert ja mein ganzer check. 1. nachschauen welche module geladen sind. 2. header einlesen und schauen ob opengl32.dll oder bestimmte funktionen importiert werden. so hab ichs bisher gelernt lol.... was kommt jetzt, daß mir meine träume zerstört? Arnulf |
Re: CreateToolHelp32SnapShot hooks umgehen
Zitat:
|
Re: CreateToolHelp32SnapShot hooks umgehen
@Olli
Was ist hier im zusammenhang mit native api gemeint? Werden hier nicht auch nur die ntdll.dll functionen importiert und dann verwendet. Vielleicht kannst du mir gerade anhand dieses beispiels erklären was bei den native apis eigentlich gemacht wird?.
Delphi-Quellcode:
Also worauf basieren diese native apis?
// Dynamic version of RtlQueryProcessDebugInformation
function RtlQueryProcessDebugInformation( ProcessId : ULONG; DebugInfoClassMask : ULONG; DebugBuffer : PDEBUG_BUFFER ): NTSTATUS; stdcall; begin GetProcedureAddress(_RtlQueryProcessDebugInformation, ntdll, 'RtlQueryProcessDebugInformation'); Result := TFNRtlQueryProcessDebugInformation(_RtlQueryProcessDebugInformation)( ProcessId, DebugInfoClassMask, DebugBuffer ); end; Die Pricedure Adresse von der originalen ntdll verwenden? - wäre wirklich interessant den zusammenhang zu verstehen. Arnulf |
Re: CreateToolHelp32SnapShot hooks umgehen
Zitat:
Delphi-Quellcode:
Die Ermittlung der Module funktioniert weiterhin problemlos (zum Beispiel mit: tasklist /M /FI "WINDOWTITLE eq foo").
program Project1;
uses Windows; const HelloWorld = 'Hello, World!'; var ModuleHandle: HMODULE; BaseAddress: Pointer absolute ModuleHandle; OldProtect: DWORD; 8begin ModuleHandle := GetModuleHandle(nil); if not VirtualProtect(BaseAddress, (Length(HelloWorld) + 1) * SizeOf(Char), PAGE_READWRITE, OldProtect) then Exit; lstrcpy(BaseAddress, HelloWorld); VirtualProtect(BaseAddress, (Length(HelloWorld) + 1) * SizeOf(Char), OldProtect, OldProtect); MessageBox(HWND(nil), BaseAddress, 'foo', MB_OK or MB_ICONINFORMATION); end. |
Re: CreateToolHelp32SnapShot hooks umgehen
Puh, ich schreibe gerade zusammen mit Marcel van Brakel einen Artikel für TDM über Native APIs, da glaube ich kaum, daß man das in wenigen Sätzen abhandeln kann *g*
Ich versuche es dennoch. Die Native APIs sind erstmal aufgeteilt in einen U-Mode und einen K-Mode-Teil. Der größte Teil der Native APIs im U-Mode wird von der NTDLL.DLL exportiert, im K-Mode ist dies NTOSKRNL.EXE. Diese APIs bilden die Grundlage für alle Subsysteme und werden teilweise auch im DDK dokumentiert - inzwischen teils sogar im PSDK. Sie haben je nach Aufgabengebiet verschiedene Präfixe (Rtl* = Runtime Library). Eine Liste der Native APIs kannst du auf unserer JEDI-Apilib-Seite finden: ![]() Du benutzt sie also bereits, auch wenn du sie nicht so nennst ;) Weitere Quellen zum Thema findest du in unserer ![]() @Nico: Komisch, bei mir gab es Probleme mit den ersten 3 Bytes, danach konnte ich eine Menge überschreiben (im DOS-Header) und dann mußte ich wieder im PE-Header aufpassen. Entweder liegt es an Unterschieden zwischen Delphi und VC, oder da ist was anderes zu beachten ... (ja, die Seitenzugriffsberechtigung habe ich angepaßt gehabt). |
Re: CreateToolHelp32SnapShot hooks umgehen
ihr das mit dem absolute ist ja mal hässlich gelöst ;P
Delphi-Quellcode:
man sollte das schon besser so durch typecasting lösen
program Project1;
uses windows; const HelloWorld = 'Hello, World!'; var ModuleHandle: HMODULE; OldProtect: DWORD; begin ModuleHandle := GetModuleHandle(nil); if not VirtualProtect(pointer(ModuleHandle), (Length(HelloWorld) + 1) * SizeOf(Char), PAGE_READWRITE, OldProtect) then Exit; lstrcpy(pointer(ModuleHandle), HelloWorld); VirtualProtect(pointer(ModuleHandle), (Length(HelloWorld) + 1) * SizeOf(Char), OldProtect, OldProtect); MessageBox(HWND(nil), pointer(ModuleHandle), 'foo', MB_OK or MB_ICONINFORMATION); end. absolut sagt aus das der gleiche sepicher benutzt wird ->
Delphi-Quellcode:
dann zeigen bla und blub auf gleiche adresse
var bla: pointer;
blub: integer absolute bla;
Delphi-Quellcode:
var bla: pointer;
begin integer(bla) //<- würde das selbe sein wie blub end; |
Re: CreateToolHelp32SnapShot hooks umgehen
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:30 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