下你所需,载你所想!
汇集开发技术源码资料

驱动禁止创建进程例程代码64位

:5.493KB :1 :2019-11-12 13:48:45

部分简介

x64位全系统禁止进程创建 ,自己已经测试无蓝屏,全部用的回调函数驱动文件带的有进程保护,安装成功后自动开启全局进程创建进程卸载后就恢复正常了

WriteSub (pDriverObject + 52, &DriverUnload)
_Read_DRIVER_OBJECT (DeviceObj, pDriverObject, 168)
DeviceObj.MajorFunction [1] = &DispatchCreateClose
DeviceObj.MajorFunction [3] = &DispatchCreateClose
DeviceObj.MajorFunction [15] = &DispatchDeviceControl
DeviceObj.DriverUnload = &DriverUnload
_Write_DRIVER_OBJECT (pDriverObject, DeviceObj, 168)
RtlInitAnsiString (asDeviceName, “\Device\lianxue”)
RtlAnsiStringToUnicodeString (usDeviceName, asDeviceName, 真)
.如果真 (IoCreateDevice (pDriverObject, 0, usDeviceName, 34, 256, 假, pDevObj) < 0)
RtlFreeUnicodeString (usDeviceName)
返回 (#STATUS_UNSUCCESSFUL)
.如果真结束
.如果 (IoIsWdmVersionAvailable (1, 16))
RtlInitAnsiString (asSymlinkName, “\DosDevices\Global\lianxue”)
.否则
RtlInitAnsiString (asSymlinkName, “\DosDevices\lianxue”)
.如果结束
RtlAnsiStringToUnicodeString (usSymlinkName, asSymlinkName, 真)
status = IoCreateSymbolicLink (usSymlinkName, usDeviceName)
RtlFreeUnicodeString (usDeviceName)
RtlFreeUnicodeString (usSymlinkName)
.如果真 (status < 0)
IoDeleteDevice (pDevObj)
返回 (#STATUS_UNSUCCESSFUL)
.如果真结束
返回 (#STATUS_SUCCESS)

之前看过很多关于进程创建的拦截,都是勾在NtCreateProcess或者NtCreateSection上,拦截到的往往都是Explorer进程中的线程,此时如果将线程卡在内核中,就会导致桌面卡死。

每一个线程都是从内核空间的KiThreadStartup开始运行的,线程在被创建的时候就指定了它在系统空间的上下文以及返回用户空间的自陷框架。在KiThreadStartup中,线程将运行级别降低至APC_LEVEL后调用PspUserThreadStartup(如果是系统线程,这里调用的是PspSystemThreadStartup),PspUserThreadStartup将用户空间ntdll.dll中的函数LdrInitializeThunk作为APC函数挂入APC队列。当线程返回用户空间时,就会检测到APC函数的存在,并先加以执行,直到APC队列中不再有请求时才算正式回到用户空间。
回到用户空间的什么地方呢?这要看线程被创建的时候设定的自陷框架了。如果是主线程,则回到BaseProcessStartup,非主线程则是BaseThreadStartup。至于用户空间给定的线程入口(如主线程的OEP),则存放在寄存器EAX中,作为参数调用BaseProcessStartup或者BaseThreadStartup,再由这二者之一将其放在一个SEH保护域中加以调用。

驱动禁止创建进程例程代码64位

热门推荐

相关文章