ring3:
1.ph.h ------> native.c 调用KphXXXX自已实现的 或者 NTDLL的NTXXXX
PhOpenProcess 在KphIsConnected()为真调用 KphOpenProcess 为假调用NTDLL的 NtOpenProcess
2.kphapi.h ring0与ring3共享数据头文件
kphuser.h -------> kph.c 实现KphXXXX
应用程序初始化: main.c
1) 调用KphInstallEx创建KProcessHacker.sys系统服务
2) 调用KphConnect2Ex启动服务,KphConnect2Ex调用KphConnect保护KProcessHacker.sys不被关闭
KphOpenProcess -----> KphpDeviceIoControl ------> NtDeviceIoControlFile
通过KPH_OPENPROCESS控制码调用NtDeviceIoControlFile
ring0:
main.c
DriverEntry
1) KphDynamicDataInitialization -----> KphpX86DataInitialization 初始化数据 dyndata.c
2) 实现IRP_MJ_CREATE与IRP_MJ_DEVICE_CONTROL分发
devctrl.c 实现IRP_MJ_DEVICE_CONTROL分发KphDispatchDeviceControl
KPH_OPENPROCESS 控制码对应处理函数 KpiOpenProcess
3.kph.h 定义驱动实现NTDLL导出的函数如NtOpenProcess 对应 KpiOpenProcess
但在KpiOpenProcess并非直接调用ntoskrl.exe导出的NtOpenProcess,而是自实现
kph.h ---> process.c process KpiOpenProcess函数
kph.h ---> thread.c thread KpiOpenThread函数
kph.h ---> vm.c memory KpiWriteVirtualMemory函数
kph.h ---> object.c object KpiQueryInformationObject函数
kph.h ---> qrydrv.c driver KpiQueryInformationDriver函数
kph.h ---> dynimp.c KphGetSystemRoutineAddress
kph.h ---> dyndata.c 初始化函数 KphDynamicDataInitialization
阅读(2961) | 评论(0) | 转发(0) |