原创 驅動開發筆記

保護驅動 Hidden保護驅動 gayhub:https://github.com/JKornev/hidden 進程保護 進程保護通過ObRegisterCallbacks進程線程對象回調實現。在進程對象Pre回調中獲取打開進程

原创 Windows內核函數命名

Ex:管理層 Ke:核心層 Hal:硬件抽象層 Ob:對象管理 Mm:內存管理 Ps:進程管理 Se:安全管理 Io:I/O管理 Fs:文件系統 Cc:文件緩存管理 Cm:系統配置管理 Pp:即插即用管理 Rtl:運行時程序庫 K

原创 驅動理解備忘錄

驅動設備層次結構 NT式以及WDM驅動都可以分層,即設備創建時,先創建底層PDO(物理設備對象,檢測到設備時由PNP管理器創建),隨後創建高層FDO(功能設備對象,IoCreateDevice創建)。每個PDO上必須有一個FDO來

原创 Hidden保護驅動筆記

gayhub:https://github.com/JKornev/hidden 進程保護 進程保護通過ObRegisterCallbacks進程線程對象回調實現。在進程對象Pre回調中獲取打開進程句柄的進程ID(PsGetCur

原创 關鍵寄存器備忘錄

gs 寄存器 fs寄存器在x64下變爲gs寄存器 R3下gs存放的是TEB R0下存放的是KPCR(記錄每個CPU的狀態,結構體中存儲了GDT,IDT等重要的信息), MSR 寄存器 MSR 總體來是爲了設置CPU 的工作環境和標

原创 API備忘錄

R0常用API備忘錄 字符類型轉換 Ring3 MultiByteToWideChar() WideCharToMultiByte() Ring0 RtlUnicodeToMultiByteN() RtlMultiByt

原创 R3注入的四種方式

DLL注入 1.首先要獲取想要注入的進程句柄(OpenProcess) 2.從要注入的進程的地址空間中分配一段內存(VirtualAllocEx) 3.往分配的內存位置寫入要注入的DLL名稱(WriteProcessMemory)

原创 MFC界面編寫

主要函數 MFC建立後默認生成三個類,分別爲CxxxApp、CxxxDlg和一個固定名稱的類【xxx爲項目名稱】 CxxxApp程序類 InitInstance函數爲程序最早執行的入口【用於初始化】 ExitInstance函數爲程序

原创 註冊表R0監控

函數 //註冊一個可監控註冊表操作的函數 CmRegisterCallback(回調函數地址,NULL,&返回的handle);//或CmRegisterCallbackEx,可設置高度 NTSTATUS MyRegistryCal

原创 Minifilter文件系統過濾框架

原理 正常的IRP流程是R3 API調用時,會將請求封裝成一個IRP經過IO管理器到達文件系統,然後在發往磁盤存儲系統,最後到達硬件。 使用MiniFilter後會在IO棧中添加MiniFilter管理器。當IRP到達文件系統之前時,首先

原创 NT驅動加載與卸載

流程 加載NT驅動可使用LoadDriver,該函數通過服務、註冊表等操作加載sys文件 注意:使用代碼時要修改路徑和名稱,如果有控制碼則需要與NT驅動控制碼相同。 代碼 //路徑 #define DRIVER_NAME "ntmodel

原创 SetWindowsHookEx設置全局鉤子

用途 該函數可以在R3下鉤子,可監控鍵盤、鼠標、窗口等各種消息。監控到後調用指定的回調函數。 函數原型 HHOOK WINAPI SetWindowsHookEx( __in int idHook, \\鉤子類型 __in HOOKPRO

原创 R3進程DLL注入HOOK

工具 DLL中可使用三種HOOK引擎實現HOOK,分別爲開源引擎nthookengine、mhook和微軟的Detour 流程 本進程HOOK可直接導入引擎DLL調用API實現 注入其他進程HOOK通過編寫一個實現了HOOK本進程的DLL

原创 純C正則

共兩種正則,可在任意環境運行。 呆碼如下 #include <Ntifs.h> #include <ntddk.h> #include <windef.h> BOOL PatternMatch(WCHAR * pat, WCHAR *

原创 IRP HOOK

流程 相比較R3 HOOK,R0的HOOK還是比較簡單的(畢竟共享一塊內存) 直接IoGetDeviceObjectPointer根據名稱獲取驅動對象,然後更改分發函數數組元素即可HOOK指定IRP分發函數 實現 NTSTATUS Ins