Als wenn ich nichts dafür hätte
Delphi-Quellcode:
var oldRtlEqualUnicodeString: function(a,b: pointer; c: boolean): boolean; stdcall;
nextRtlEqualUnicodeString: function(a,b: pointer; c: boolean): boolean; stdcall;
forcename: string;
function myRtlEqualUnicodeString(a,b: pointer; c: boolean): boolean; stdcall;
begin
if pos(forcename,uppercase(pwidechar(pointer(cardinal(b)+4)^))) > 0 then
result := false else
result := nextRtlEqualUnicodeString(a,b,c);
end;
function ForceLoadLibraryNtA(dllname: pchar): cardinal; stdcall;
begin
@oldRtlEqualUnicodeString := GetProcAddress(GetModuleHandle('ntdll.dll'),'RtlEqualUnicodeString');
if (@oldRtlEqualUnicodeString <> nil) then
begin
uallTableHook.HookAPIJMP(@oldRtlEqualUnicodeString,@myRtlEqualUnicodeString,@nextRtlEqualUnicodeString);
forcename := uppercase(dllname);
result := LoadLibraryA(dllname);
uallTableHook.UnhookAPIJMP(@nextRtlEqualUnicodeString);
end else
Result := LoadLibraryA(dllname);
end;
mit ForceLoadLibraryNtA('ntdll.dll') kannste die ntdl ein 2. mal laden und dann davon GetProcaddress(x,'NtQuerySystenbob') machen und die funtkion dann benutzen, die ist dann garantiert nicht gehookt