Hi Leute
direkte Syscalls werden ja oft dazu verwendet um Hooks zu umgehen. Habe mal einen Beispiel Code erstellt:
Mein ASM Code für den Syscall sieht so aus (NASM):
global PrivSyscall global sysno section .code PrivSyscall: mov r10, rcx mov eax, [sysno] syscall ret section .data sysno: dw 0
Eigentlich habe ich das nur aus der Ntdll kopiert.
Aufgerufen wird das dann in C++ folgendermaßen:
extern "C" NTSTATUS NTAPI PrivSyscall(...); extern "C" DWORD sysno; int main(){ sysno = GetSyscallNumber("NtDeleteKey"); //GetSyscall extrahiert die Syscall Nummer aus der ntdll int status = PrivSyscall(hkey); sysno = GetSyscallNumber("NtFlushKey"); PrivSyscall(hkey); }
Fürs Kompilieren müsst ihr x64 wählen, bei nasm "nasm -f win64 filename.asm
Die obj File dann im VisualStudio einfach einfügen.
Ich habe leider keinen einfacheren Weg gefunden als die Syscall Nummer per globaler Variable zu übergeben. Falls euch was besseres einfällt sagt es mir bitte
Für die GetSyscallNumber Funktion könnt ihr hier schauen:
Die Funktion musste ich allerdings ein wenig modifizieren - ob das an Windows 10 liegt weiß ich nicht (Schaut euch einfach die Ntdll genauer an in IDA). Vielleicht hat Microsoft da was geändert.
Ich hoffe ihr könnt was mit dem Code anfangen.
Bearbeitet von gr33d, 28 October 2017 - 23:44 Uhr.