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)
59#define IMAGE_DOS_SIGNATURE 0x5A4D
60#define IMAGE_OS2_SIGNATURE 0x454E
61#define IMAGE_OS2_SIGNATURE_LE 0x454C
62#define IMAGE_VXD_SIGNATURE 0x454C
63#define IMAGE_NT_SIGNATURE 0x00004550
85PVOID(*ExAllocatePoolWithTagOrig)
95#define MAX_EXEC_TRAMPOLINE_SIZE 100
122 PVOID HookingDetails,
220 VMX_EXIT_QUALIFICATION_EPT_VIOLATION ViolationQualification,
221 SIZE_T PhysicalAddress,
223 BOOLEAN * IgnoreReadOrWriteOrExec,
237 SIZE_T PhysicalAddress,
238 UINT64 OriginalEntry);
370 PVOID PhysicalAddress,
385 PVOID PhysicalAddress,
400 PVOID PhysicalAddress,
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.
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