-
-
Windows内核-系统调用(三)
-
发表于:
2022-8-10 22:21
6582
-
OpenProcess和ReadProcessMemory从3环进0环的过程
kernel32.OpenProcess
KernelBase.OpenProcess
Ntdll.NtOpenProcess
7FFE0300(获取KiFastCallEntry)
sysenter
ZwOpenProcess
所有进程在R3和R0共享同一个结构_KUSER_SHARED_DATA
R3地址为:7FFE0000
R0地址为:FFFE0000
KiFastSystemCall
API实现OpenProcess功能
main.cpp
1.在 Ring3 的代码调用了 sysenter 指令之后,CPU 会做出如下的操作:
2.查看msr寄存器
3._KTRAP_FRAME
dt _KTRAP_FRAME:内核的上下文
dt _KPCR 每个cpu逻辑核的状态
5.KUSER_SHARED_DATA
6.KUSER_SHARED_DATA FFDF0000
304位置是 SystemCallReturn
7.ntdll.dll --> ZwOpenProcess
8.ntdll.dll --> KiFastSystemCall
9.ntoskrnl.exe -->kiFastCallEntry
10.SSDT表
KeServiceDescriptorTable
ServiceTable:指向函数地址表,KeServiceDescriptorTable+服务号*4 = 函数地址
Count:系统服务表被调用的次数
ServiceLimit:函数数量
ArgmentTable:函数参数表,每个参数4个字节.获取字节数后除以4,得到函数参数个数
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
最后于 2022-9-9 11:10
被zhang_derek编辑
,原因: