WindowsAPI编程核心技术-强制性功能
WindowsAPI编程核心技术-强制性功能强制结束进程基本原理用未导出函数PspTerminateThreadByPointer结束一个进程的所有线程,这个进程也随之消亡了。该函数声明:
12345NTSTATUS PspTerminateThreadByPointer( PETHREAD pEThread, NTSTATUS ntExitCode, BOOLEAN bDirectTerminate)
但要注意函数指针的声明的调用约定:
1234567#ifdef _WIN64 // 64 位 typedef NTSTATUS(__fastcall *PSPTERMINATETHREADBYPOINTER) (PETHREAD pEThread, NTSTATUS ntExitCode, BOOLEAN bDirectTerminate);#else // 32 位 typedef NTSTATUS(*PSPTERMINATETHREADBYPOINTER) (PETHREAD pEThread, NTSTATUS ntExitCode, BOOLEAN bDir ...
WindowsAPI编程核心技术-过PatchGuard防护
WindowsAPI编程核心技术-过PatchGuard防护驱动隐藏过PatchGuard摘链未导出函数MiProcessLoaderEntry从全局链表中插入或删除一个模块,操作时同样设置PatchGuard监控的全局数据,所以不会触发PatchGuard导致蓝屏。声明如下:
12345NTSTATUS __stdcall MiProcessLoaderEntry( PVOID pList, //双向链表 BOOLEAN bOperate //操作标志 TRUE插入链表 FALSE删除链表); //x86NTSTATUS __fastcall MiProcessLoaderEntry(PVOID pList,BOOLEAN bOperate); //x64
对Ntoskrnl.exe丢IDA进行分析,对导出函数NtSetSystemInformation内存特征码扫描定位未导出函数MmLoadSystemImage地址。
对于x86和x64的Windows 7和Windows 8.1,在MmLoadSystemImage函数内存中扫描定位MiProcessLoaderE ...
WindowsAPI编程核心技术-Minifilter文件监控
WindowsAPI编程核心技术-Minifilter文件监控这节不讲Minifilter,只讲实现,入门Minifilter看驱动篇。
拦截IRP请求本节在FLT_OPERATION_REGISTRATION中设置IRP_MJ_CREATE、IRP_MJ_READ、IRP_MJ_WRITE、IRP_MJ_SET_INFORMATION,分别对应文件创建、读取、写入、属性修改等。
123456789101112131415161718192021// operation registrationCONST FLT_OPERATION_REGISTRATION Callbacks[] = { { IRP_MJ_CREATE, 0, Minifilter_FileMonitor_TestPreOperation, Minifilter_FileMonitor_TestPostOperation }, { IRP_MJ_READ, 0, Minifilter_FileMonitor_ ...
WindowsAPI编程核心技术-对象监控
WindowsAPI编程核心技术-对象监控碎碎念对象监控指的是线程句柄对象、进程句柄对象、桌面句柄对象的监控。
这个技术病毒木马常用。病毒木马的对象监控回调常用来会自行线程或进程的保护,保护指定程序不被杀毒软件或用户强制结束运行。结束进程时要获取打开的进程句柄,所以病毒木马通过对进程对象进行监控,使系统获取句柄失败,从而实现进程保护。
前置芝士ObRegisterCallbacks注册线程、进程和桌面句柄操作的回调函数。驱动程序必须有数字签名。
1234NTSTATUS ObRegisterCallbacks( _In_ POB_CALLBACK_REGISTER CallBackRegistration, //指定回调例程列表和其他注册信息 _Out_ PVOID* RegistrationHandle //接收已注册回调例程集合的标识)
用ObUnRegisterCallbacks注销回调例程。
OB_CALLBACK_REGISTRATION1234567typedef struct _OB_CALLBACK_REGISTRATION { _In_ ...
WindowsAPI编程核心技术-注册表监控
WindowsAPI编程核心技术-注册表监控前置芝士CmRegisterCallback注册注册表监控例程。
12345NTSTATUS CmRegisterCallback( _In_ PEX_CALLBACK_FUNCTION Function, //例程 _In_opt_ PVOID Context, //例程参数 _Out_ PLARGE_INTEGER Cookie //回调例程标识)
PEX_CALLBACK_FUNCTION回调函数。
12345NTSTATUS RegistryCallback( _In_ PVOID CallbackContext, //参数 _In_opt_ PVOID Argument1, //操作类型 _In_opt_ PVOID Argument2 //操作信息)
实现方法设置注册表回调函数时会拿到Cookie:
12345678910// 设置回调函数NTSTATUS SetRegisterCallback() { NTSTATUS status = CmRegisterCallback(Re ...
WindowsAPI编程核心技术-模块加载监控
WindowsAPI编程核心技术-模块加载监控前置芝士PsSetLoadImageNotifyRoutine设置模块加载回调函数,完成模块加载时通知回调函数。
123NTSTATUS PsSetLoadImageNotifyRoutine( _In_ PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine //指向回调函数)
可通过PsRemoveLoadImageNotifyRoutine删除回调。
PLOAD_IMAGE_NOTIFY_ROUTINE回调函数。
12345VOID SetLoadImageNotifyRoutine( _In_opt_ PUNICODE_STRING FullImageName, //标识可执行映像文件 _In_ HANDLE ProcessId, //加载模块所属进程ID 驱动程序为0 _In_ PIMAGE_INFO ImageInfo)
IMAGE_INFO1234567891011121314151617181920typedef struct _IMAGE_INFO { ...
WindowsAPI编程核心技术-进线程监控
WindowsAPI编程核心技术-进线程监控进程创建监控因为x64下没法HOOK,微软搞了一套接口。
PsSetCreateProcessNotifyRoutineEx设置进程回调监控创建与退出,控制是否允许进程创建。
1234NTSTATUS PsSetCreateProcessNotifyRoutineEx( _In_ PCREATE_PROCESS_NOTIFY_ROUTINE_EX NotifyRoutine, //调用例程 _In_ BOOLEAN Remove //TRUE从回调例程列表中删除指定例程并等待所有正运行的回调例程运行完成 FALSE反之添加)
PS_CREATE_NOTIFY_INFO1234567891011121314151617typedef struct _PS_CREATE_NOTIFY_INFO { _In_ SIZE_T Size; //该结构大小 单位字节 union { _In_ ULONG Flags; //废弃 struct { _I ...
WindowsAPI编程核心技术-键盘按键记录过滤驱动
WindowsAPI编程核心技术-键盘按键记录过滤驱动实现原理驱动中有设备栈的概念,栈内成员是设备,一个连着一个。同一个设备栈中的设备,IRP传递方向是从栈顶到栈底。新添加的设备附加在设备栈顶,新设备总最先获取IRP数据。
键盘过滤驱动工作在异步模式下,发送请求IRP_MJ_READ到驱动设备栈,驱动收到后挂起,直到按下一个键,驱动完成IRP并作为返回值返回。IRP带着数据返回后被传递给对应事件系统处理,系统再紧接着发送下一个IRP_MJ_READ请求。
驱动程序创建一个键盘设备,附加在键盘类KbdClass设备栈上顶。
创建过滤驱动设备123456789101112131415161718192021222324252627282930NTSTATUS AttachKdbClass(PDEVICE_OBJECT pDevObj) { DbgPrint("Enter HookKdbClass\n"); NTSTATUS status = STATUS_SUCCESS; UNICODE_STRING ustrObjectName; PFILE_OBJECT ...
WindowsAPI编程核心技术-SSDT_Hook
WindowsAPI编程核心技术-SSDT HookSSDT入门SSDT系统服务描述符表。SSDT把Ring3的WIN32 API函数与Ring0的内核API函数联系起来。Ring3下一些API最终对应于ntdll.dll里的一个以“Nt”为前缀的函数。例如CreateFile最终会调用ntdll.dll里的NtCreateFile函数,NtCreateFile将系统服务号放入EAX,再调用系统服务分发函数KiSystemService进入到内核中,这样完成一次系统服务调用。
SSDT Hook就是修改此表的函数地址,对常用的Windows函数进行挂钩,对一些核心系统动作进行过滤、监控。
获取SSDT函数索引号ZwCreateSection创建一个节对象。
123456789NTSTATUS ZwCreateSection( _Out_ PHANDLE SectionHandle, //接收段对象句柄 _In_ ACCESS_MASK DesiredAccess, //请求的对象访问 SECTION_MAP_READ SECTION_MAP_WRITE 读取/编写该部分视图 ...
Windows驱动开发入门-Minifilter示例代码
Windows驱动开发入门-Minifilter示例代码NPminifilter.inf、DLL源代码、应用层源代码在教程节都有完整的,这里不贴了。
NPminifilter.c123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173 ...