Skip to content

Commit ee22a4b

Browse files
authored
Merge pull request #17 from 8damon/dev
Usermode Sensor Overhaul, C++ port & bug fixes #11 #14 #15 #16
2 parents 7826c19 + abd2722 commit ee22a4b

154 files changed

Lines changed: 26824 additions & 5404 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.gitignore

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,9 @@ test-results/
3030
*.tmp
3131
*.cache
3232

33+
./interface
34+
/interface
35+
3336
./$документы
3437
$документы
3538

@@ -79,3 +82,5 @@ FUTURE.md
7982
/SVR
8083
./SVR
8184

85+
86+
SimpleVisor-master.zip

ABI/Blackbird_ipc.h

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,7 @@ typedef enum _BLACKBIRD_IPC_COMMAND
3333
BlackbirdIpcCommandNotifyHookReady = 13,
3434
BlackbirdIpcCommandControlProcessExecution = 14,
3535
BlackbirdIpcCommandSetRuntimeConfig = 15,
36-
BlackbirdIpcCommandGetRuntimeConfig = 16,
37-
BlackbirdIpcCommandMarkInterfaceReady = 17
36+
BlackbirdIpcCommandGetRuntimeConfig = 16
3837
} BLACKBIRD_IPC_COMMAND;
3938

4039
typedef struct _BLACKBIRD_IPC_HANDSHAKE_REQUEST
@@ -81,7 +80,8 @@ typedef enum _BLACKBIRD_IPC_HOOK_EVENT_KIND
8180
BlackbirdIpcHookEventKi = 3,
8281
BlackbirdIpcHookEventExceptionLowNoise = 4,
8382
BlackbirdIpcHookEventExceptionHighPriv = 5,
84-
BlackbirdIpcHookEventIntegrity = 6
83+
BlackbirdIpcHookEventIntegrity = 6,
84+
BlackbirdIpcHookEventModule = 7
8585
} BLACKBIRD_IPC_HOOK_EVENT_KIND;
8686

8787
#define BLACKBIRD_IPC_MAX_HOOK_API_NAME 64
@@ -119,15 +119,25 @@ typedef enum _BLACKBIRD_IPC_USER_HOOK_TARGET_MODE
119119
} BLACKBIRD_IPC_USER_HOOK_TARGET_MODE;
120120

121121
#define BLACKBIRD_IPC_USER_HOOK_FLAG_LAUNCH_EARLYBIRD_APC 0x00000001u
122+
#define BLACKBIRD_IPC_USER_HOOK_FLAG_DEFER_LAUNCH_GATE_RELEASE 0x00000002u
122123
#define BLACKBIRD_IPC_MAX_LAUNCH_ENVIRONMENT_CHARS 4096
123124

124125
#define BLACKBIRD_IPC_HOOK_READY_FLAG_IPC_CONNECTED 0x00000001u
125126
#define BLACKBIRD_IPC_HOOK_READY_FLAG_WINSOCK 0x00000002u
126127
#define BLACKBIRD_IPC_HOOK_READY_FLAG_NT 0x00000004u
127128
#define BLACKBIRD_IPC_HOOK_READY_FLAG_KI 0x00000008u
129+
#define BLACKBIRD_IPC_HOOK_READY_FLAG_MODULE 0x00000010u
128130
#define BLACKBIRD_IPC_HOOK_READY_REQUIRED_MASK \
129131
(BLACKBIRD_IPC_HOOK_READY_FLAG_IPC_CONNECTED | BLACKBIRD_IPC_HOOK_READY_FLAG_WINSOCK | \
130-
BLACKBIRD_IPC_HOOK_READY_FLAG_NT | BLACKBIRD_IPC_HOOK_READY_FLAG_KI)
132+
BLACKBIRD_IPC_HOOK_READY_FLAG_NT | BLACKBIRD_IPC_HOOK_READY_FLAG_KI | BLACKBIRD_IPC_HOOK_READY_FLAG_MODULE)
133+
134+
// IntegrityLevel values for BLACKBIRD_IPC_SET_USER_HOOK_TARGET_REQUEST
135+
#define BLACKBIRD_LAUNCH_INTEGRITY_DEFAULT 0u
136+
#define BLACKBIRD_LAUNCH_INTEGRITY_UNTRUSTED 1u
137+
#define BLACKBIRD_LAUNCH_INTEGRITY_LOW 2u
138+
#define BLACKBIRD_LAUNCH_INTEGRITY_MEDIUM 3u
139+
#define BLACKBIRD_LAUNCH_INTEGRITY_HIGH 4u
140+
#define BLACKBIRD_LAUNCH_INTEGRITY_SYSTEM 5u
131141

