首页
社区
课程
招聘
[原创]win7 x64 IDT 0E KiPageFault分析
发表于: 2019-4-26 01:54 10123

[原创]win7 x64 IDT 0E KiPageFault分析

2019-4-26 01:54
10123

最近研究IDT hook 有很多地方不明白 所以就逆向了一遍0E 本人刚入门不久 可能分析的有些地方是错的 

首先看下异常堆栈结构
刚进异常的时候 系统会自动往堆栈里面从18c一直压入到168的R3环境 便于iretq返回R3 但是0E比较特殊 系统会多压入一个ErrorCode
 所以刚进入0E的时候 RSP所在的位置就在结构体+160的地方
开始 他会保持环境 判断先前模式 然后做不同的处理 
是R3他就会swapgs 然后读取msr102 我估计应该是校验gs的准确性
然后保存调试寄存器状态


这里没什么特别的操作 就是保存下环境 各种读取msr 不知道有啥用

然后这里是一些常规的操作 保存寄存器之类的 就是不知道ums是个什么东西

这里出现了两个函数  MmAccessFault 和 KiPreProcessKernelAccessFault  这两个函数 就是关键处理页异常的函数了 
在参考wrk和他传入的参数来看  他处理失败会返回错误代码 然后成功会返回0  R3直接 MmAccessFault处理
R0则需要多调用个 KiPreProcessKernelAccessFault   着俩函数实现太多了 就没分析了 不然真想看看他怎么处理异常的


下面就是紧接着判断异常代码  然后分发异常 没人处理就直接蓝屏了


最后就是还原环境 准备退出了   实力有限 只能分析出这么多东西

开始 他会保持环境 判断先前模式 然后做不同的处理 
是R3他就会swapgs 然后读取msr102 我估计应该是校验gs的准确性
然后保存调试寄存器状态


这里没什么特别的操作 就是保存下环境 各种读取msr 不知道有啥用

[注意]APP应用上架合规检测服务,协助应用顺利上架!

最后于 2019-4-26 01:55 被不吃麻婆豆腐编辑 ,原因:
收藏
免费 1
支持
分享
最新回复 (5)
雪    币: 615
活跃值: (620)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
2
顶,好文章,怎么不是发在逆向版块,
2019-4-26 08:18
0
雪    币: 914
活跃值: (2553)
能力值: ( LV5,RANK:68 )
在线值:
发帖
回帖
粉丝
3
9
2019-4-26 09:03
0
雪    币: 6664
活跃值: (957)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
不错不错
2019-4-26 19:38
0
雪    币: 248
活跃值: (3789)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
慢慢啃吧
2019-5-1 15:49
0
雪    币: 300
活跃值: (2557)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
mark
2019-5-5 09:18
0
游客
登录 | 注册 方可回帖
返回
//