2023-08-17 10:45:50 +02:00
|
|
|
#ifndef DRIVER_H
|
|
|
|
#define DRIVER_H
|
|
|
|
|
|
|
|
#include <Windows.h>
|
|
|
|
|
|
|
|
#include "../threadpool.h"
|
2023-08-22 19:32:25 +02:00
|
|
|
#include "../client.h"
|
2023-08-17 10:45:50 +02:00
|
|
|
|
2023-08-19 04:52:57 +02:00
|
|
|
#define IOCCTL_RUN_NMI_CALLBACKS CTL_CODE(FILE_DEVICE_UNKNOWN, 0x2001, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
|
|
|
#define IOCTL_VALIDATE_DRIVER_OBJECTS CTL_CODE(FILE_DEVICE_UNKNOWN, 0x2002, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
2023-08-20 16:12:04 +02:00
|
|
|
#define IOCTL_NOTIFY_DRIVER_ON_PROCESS_LAUNCH CTL_CODE(FILE_DEVICE_UNKNOWN, 0x2004, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
2023-08-20 17:04:53 +02:00
|
|
|
#define IOCTL_HANDLE_REPORTS_IN_CALLBACK_QUEUE CTL_CODE(FILE_DEVICE_UNKNOWN, 0x2005, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
2023-08-21 17:48:34 +02:00
|
|
|
#define IOCTL_PERFORM_VIRTUALIZATION_CHECK CTL_CODE(FILE_DEVICE_UNKNOWN, 0x2006, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
2023-08-22 10:51:52 +02:00
|
|
|
#define IOCTL_ENUMERATE_HANDLE_TABLES CTL_CODE(FILE_DEVICE_UNKNOWN, 0x2007, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
2023-08-22 19:32:25 +02:00
|
|
|
#define IOCTL_RETRIEVE_MODULE_EXECUTABLE_REGIONS CTL_CODE(FILE_DEVICE_UNKNOWN, 0x2008, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
|
|
|
#define IOCTL_REQUEST_TOTAL_MODULE_SIZE CTL_CODE(FILE_DEVICE_UNKNOWN, 0x2009, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
2023-08-24 17:10:40 +02:00
|
|
|
#define IOCTL_NOTIFY_DRIVER_ON_PROCESS_TERMINATION CTL_CODE(FILE_DEVICE_UNKNOWN, 0x2010, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
2023-08-28 17:00:52 +02:00
|
|
|
#define IOCTL_SCAN_FOR_UNLINKED_PROCESS CTL_CODE(FILE_DEVICE_UNKNOWN, 0x2011, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
2023-08-30 13:15:57 +02:00
|
|
|
#define IOCTL_VALIDATE_KPRCB_CURRENT_THREAD CTL_CODE(FILE_DEVICE_UNKNOWN, 0x2012, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
2023-09-01 13:46:31 +02:00
|
|
|
#define IOCTL_PERFORM_INTEGRITY_CHECK CTL_CODE(FILE_DEVICE_UNKNOWN, 0x2013, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
2023-09-02 15:47:15 +02:00
|
|
|
#define IOCTL_DETECT_ATTACHED_THREADS CTL_CODE(FILE_DEVICE_UNKNOWN, 0x2014, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
2023-08-20 17:04:53 +02:00
|
|
|
|
2023-09-02 10:54:04 +02:00
|
|
|
#define MAX_REPORTS_PER_IRP 20
|
2023-08-19 04:52:57 +02:00
|
|
|
|
2023-08-17 10:45:50 +02:00
|
|
|
namespace kernelmode
|
|
|
|
{
|
|
|
|
class Driver
|
|
|
|
{
|
|
|
|
HANDLE driver_handle;
|
|
|
|
LPCWSTR driver_name;
|
2023-08-22 19:32:25 +02:00
|
|
|
std::shared_ptr<global::Client> report_interface;
|
2023-08-21 06:45:33 +02:00
|
|
|
|
2023-08-23 14:14:20 +02:00
|
|
|
ULONG RequestTotalModuleSize();
|
2023-08-24 17:10:40 +02:00
|
|
|
VOID NotifyDriverOnProcessLaunch();
|
|
|
|
VOID CheckDriverHeartbeat();
|
|
|
|
VOID NotifyDriverOnProcessTermination();
|
2023-08-21 17:48:34 +02:00
|
|
|
|
2023-08-17 10:45:50 +02:00
|
|
|
public:
|
|
|
|
|
2023-08-22 19:32:25 +02:00
|
|
|
Driver(LPCWSTR DriverName, std::shared_ptr<global::Client> ReportInterface );
|
2023-08-24 17:10:40 +02:00
|
|
|
~Driver();
|
2023-08-19 04:52:57 +02:00
|
|
|
|
2023-08-23 14:14:20 +02:00
|
|
|
VOID RunNmiCallbacks();
|
|
|
|
VOID VerifySystemModules();
|
|
|
|
VOID RunCallbackReportQueue();
|
|
|
|
VOID DetectSystemVirtualization();
|
2023-08-30 15:23:04 +02:00
|
|
|
VOID QueryReportQueue();
|
2023-08-23 14:14:20 +02:00
|
|
|
VOID ValidateKPRCBThreads();
|
|
|
|
VOID CheckHandleTableEntries();
|
|
|
|
VOID RequestModuleExecutableRegions();
|
2023-08-28 17:00:52 +02:00
|
|
|
VOID ScanForUnlinkedProcess();
|
2023-09-01 13:46:31 +02:00
|
|
|
VOID PerformIntegrityCheck();
|
2023-09-02 15:47:15 +02:00
|
|
|
VOID CheckForAttachedThreads();
|
2023-08-17 10:45:50 +02:00
|
|
|
};
|
2023-08-20 16:12:04 +02:00
|
|
|
|
|
|
|
struct DRIVER_INITIATION_INFORMATION
|
|
|
|
{
|
|
|
|
LONG protected_process_id;
|
|
|
|
};
|
2023-08-21 17:48:34 +02:00
|
|
|
|
|
|
|
struct HYPERVISOR_DETECTION_REPORT
|
|
|
|
{
|
|
|
|
INT aperf_msr_timing_check;
|
|
|
|
INT invd_emulation_check;
|
|
|
|
};
|
2023-08-17 10:45:50 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
#endif
|