-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathmass-unhook.c
36 lines (34 loc) · 1.45 KB
/
mass-unhook.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
//demo of mass IAT unhooking
#include <windows.h>
#include <stdio.h>
#include "unhook.h"
typedef NTSTATUS(NTAPI *d_NtWriteVirtualMemory)(HANDLE, PVOID, PVOID, ULONG, PULONG);
d_NtWriteVirtualMemory NtWriteVirtualMemory;
char origbytes[12] = {0};
unsigned char newbytes[12] = "\x48\xB8\x69\x99\x67\x99\x96\x96\x06\x00\x50\xC3";
NTSTATUS hookedwvm(HANDLE a, PVOID b, PVOID c, ULONG d, PULONG e){
MessageBoxA(NULL, c, "NtWriteVirtualMemory detected!!!", MB_OK);
memcpy(NtWriteVirtualMemory, origbytes, 12);
NTSTATUS out = NtWriteVirtualMemory(a, b, c, d, e);
memcpy(NtWriteVirtualMemory, newbytes, 12);
return out;
}
int main(){
init();
NtWriteVirtualMemory = (d_NtWriteVirtualMemory)GetProcAddress(GetModuleHandleA("ntdll.dll"), "NtWriteVirtualMemory");
memcpy(origbytes, NtWriteVirtualMemory, 12);
unsigned long long asdf = (unsigned long long)hookedwvm;
memcpy(newbytes+2, &asdf, 8);
DWORD old = 0;
VirtualProtect(NtWriteVirtualMemory, 12, PAGE_EXECUTE_READWRITE, &old);
memcpy(NtWriteVirtualMemory, newbytes, 12);
char demo[] = "lorem";
char tochange[] = "ipsum";
printf("%s\n", demo);
//no need to TRACE for this one, ntdlls are automatically handled for you
WriteProcessMemory(GetCurrentProcess(), demo, tochange, 5, NULL);
WriteProcessMemory(GetCurrentProcess(), demo, tochange, 5, NULL);
WriteProcessMemory(GetCurrentProcess(), demo, tochange, 5, NULL);
printf("%s\n", demo);
return 0;
}