Functions IDs aus eienem Treiber heraus erhalten.
-
Ok folgendes Problem: Ich brauche die funktions ID aus einem Treiber heraus.
Also die Nr des eintrags in der SSDT.
Normalerweise bekommt man die von "normal exportierten" funktionen aus der ntoskrnl.exe (steht da am anfang der funktion) oder im usermode aus den exports der ntdll.dllJetzt habe ich aber z.b. ZwReadVirtualMemory, das nicht exportiert wird (aus der ntoskrnl.exe)
Nun muss ich mich ziemlich verbiegen und sowas verwenden:ZwReadVirtualMemory=KernelGetProcAddress(KernelGetModuleBase("ntdll.dll"),"ZwReadVirtualMemory");
von http://alter.org.ua/en/docs/nt_kernel/procaddr/
Gibts da ne bessere Variante?
-
^^ probier's mal mit 'MmCopyVirtualMemory' (kernel only) oder 'NtReadVirtualMemory'. irgendwas davon müsste es geben, wenn du die passenden DDK-importlibs dazulinkst. ansonsten: ab mit dir ins winapi-forum.
-
hm...
WinAPI hatte ich eher an usermode programme gedacht. Aber stimmt. Genaugenommen ist das Kernel zeug auch nur ne APIMmCopyVirtualMemory ghet nicht. mir geht es ja um den index
Dann mal ne frage (komme aus Delphi ;-)):
Wie linke/importiere ich korrekt?
In Delphi hatte man immer :function xxx external 'yyy.dll';
bei den treibern hatte ich häufiger sowas gesehn:
NTSYSAPI NTSTATUS NTAPI NtQuerySystemInformation( IN SYSTEM_INFORMATION_CLASS SystemInfoClass, OUT PVOID SystemInfoBuffer, IN ULONG SystemInfoBufferSize, OUT PULONG BytesReturned OPTIONAL );
dabei aber 2 probleme:
-
muss man wirklich für jede funktion den aufwand betreiben, sich die stubs rauszusuchen? oder gibts da schon was fertiges? habs derzeit mit ner externen header datei gelöst, in der schon vieles drin ist. aber kommt mir sehr umständlich vor
-
wie ist das mit dupletten? ich glaube die zwxxx funktionen gibts es sowohl in ntdll und ntoskrnl
woher weiß der dann, welche gemeint ist, wenn ich das nirgends angebe?
-