系统调用、进程、线程
系统调用
我只能说,windows真是等级森严啊假如说我们要调用ControlDeviceIo这个API,那么会经过kernel32.dll->kernelbase.dll->ntdll.dll->ntoskrnl.exe->xxx->hal.dll
差不多就是层层审批,所以这也解释了为什么说有的函数出自kernel32.dll但是用ida看的时候却发现,里面的实现仅有一个call指令,原来是在向下蔓延
kernel32.dll.OpenProcess—>kernelBase.dll.OpenProcess–>ntdll.dll.ZwOpenProcess–>0x7ffe0300–>sysenter–>内核
SSDT和ShadowSSDT表
ntdll.dll和user32.dll gdt32.dll访问内核时,用到的函数表里面存储了四个元素 函数表 服务调用次数统计 函数个数 参数表
SSDT表中基本存储无通信的内核函数,另一个存的就是有通信的了(不全是
这涉及到一个东西,服务号,比如pwn中最常见的system就是0x2b,这就是服务号,参数表查询和函数表查询都是通过服务号偏移拿到的(举例仅供参考,这个是linux系统的服务号)
自己定义
1 | typedef struct __SSDTItem |
syscall
嗯,这节课相当于分析了,sysentry实现细节,总结来说就是三个步骤1.保存环境,搞新环境
2.复制参数
3.CALL
不过细细下来分析还是很复杂的,后面如果用到再说吧
这个里面分析好像就能跟着学很多比如
IRQL
代码等级,0 1 2,代码等级2号要大于1号大于0号,运行起来优先级也会高,比如说键盘和语雀,我输入一个'a',语雀会立马出现,是因为键盘的等级高,它可以让语雀中断先执行键盘,然后回去执行语雀,大致是这个意思syscall返回部分
返回部分还有有一个R3esp设置回去,这里作用主要在R0调用R0然后返回R3要返回栈环境的SSDT_HOOK
Cr0 MDL
Cr0这个词我都差点忘了是系统内的控制寄存器之一。控制寄存器是一些特殊的寄存器,它们可以控制CPU的一些重要特性。
0位是保护允许位PE(Protedted Enable),用于启动保护模式,如果PE位置1,则保护模式启动,如果PE=0,则在实模式下运行。
1 位是监控协处理位MP(Moniter coprocessor),它与第3位一起决定:当TS=1时操作码WAIT是否产生一个“协处理器不能使用”的出错信号。第3位是任务转换位(Task Switch),当一个任务转换完成之后,自动将它置1。随着TS=1,就不能使用协处理器。
CR0的第2位是模拟协处理器位 EM (Emulate coprocessor),如果EM=1,则不能使用协处理器,如果EM=0,则允许使用协处理器。
第4位是微处理器的扩展类型位 ET(Processor Extension Type),其内保存着处理器扩展类型的信息,如果ET=0,则标识系统使用的是287协处理器,如果 ET=1,则表示系统使用的是387浮点协处理器。
CR0的第31位是分页允许位(Paging Enable),它表示芯片上的分页部件是否允许工作。
CR0的第16位是写保护未即WP位(486系列之后),只要将这一位置0就可以禁用写保护,置1则可将其恢复。
在网上找了一个文章补了一下
简单来讲就是决定当前代码是否可写
但是在内核中没有Virtualprotect这样的函数,所以要用MDL,也是用来改保护的
源码
1 |
|
改进
`MmProbeAndLockPages`这个创建页的函数效率很低,可以用其他API代替如: `MmBuildForNonPagePool`区别在于锁页
API
`IoAllocateMdl` 创建一个页描述符MmProbeAndLockPages 锁页(挂页并且上梭)
MmMapLockedPagesSpecifyCache 访问页(解锁访问)
进程
结构
进程刚开始创建仅仅是有一个空间,和对进程的描述结构,实际上就是申请了一片地用于进程相关windbg
`EPROCESS` 进程结构体(PEB?) 指令 `dt _EPROCESS Addrxxx`KPROCESS EPROCESS的第一个成员 指令 dt _KPROCESS AAddrxxx
内核小知识
linux使用的是宏内核,线程调度,内存,进程管理,文件管理是一体的,紧密联系。模块无法抽出win用的是微内核,线程调度,内存,进程管理,对象的管理,是可以抽出来的
K_系列封装 微内核层
E_封装 执行体层
样本分析
EPROCESS
1 | +0x000 Pcb : _KPROCESS KPROCESS |
KRPOCESS
1 | +0x000 Header : _DISPATCHER_HEADER |