132142
typedef struct _BLACKBIRD_IPC_SET_USER_HOOK_TARGET_REQUEST
133143
{
@@ -137,7 +147,7 @@ typedef struct _BLACKBIRD_IPC_SET_USER_HOOK_TARGET_REQUEST
137147
UINT32 ParentProcessId;
138148
UINT32 PriorityClass;
139149
UINT32 InheritHandles;
140-
UINT32 Reserved;
150+
UINT32 IntegrityLevel;
141151
UINT64 AffinityMask;
142152
WCHAR ImagePath[BLACKBIRD_MAX_IMAGE_PATH_CHARS];
143153
WCHAR HookDllPath[BLACKBIRD_MAX_IMAGE_PATH_CHARS];
@@ -368,7 +378,6 @@ typedef union _BLACKBIRD_IPC_PAYLOAD
368378
BLACKBIRD_CONTROL_EXECUTION_REQUEST ControlProcessExecutionRequest;
369379
BLACKBIRD_SET_RUNTIME_CONFIG_REQUEST SetRuntimeConfigRequest;
370380
BLACKBIRD_RUNTIME_CONFIG_RESPONSE RuntimeConfigResponse;
371-
BLACKBIRD_MARK_INTERFACE_READY_REQUEST MarkInterfaceReadyRequest;
372381
} BLACKBIRD_IPC_PAYLOAD, *PBLACKBIRD_IPC_PAYLOAD;
373382

374383
typedef struct _BLACKBIRD_IPC_PACKET

ABI/blackbird_ioctl.h

Lines changed: 32 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
#define IOCTL_BLACKBIRD_CONTROL_EXECUTION CTL_CODE(FILE_DEVICE_BLACKBIRD, 0x80A, METHOD_BUFFERED, FILE_WRITE_DATA)
2222
#define IOCTL_BLACKBIRD_SET_RUNTIME_CONFIG CTL_CODE(FILE_DEVICE_BLACKBIRD, 0x80B, METHOD_BUFFERED, FILE_WRITE_DATA)
2323
#define IOCTL_BLACKBIRD_GET_RUNTIME_CONFIG CTL_CODE(FILE_DEVICE_BLACKBIRD, 0x80C, METHOD_BUFFERED, FILE_READ_DATA)
24-
#define IOCTL_BLACKBIRD_MARK_INTERFACE_READY CTL_CODE(FILE_DEVICE_BLACKBIRD, 0x80D, METHOD_BUFFERED, FILE_WRITE_DATA)
2524
#define IOCTL_BLACKBIRD_MARK_CONTROLLER_READY CTL_CODE(FILE_DEVICE_BLACKBIRD, 0x80E, METHOD_BUFFERED, FILE_WRITE_DATA)
2625

2726
#define BLACKBIRD_STREAM_HANDLE 0x00000001
@@ -36,6 +35,7 @@
3635
#define BLACKBIRD_MAX_DEEP_SAMPLE_BYTES 64
3736
#define BLACKBIRD_MAX_STACK_SNAPSHOT_BYTES 256
3837
#define BLACKBIRD_MAX_FILE_PATH_CHARS 520
38+
#define BLACKBIRD_TEMPUS_SUBSYSTEM_COUNT 14
3939

