HyperDbg Debugger
Loading...
Searching...
No Matches
Hooks.h
Go to the documentation of this file.
1
12#pragma once
13
15// Structures //
17
29
31// Syscall Hook //
33
42
47#define IS_SYSRET_INSTRUCTION(Code) \
48 (*((PUINT8)(Code) + 0) == 0x48 && \
49 *((PUINT8)(Code) + 1) == 0x0F && \
50 *((PUINT8)(Code) + 2) == 0x07)
51#define IS_SYSCALL_INSTRUCTION(Code) \
52 (*((PUINT8)(Code) + 0) == 0x0F && \
53 *((PUINT8)(Code) + 1) == 0x05)
54
59#define IMAGE_DOS_SIGNATURE 0x5A4D // MZ
60#define IMAGE_OS2_SIGNATURE 0x454E // NE
61#define IMAGE_OS2_SIGNATURE_LE 0x454C // LE
62#define IMAGE_VXD_SIGNATURE 0x454C // LE
63#define IMAGE_NT_SIGNATURE 0x00004550 // PE00
64
66// Syscall Hooks Functions //
68
69VOID
70SyscallHookConfigureEFER(VIRTUAL_MACHINE_STATE * VCpu, BOOLEAN EnableEFERSyscallHook);
71
74
77
80
82// Hidden Hooks Test //
84
85PVOID(*ExAllocatePoolWithTagOrig)
86(
87 POOL_TYPE PoolType,
90
95#define MAX_EXEC_TRAMPOLINE_SIZE 100
96
97// ----------------------------------------------------------------------
98
108EptHookPerformPageHook(VIRTUAL_MACHINE_STATE * VCpu, PVOID TargetAddress, CR3_TYPE ProcessCr3);
109
122 PVOID HookingDetails,
123 CR3_TYPE ProcessCr3,
124 UINT32 PageHookMask);
125
135EptHook(PVOID TargetAddress, UINT32 ProcessId);
136
145EptHookFromVmxRoot(PVOID TargetAddress);
146
159 PVOID TargetAddress,
160 PVOID HookFunction,
161 UINT32 ProcessId);
162
176 UINT32 ProcessId);
177
189 PVOID TargetAddress,
190 PVOID HookFunction);
191
203 EPT_HOOKS_ADDRESS_DETAILS_FOR_MEMORY_MONITOR * MemoryAddressDetails);
204
219 EPT_HOOKED_PAGE_DETAIL * HookedEntryDetails,
220 VMX_EXIT_QUALIFICATION_EPT_VIOLATION ViolationQualification,
221 SIZE_T PhysicalAddress,
222 EPT_HOOKS_CONTEXT * LastContext,
223 BOOLEAN * IgnoreReadOrWriteOrExec,
224 BOOLEAN * IsExecViolation);
225
237 SIZE_T PhysicalAddress,
238 UINT64 OriginalEntry);
239
247VOID
249
255VOID
257
266EptHookUnHookAllByHookingTag(UINT64 HookingTag);
267
278EptHookUnHookSingleAddress(UINT64 VirtualAddress,
279 UINT64 PhysAddress,
280 UINT32 ProcessId);
281
291 EPT_SINGLE_HOOK_UNHOOKING_DETAILS * TargetUnhookingDetails);
292
304EptHookUnHookSingleAddressFromVmxRoot(UINT64 VirtualAddress,
305 UINT64 PhysAddress,
306 EPT_SINGLE_HOOK_UNHOOKING_DETAILS * TargetUnhookingDetails);
307
315UINT32
317
326
334PVOID
336
345VOID
347
355VOID
357
370 PVOID PhysicalAddress,
371 BOOLEAN IsUnset);
372
385 PVOID PhysicalAddress,
386 BOOLEAN IsUnset);
387
400 PVOID PhysicalAddress,
401 BOOLEAN IsUnset);
402
409VOID
VOID SyscallHookConfigureEFER(VIRTUAL_MACHINE_STATE *VCpu, BOOLEAN EnableEFERSyscallHook)
This function enables or disables EFER syscall hoo.
Definition EferHook.c:31
BOOLEAN EptHookRestoreSingleHookToOriginalEntry(VIRTUAL_MACHINE_STATE *VCpu, SIZE_T PhysicalAddress, UINT64 OriginalEntry)
Remove a special hook from the hooked pages lists.
Definition EptHook.c:671
BOOLEAN EptHookModifyPageWriteState(VIRTUAL_MACHINE_STATE *VCpu, PVOID PhysicalAddress, BOOLEAN IsUnset)
Change PML EPT state for write @detail should be called from VMX-root.
Definition EptHook.c:2702
BOOLEAN SyscallHookEmulateSYSCALL(_Inout_ VIRTUAL_MACHINE_STATE *VCpu)
VOID EptHookRestoreAllHooksToOriginalEntry(VIRTUAL_MACHINE_STATE *VCpu)
Remove all hooks from the hooked pages lists (Should be called in vmx-root).
Definition EptHook.c:719
struct _HIDDEN_HOOKS_DETOUR_DETAILS * PHIDDEN_HOOKS_DETOUR_DETAILS
BOOLEAN EptHookFromVmxRoot(PVOID TargetAddress)
This function invokes a direct VMCALL to setup the hook.
Definition EptHook.c:646
BOOLEAN EptHookModifyPageReadState(VIRTUAL_MACHINE_STATE *VCpu, PVOID PhysicalAddress, BOOLEAN IsUnset)
Change PML EPT state for read @detail should be called from VMX-root.
Definition EptHook.c:2644
VOID EptHookHandleMonitorTrapFlag(VIRTUAL_MACHINE_STATE *VCpu)
Handle vm-exits for Monitor Trap Flag to restore previous state.
Definition EptHook.c:1983
BOOLEAN EptHookUnHookSingleAddress(UINT64 VirtualAddress, UINT64 PhysAddress, UINT32 ProcessId)
Remove single hook from the hooked pages list and invalidate TLB From VMX non-root mode.
Definition EptHook.c:2390
BOOLEAN EptHookInlineHook(VIRTUAL_MACHINE_STATE *VCpu, PVOID TargetAddress, PVOID HookFunction, UINT32 ProcessId)
Hook in VMX non-root mode (hidden detours).
Definition EptHook.c:1562
PVOID EptHook2GeneralDetourEventHandler(PGUEST_REGS Regs, PVOID CalledFrom)
routines to generally handle breakpoint hit for detour
Definition EptHook.c:2503
BOOLEAN EptHookMonitorFromVmxRoot(VIRTUAL_MACHINE_STATE *VCpu, EPT_HOOKS_ADDRESS_DETAILS_FOR_MEMORY_MONITOR *MemoryAddressDetails)
This function applies EPT monitor hooks to the target EPT table.
Definition EptHook.c:1671
BOOLEAN EptHookPerformPageHook(VIRTUAL_MACHINE_STATE *VCpu, PVOID TargetAddress, CR3_TYPE ProcessCr3)
Hook in VMX Root Mode with hidden breakpoints (A pre-allocated buffer should be available).
Definition EptHook.c:480
BOOLEAN EptHookHandleHookedPage(VIRTUAL_MACHINE_STATE *VCpu, EPT_HOOKED_PAGE_DETAIL *HookedEntryDetails, VMX_EXIT_QUALIFICATION_EPT_VIOLATION ViolationQualification, SIZE_T PhysicalAddress, EPT_HOOKS_CONTEXT *LastContext, BOOLEAN *IgnoreReadOrWriteOrExec, BOOLEAN *IsExecViolation)
Handle hooked pages in Vmx-root mode.
Definition EptHook.c:1706
BOOLEAN EptHookUnHookAllByHookingTag(UINT64 HookingTag)
Remove all hooks from the hooked pages by the given hooking tag.
Definition EptHook.c:2316
BOOLEAN EptHookModifyInstructionFetchState(VIRTUAL_MACHINE_STATE *VCpu, PVOID PhysicalAddress, BOOLEAN IsUnset)
Change PML EPT state for execution (execute) @detail should be called from VMX-root.
Definition EptHook.c:2586
BOOLEAN SyscallHookHandleUD(_Inout_ VIRTUAL_MACHINE_STATE *VCpu)
BOOLEAN EptHookInlineHookFromVmxRoot(VIRTUAL_MACHINE_STATE *VCpu, PVOID TargetAddress, PVOID HookFunction)
Hook in VMX root-mode (hidden detours).
Definition EptHook.c:1633
VOID EptHookReservePreallocatedPoolsForEptHooks(UINT32 Count)
Allocate pre-allocated pools for EPT hooks.
Definition EptHook.c:70
POOL_TYPE PoolType
Definition Hooks.h:87
POOL_TYPE SIZE_T NumberOfBytes
Definition Hooks.h:88
BOOLEAN SyscallHookEmulateSYSRET(_Inout_ VIRTUAL_MACHINE_STATE *VCpu)
BOOLEAN EptHookUnHookSingleAddressFromVmxRoot(UINT64 VirtualAddress, UINT64 PhysAddress, EPT_SINGLE_HOOK_UNHOOKING_DETAILS *TargetUnhookingDetails)
Remove single hook from the hooked pages list and invalidate TLB From VMX root-mode.
Definition EptHook.c:2424
BOOLEAN EptHookPerformPageHookMonitorAndInlineHook(VIRTUAL_MACHINE_STATE *VCpu, PVOID HookingDetails, CR3_TYPE ProcessCr3, UINT32 PageHookMask)
Hook in VMX Root Mode with hidden detours and monitor (A pre-allocated buffer should be available).
Definition EptHook.c:995
POOL_TYPE SIZE_T ULONG Tag
Definition Hooks.h:89
VOID EptHookAllocateExtraHookingPagesForMemoryMonitorsAndExecEptHooks(UINT32 Count)
Allocate (reserve) extra pages for storing details of page hooks for memory monitor and regular hidde...
Definition EptHook.c:110
BOOLEAN EptHook(PVOID TargetAddress, UINT32 ProcessId)
Hook in VMX non-root Mode (hidden breakpoint).
Definition EptHook.c:620
VOID EptHookUnHookAll()
Remove all hooks from the hooked pages lists.
Definition EptHook.c:2451
BOOLEAN EptHookRemoveEntryAndFreePoolFromEptHook2sDetourList(UINT64 Address)
Remove an entry from g_EptHook2sDetourListHead.
Definition EptHook.c:1846
BOOLEAN EptHookMonitorHook(VIRTUAL_MACHINE_STATE *VCpu, EPT_HOOKS_ADDRESS_DETAILS_FOR_MEMORY_MONITOR *HookingDetails, UINT32 ProcessId)
This function applies monitor hooks to the target EPT table.
Definition EptHook.c:1602
UINT32 EptHookGetCountOfEpthooks(BOOLEAN IsEptHook2)
get the length of active EPT hooks (!epthook and !epthook2)
Definition EptHook.c:1885
BOOLEAN EptHookUnHookSingleHookByHookingTagFromVmxRoot(UINT64 HookingTag, EPT_SINGLE_HOOK_UNHOOKING_DETAILS *TargetUnhookingDetails)
Remove single hook from the hooked pages by the given hooking tag.
Definition EptHook.c:2359
struct _HIDDEN_HOOKS_DETOUR_DETAILS HIDDEN_HOOKS_DETOUR_DETAILS
Details of detours style EPT hooks.
UCHAR BOOLEAN
Definition BasicTypes.h:35
void * PVOID
Definition BasicTypes.h:56
struct GUEST_REGS * PGUEST_REGS
struct _CR3_TYPE CR3_TYPE
CR3 Structure.
unsigned int UINT32
Definition BasicTypes.h:54
unsigned long ULONG
Definition BasicTypes.h:31
struct _EPT_SINGLE_HOOK_UNHOOKING_DETAILS EPT_SINGLE_HOOK_UNHOOKING_DETAILS
Details of unhooking single EPT hooks.
struct _EPT_HOOKS_CONTEXT EPT_HOOKS_CONTEXT
Temporary $context used in some EPT hook commands.
struct _EPT_HOOKS_ADDRESS_DETAILS_FOR_MEMORY_MONITOR EPT_HOOKS_ADDRESS_DETAILS_FOR_MEMORY_MONITOR
Setting details for EPT Hooks (!monitor).
struct _EPT_HOOKED_PAGE_DETAIL EPT_HOOKED_PAGE_DETAIL
Structure to save the state of each hooked pages.
struct _VIRTUAL_MACHINE_STATE VIRTUAL_MACHINE_STATE
The status of each core after and before VMX.
Details of detours style EPT hooks.
Definition Hooks.h:23
PVOID HookedFunctionAddress
Definition Hooks.h:25
PVOID ReturnAddress
Definition Hooks.h:26
LIST_ENTRY OtherHooksList
Definition Hooks.h:24