1
1
#include < Windows.h>
2
2
#include < iostream>
3
3
4
+ #define SLEEP_TIME 1000
5
+
4
6
typedef void (__stdcall* TrueSleep)(DWORD);
5
7
6
8
TrueSleep oSleep;
@@ -15,9 +17,9 @@ void __stdcall MySleep(DWORD dwMilliseconds)
15
17
16
18
bool HookIAT (const char * module_name, const char * func_name, void * new_func, void ** old_func)
17
19
{
18
- DWORD module_base = (DWORD )GetModuleHandleA (NULL );
20
+ uintptr_t module_base = (uintptr_t )GetModuleHandleA (NULL );
19
21
IMAGE_DOS_HEADER* dos_header = (IMAGE_DOS_HEADER*)module_base;
20
- IMAGE_NT_HEADERS32 * pe_header = (IMAGE_NT_HEADERS32 *)(module_base + dos_header->e_lfanew );
22
+ IMAGE_NT_HEADERS * pe_header = (IMAGE_NT_HEADERS *)(module_base + dos_header->e_lfanew );
21
23
22
24
if (pe_header->Signature != IMAGE_NT_SIGNATURE)
23
25
return false ;
@@ -35,8 +37,8 @@ bool HookIAT(const char* module_name, const char* func_name, void* new_func, voi
35
37
if (!import_descriptor[i].FirstThunk || !import_descriptor[i].OriginalFirstThunk )
36
38
return false ;
37
39
38
- IMAGE_THUNK_DATA32 * thunk = (IMAGE_THUNK_DATA32 *)(module_base + import_descriptor[i].FirstThunk );
39
- IMAGE_THUNK_DATA32 * orig_thunk = (IMAGE_THUNK_DATA32 *)(module_base + import_descriptor[i].OriginalFirstThunk );
40
+ IMAGE_THUNK_DATA * thunk = (IMAGE_THUNK_DATA *)(module_base + import_descriptor[i].FirstThunk );
41
+ IMAGE_THUNK_DATA * orig_thunk = (IMAGE_THUNK_DATA *)(module_base + import_descriptor[i].OriginalFirstThunk );
40
42
41
43
for (; orig_thunk->u1 .Function != 0 ; ++thunk, ++orig_thunk)
42
44
{
@@ -56,7 +58,7 @@ bool HookIAT(const char* module_name, const char* func_name, void* new_func, voi
56
58
return false ;
57
59
58
60
*old_func = (void *)thunk->u1 .Function ;
59
- thunk->u1 .Function = (DWORD )new_func;
61
+ thunk->u1 .Function = (uintptr_t )new_func;
60
62
61
63
if (VirtualProtect (mbi.BaseAddress , mbi.RegionSize , mbi.Protect , &junk))
62
64
return true ;
@@ -72,6 +74,8 @@ int main()
72
74
else
73
75
{
74
76
printf (" [+] old_addr = 0x%p, new_addr = 0x%p\n " , oSleep, &MySleep);
75
- Sleep (1000 );
77
+ Sleep (SLEEP_TIME );
76
78
}
79
+
80
+ system (" pause" );
77
81
}
0 commit comments