4040
typedef enum _BLACKBIRD_EVENT_TYPE
4141
{
@@ -95,9 +95,7 @@ typedef struct _BLACKBIRD_SET_PIDS_REQUEST
9595
#define BLACKBIRD_RUNTIME_FLAG_SELF_HIDE 0x00000002u
9696
#define BLACKBIRD_RUNTIME_FLAG_INTERFACE_PROTECTED_ACCESS 0x00000004u
9797
#define BLACKBIRD_RUNTIME_FLAG_CONTROLLER_PROTECTED_ACCESS 0x00000008u
98-
#define BLACKBIRD_RUNTIME_FLAG_PROTECTED_ACCESS \
99-
(BLACKBIRD_RUNTIME_FLAG_INTERFACE_PROTECTED_ACCESS | BLACKBIRD_RUNTIME_FLAG_CONTROLLER_PROTECTED_ACCESS)
100-
98+
#define BLACKBIRD_RUNTIME_FLAG_NTAPI_HOOKS_DISARMED 0x00000010u
10199
typedef enum _BLACKBIRD_RUNTIME_MODE
102100
{
103101
BLACKBIRD_RUNTIME_MODE_LOITER = 0,
@@ -138,12 +136,6 @@ typedef struct _BLACKBIRD_CONTROL_EXECUTION_REQUEST
138136
UINT32 Suspend; /* 1 = suspend, 0 = resume */
139137
} BLACKBIRD_CONTROL_EXECUTION_REQUEST, *PBLACKBIRD_CONTROL_EXECUTION_REQUEST;
140138

141-
typedef struct _BLACKBIRD_MARK_INTERFACE_READY_REQUEST
142-
{
143-
UINT32 ProcessId;
144-
UINT32 Reserved;
145-
} BLACKBIRD_MARK_INTERFACE_READY_REQUEST, *PBLACKBIRD_MARK_INTERFACE_READY_REQUEST;
146-
147139
typedef struct _BLACKBIRD_MARK_CONTROLLER_READY_REQUEST
148140
{
149141
UINT32 ProcessId;
@@ -266,12 +258,42 @@ typedef struct _BLACKBIRD_EVENT_RECORD
266258
} Data;
267259
} BLACKBIRD_EVENT_RECORD, *PBLACKBIRD_EVENT_RECORD;
268260

261+
typedef enum _BLACKBIRD_TEMPUS_SUBSYSTEM
262+
{
263+
BlackbirdTempusSubsystemDriver = 0,
264+
BlackbirdTempusSubsystemControl = 1,
265+
BlackbirdTempusSubsystemEtw = 2,
266+
BlackbirdTempusSubsystemHandleMonitor = 3,
267+
BlackbirdTempusSubsystemThreadMonitor = 4,
268+
BlackbirdTempusSubsystemProcessMonitor = 5,
269+
BlackbirdTempusSubsystemImageMonitor = 6,
270+
BlackbirdTempusSubsystemRegistryMonitor = 7,
271+
BlackbirdTempusSubsystemFileSystemMonitor = 8,
272+
BlackbirdTempusSubsystemApcMonitor = 9,
273+
BlackbirdTempusSubsystemCorrelation = 10,
274+
BlackbirdTempusSubsystemHollowingEngine = 11,
275+
BlackbirdTempusSubsystemNtApiMonitor = 12,
276+
BlackbirdTempusSubsystemAntiTamper = 13
277+
} BLACKBIRD_TEMPUS_SUBSYSTEM;
278+
279+
typedef struct _BLACKBIRD_TEMPUS_BUCKET
280+
{
281+
UINT64 SampleCount;
282+
UINT64 TotalQpc;
283+
UINT64 MaxQpc;
284+
UINT64 LastQpc;
285+
} BLACKBIRD_TEMPUS_BUCKET, *PBLACKBIRD_TEMPUS_BUCKET;
286+
269287
typedef struct _BLACKBIRD_STATS_RESPONSE
270288
{
271289
UINT32 SubscriptionCount;
272290
UINT32 QueueDepth;
273291
UINT32 DroppedEvents;
292+
UINT32 TempusEnabled;
293+
UINT64 TempusQpcFrequency;
294+
UINT32 TempusSubsystemCount;
274295
UINT32 Reserved;
296+
BLACKBIRD_TEMPUS_BUCKET Tempus[BLACKBIRD_TEMPUS_SUBSYSTEM_COUNT];
275297
} BLACKBIRD_STATS_RESPONSE, *PBLACKBIRD_STATS_RESPONSE;
276298

277299
typedef struct _BLACKBIRD_HEALTH_RESPONSE

0 commit comments

Comments
 (0)