HyperDbg Debugger
Loading...
Searching...
No Matches
HyperEvade.c File Reference

Hyperevade function wrappers. More...

#include "pch.h"

Functions

BOOLEAN TransparentHideDebuggerWrapper (DEBUGGER_HIDE_AND_TRANSPARENT_DEBUGGER_MODE *TransparentModeRequest)
 Wrapper for hiding debugger on transparent-mode (activate transparent-mode).
BOOLEAN TransparentUnhideDebuggerWrapper (DEBUGGER_HIDE_AND_TRANSPARENT_DEBUGGER_MODE *TransparentModeRequest)
 Deactivate transparent-mode.

Detailed Description

Hyperevade function wrappers.

Author
Sina Karvandi (sina@.nosp@m.hype.nosp@m.rdbg..nosp@m.org)
jtaw5649
Version
0.14
Date
2025-06-07

Function Documentation

◆ TransparentHideDebuggerWrapper()

BOOLEAN TransparentHideDebuggerWrapper ( DEBUGGER_HIDE_AND_TRANSPARENT_DEBUGGER_MODE * TransparentModeRequest)

Wrapper for hiding debugger on transparent-mode (activate transparent-mode).

Parameters
HyperevadeCallbacks
TransparentModeRequest
Returns
BOOLEAN
26{
27 HYPEREVADE_CALLBACKS HyperevadeCallbacks = {0};
28 UINT32 EvadeMask = TransparentModeRequest->EvadeMask;
29
30 if (EvadeMask == 0)
31 {
33 }
34
35 if ((EvadeMask & ~TRANSPARENT_EVADE_MASK_ALL) != 0)
36 {
38 return FALSE;
39 }
40
41 TransparentModeRequest->EvadeMask = EvadeMask;
42
43 //
44 // *** Fill the callbacks ***
45 //
46
47 //
48 // Fill the callbacks for using hyperlog in hyperevade
49 // We use the callbacks directly to avoid two calls to the same function
50 //
51 HyperevadeCallbacks.LogCallbackPrepareAndSendMessageToQueueWrapper = g_Callbacks.LogCallbackPrepareAndSendMessageToQueueWrapper;
52 HyperevadeCallbacks.LogCallbackSendMessageToQueue = g_Callbacks.LogCallbackSendMessageToQueue;
53 HyperevadeCallbacks.LogCallbackSendBuffer = g_Callbacks.LogCallbackSendBuffer;
54 HyperevadeCallbacks.LogCallbackCheckIfBufferIsFull = g_Callbacks.LogCallbackCheckIfBufferIsFull;
55
56 //
57 // HyperTrace callback(s)
58 //
60
61 //
62 // Memory callbacks
63 //
67
68 //
69 // Common callbacks
70 //
72
73 //
74 // System call callbacks
75 //
77
78 //
79 // VMX callbacks
80 //
81 HyperevadeCallbacks.HvHandleTrapFlag = HvHandleTrapFlag;
83
84 //
85 // Call the hyperevade hide debugger function
86 //
87 if (TransparentHideDebugger(&HyperevadeCallbacks, TransparentModeRequest))
88 {
89 //
90 // Initialize the syscall callback mechanism from hypervisor after
91 // transparent-mode accepts the request as the active state.
92 //
94 {
96
99 return FALSE;
100 }
101
102 //
103 // Status is set within the transparent mode (hyperevade) module
104 //
106 return TRUE;
107 }
108 else
109 {
110 //
111 // Status is set within the transparent mode (hyperevade) module
112 //
114 return FALSE;
115 }
116}
BOOLEAN HyperTraceCallbackLbrIsSupported(UINT32 *Capacity, BOOLEAN *IsArchLbr)
routine callback to check if LBR is supported and get the LBR capacity if supported
Definition Callback.c:211
VOID EventInjectGeneralProtection()
Inject GP to the guest (Event Injection).
Definition Events.c:62
VOID HvHandleTrapFlag()
Handle the case when the trap flag is set, and we need to inject the single-step exception right afte...
Definition Hv.c:1754
BOOLEAN SyscallCallbackInitialize()
Initialize the syscall callback.
Definition SyscallCallback.c:22
BOOLEAN SyscallCallbackSetTrapFlagAfterSyscall(GUEST_REGS *Regs, UINT32 ProcessId, UINT32 ThreadId, UINT64 Context, SYSCALL_CALLBACK_CONTEXT_PARAMS *Params)
Set the trap flag in the guest after a syscall.
Definition SyscallCallback.c:226
#define TRUE
Definition BasicTypes.h:114
#define FALSE
Definition BasicTypes.h:113
unsigned int UINT32
Definition BasicTypes.h:54
#define TRANSPARENT_EVADE_MASK_DEFAULT
Definition Constants.h:689
#define TRANSPARENT_EVADE_MASK_SYSCALL_HOOK
Transparent-mode feature mask.
Definition Constants.h:683
#define TRANSPARENT_EVADE_MASK_ALL
Definition Constants.h:687
#define DEBUGGER_ERROR_UNABLE_TO_HIDE_OR_UNHIDE_DEBUGGER
error, unable to hide the debugger and enter to transparent-mode
Definition ErrorCodes.h:87
IMPORT_EXPORT_HYPEREVADE BOOLEAN TransparentUnhideDebugger()
Deactivate transparent-mode.
Definition Transparency.c:105
IMPORT_EXPORT_HYPEREVADE BOOLEAN TransparentHideDebugger(HYPEREVADE_CALLBACKS *HyperevadeCallbacks, DEBUGGER_HIDE_AND_TRANSPARENT_DEBUGGER_MODE *TransparentModeRequest)
Hide debugger on transparent-mode (activate transparent-mode).
Definition Transparency.c:24
IMPORT_EXPORT_VMM BOOLEAN CheckAccessValidityAndSafety(UINT64 TargetAddress, UINT32 Size)
Check the safety to access the memory.
Definition AddressCheck.c:318
IMPORT_EXPORT_VMM BOOLEAN MemoryMapperWriteMemorySafeOnTargetProcess(_Inout_ UINT64 Destination, _In_ PVOID Source, _In_ SIZE_T Size)
IMPORT_EXPORT_VMM BOOLEAN MemoryMapperReadMemorySafeOnTargetProcess(_In_ UINT64 VaAddressToRead, _Inout_ PVOID BufferToSaveMemory, _In_ SIZE_T SizeToRead)
struct _HYPEREVADE_CALLBACKS HYPEREVADE_CALLBACKS
Prototype of each function needed by hyperevade module.
HYPEREVADE_CALLBACKS g_Callbacks
List of callbacks.
Definition Transparency.h:23
PCHAR CommonGetProcessNameFromProcessControlBlock(PEPROCESS Eprocess)
Get process name by eprocess.
Definition Common.c:48
BOOLEAN g_CheckForFootprints
Shows whether the footprints (anti-debugging and anti-hypervisor) should be checked or not.
Definition GlobalVariables.h:131
UINT32 KernelStatus
Definition RequestStructures.h:613
UINT32 EvadeMask
Definition RequestStructures.h:617
EVENT_INJECT_GENERAL_PROTECTION EventInjectGeneralProtection
Definition HyperEvade.h:151
LOG_CALLBACK_SEND_MESSAGE_TO_QUEUE LogCallbackSendMessageToQueue
Definition HyperEvade.h:117
CHECK_ACCESS_VALIDITY_AND_SAFETY CheckAccessValidityAndSafety
Definition HyperEvade.h:133
LOG_CALLBACK_PREPARE_AND_SEND_MESSAGE_TO_QUEUE LogCallbackPrepareAndSendMessageToQueueWrapper
Definition HyperEvade.h:116
LOG_CALLBACK_CHECK_IF_BUFFER_IS_FULL LogCallbackCheckIfBufferIsFull
Definition HyperEvade.h:119
COMMON_GET_PROCESS_NAME_FROM_PROCESS_CONTROL_BLOCK CommonGetProcessNameFromProcessControlBlock
Definition HyperEvade.h:140
HYPERTRACE_LBR_IS_SUPPORTED HyperTraceLbrIsSupported
Definition HyperEvade.h:124
MEMORY_MAPPER_WRITE_MEMORY_SAFE_ON_TARGET_PROCESS MemoryMapperWriteMemorySafeOnTargetProcess
Definition HyperEvade.h:135
LOG_CALLBACK_SEND_BUFFER LogCallbackSendBuffer
Definition HyperEvade.h:118
MEMORY_MAPPER_READ_MEMORY_SAFE_ON_TARGET_PROCESS MemoryMapperReadMemorySafeOnTargetProcess
Definition HyperEvade.h:134
SYSCALL_CALLBACK_SET_TRAP_FLAG_AFTER_SYSCALL SyscallCallbackSetTrapFlagAfterSyscall
Definition HyperEvade.h:145
HV_HANDLE_TRAPFLAG HvHandleTrapFlag
Definition HyperEvade.h:150

◆ TransparentUnhideDebuggerWrapper()

BOOLEAN TransparentUnhideDebuggerWrapper ( DEBUGGER_HIDE_AND_TRANSPARENT_DEBUGGER_MODE * TransparentModeRequest)

Deactivate transparent-mode.

Parameters
TransparentModeRequest
Returns
BOOLEAN
126{
128 {
129 if (TransparentModeRequest != NULL)
130 {
132 }
133
134 return FALSE;
135 }
136
138 {
139 //
140 // Unset transparent mode for the VMM module
141 //
143
144 if (TransparentModeRequest != NULL)
145 {
146 TransparentModeRequest->KernelStatus = DEBUGGER_OPERATION_WAS_SUCCESSFUL;
147 }
148
149 return TRUE;
150 }
151 else
152 {
153 if (TransparentModeRequest != NULL)
154 {
156 }
157 return FALSE;
158 }
159}
BOOLEAN SyscallCallbackIsInitialized()
Check whether the syscall callback is initialized.
Definition SyscallCallback.c:85
BOOLEAN SyscallCallbackUninitialize()
Uninitialize the syscall callback.
Definition SyscallCallback.c:96
#define DEBUGGER_ERROR_DEBUGGER_ALREADY_UNHIDE
error, debugger is already not in the transparent-mode
Definition ErrorCodes.h:552
#define DEBUGGER_OPERATION_WAS_SUCCESSFUL
General value to indicate that the operation or request was successful.
Definition ErrorCodes.h:23