KiSystemCall64 win10 21h2函数流程分析 3环到0环
0x00基本信息
系统:windows 10 21h2
工具:ida 7.7 , windbg 10
3环写一个win32k 函数 看访问流程
0x01分析
例如:3环函数
FlattenPath(x)
会调用到 win32u.dll 的 NtGdiFlattenPath eax=12a0 ssdt 表的下标地址就是 2a0 就是他的映射地址
.text:0000000180006430 public NtGdiFlattenPath
.text:0000000180006430 NtGdiFlattenPath proc near ; DATA XREF: .rdata:000000018000CE4D↓o
.text:0000000180006430 ; .rdata:off_18000F178↓o ...
.text:0000000180006430 mov r10, rcx
.text:0000000180006433 mov eax, 12A0h
.text:0000000180006438 test byte ptr ds:7FFE0308h, 1
.text:0000000180006440 jnz short loc_180006445
.text:0000000180006442 syscall ; Low latency system call
.text:0000000180006444 retn
windbg查看rdmsr 看到KiSystemCall64 地址
rdmsr 0xC0000082
下断点注意不要在 KiSystemCall64 地址下断点 会报错 3行汇编是堆栈切换 不要下断点
.text:00000001404088C0 ; __unwind { // KiSystemServiceHandler
.text:00000001404088C0 swapgs
.text:00000001404088C3 mov gs:10h, rsp
.text:00000001404088CC mov rsp, gs:1A8h
.text:00000001404088D5 push 2Bh ; '+'
可以在KiSystemCall64 偏移15位置下断点 就可以断下
ba e1 KiSystemCall64+15
直接分析到 KiSystemServiceStart 取下标
.text:0000000140408C20 KiSystemServiceStart: ; DATA XREF: KiServiceInternal+5A↑o
.text:0000000140408C20 ; .data:0000000140C00340↓o
.text:0000000140408C20 mov [rbx+90h], rsp
.text:0000000140408C27 mov edi, eax
.text:0000000140408C29 shr edi, 7
.text:0000000140408C2C and edi, 20h
.text:0000000140408C2F and eax, 0FFFh ; 取下标
获取FlattenPath 0环地址
.text:0000000140408C5E loc_140408C5E: ; CODE XREF: KiSystemCall64+389↑j
.text:0000000140408C5E cmp eax, [r10+rdi+10h]
.text:0000000140408C63 jnb loc_140409195
.text:0000000140408C69 mov r10, [r10+rdi]
.text:0000000140408C6D movsxd r11, dword ptr [r10+rax*4] ; 获取地址
.text:0000000140408D90 KiSystemServiceCopyEnd: ; CODE XREF: KiSystemCall64+413↑j
.text:0000000140408D90 ; DATA XREF: KiSystemServiceHandler+27↑o ...
.text:0000000140408D90 test cs:KiDynamicTraceMask, 1
.text:0000000140408D9A jnz loc_140409233
.text:0000000140408DA0 test dword ptr cs:PerfGlobalGroupMask+8, 40h
.text:0000000140408DAA jnz loc_1404092A7
.text:0000000140408DB0 mov rax, r10
.text:0000000140408DB3 call rax
.text:0000000140408DB5 nop dword ptr [rax]
call rax 下断点 也可以直接下偏移断点
ba e1 KiSystemServiceCopyEnd+0x20
nt!_guard_retpoline_indirect_rax 跟进去
call nt!_guard_retpoline_indirect_rax (fffff803`36c1b2e0)
继续f11 一个ret 返回就可以跳到 win32k!NtGdiFlattenPath:
fffff803`36c1b2ff e81c000000 call nt!_guard_retpoline_indirect_rax+0x40 (fffff803`36c1b320)
这里的
ffffd004`2246b268 e833f00800 call ffffd004`224fa2a0
也是直接f11 和上边一样
成功到实际汇编代码 这就看到一个函数内核实现了 可以分析调试了
win32kfull!NtGdiFlattenPath:
ffffd004`238dde70 4053 push rbx
ffffd004`238dde72 4881ecb0000000 sub rsp,0B0h
ffffd004`238dde79 488bd1 mov rdx,rcx
ffffd004`238dde7c 488d4c2420 lea rcx,[rsp+20h]
ffffd004`238dde81 e88e85dcff call win32kfull!DCOBJ::DCOBJ (ffffd004`236a6414)
ffffd004`238dde86 488b4c2420 mov rcx,qword ptr [rsp+20h]
ffffd004`238dde8b 4885c9 test rcx,rcx
ffffd004`238dde8e 7507 jne win32kfull!NtGdiFlattenPath+0x27 (ffffd004`238dde97)
当然最方便的是 3环下断点 直接步过到内核 进行调试
bp win32kfull!NtGdiFlattenPath
记住要记载符号 win32kfull.sys 可以用.reload 命令
KiSystemCall64 win10 21h2函数流程分析 3环到0环的更多相关文章
- Windows系统调用中API从3环到0环(下)
Windows内核分析索引目录:https://www.cnblogs.com/onetrainee/p/11675224.html Windows系统调用中API从3环到0环(下) 如果对API在 ...
- Windows系统调用中API从3环到0环(上)
Windows内核分析索引目录:https://www.cnblogs.com/onetrainee/p/11675224.html Windows系统调用中API从3环到0环(上) 如果对API在三 ...
- 64位CreateProcess逆向:(二)0环下参数的整合即创建进程的整体流程
转载:https://bbs.pediy.com/thread-207683.htm 点击下面进入总目录: 64位Windows创建64位进程逆向分析(总目录) 在上一篇文章中,我们介绍了Create ...
- 洛谷3953 (NOIp2017) 逛公园——记忆化搜索+用栈判0环
题目:https://www.luogu.org/problemnew/show/P3953 因为K只有50,所以想到用dp[ cr ][ j ]表示在点cr.比最短路多走了 j 的方案数.(看了TJ ...
- Hogp连接流程分析
当BLE设备已经完成配对,并且完成GATT服务的搜索,下一步就开始profile 的连接流程了,一般LE设备都是走的HOGP的流程,我们这篇文章就分析一下hogp的连接流程. 连接是从framewor ...
- Windows进程创建的流程分析
. 创建进程的大体流程: 创建进程的过程就是构建一个环境,这个环境包含了很多的机制 (比如自我保护, 与外界通信等等). 构建这个环境需要两种"人"来协调完成(用户态和内核 ...
- rest_framework框架之认证功能的使用和源码实现流程分析
rest_framework框架之认证的使用和源码实现流程分析 一.认证功能的源码流程 创建视图函数 Note 创建视图函数后,前端发起请求,url分配路由,执行视图类,视图类中执行对应方法必须经过d ...
- freeswitch呼叫流程分析
今天翻文档时发现之前整理的关于freeswitch呼叫相关的内容,写成博文分享出来也方便我以后查阅. 整体结构图 FreeswitchCore 模块加载过程 freeswitch主程序初始化时会从mo ...
- u-boot 流程分析
u-boot 介绍: 对于计算机来说 , 从一开始上机通电是无法直接启动操作系统的 , 这中间需要一个引导过程 , 嵌入式Linux系统同样离不开引导程序 , 这个启动程序就叫启动加载程序(Boot ...
随机推荐
- vue js格式化数字为金额格式
/** * @description 格式化金额 * @param number:要格式化的数字 * @param decimals:保留几位小数 默认0位 * @param decPoint:小数点 ...
- Lyft 宣布开源基础设施工具管理平台 Clutch!
今天我们很高兴地宣布,Lyft 的基础设施工具可扩展 UI 和 API 平台clutch已开放源代码,clutch使工程团队能够构建.运行和维护用户友好的工作流,这些工作流还包含特定于域的安全机制和访 ...
- 面渣逆袭:Java并发六十问,快来看看你会多少道!
大家好,我是老三,面渣逆袭 继续,这节我们来盘一盘另一个面试必问知识点--Java并发. 这篇文章有点长,四万字,图文详解六十道Java并发面试题.人已经肝麻了,大家可以点赞.收藏慢慢看!扶我起来,我 ...
- Termux劣质的入门指南
直入主题: 1.1 下载安装 Google下载(有条件的用!) F-droid下载(建议使用!) 也可以去酷安下载! 1.2 配置 apt update && apt upgrade ...
- DASCTF-Sept-X-浙江工业大学秋季挑战赛-pwn-wp
目录 DASCTF-Sept-X-浙江工业大学秋季挑战赛-pwn-wp 总结 datasystem check分析 漏洞点 利用思路 exp hehepwn 漏洞点 exp hahapwn 漏洞点 e ...
- Solon Web 开发,二、开发知识准备
Solon Web 开发 一.开始 二.开发知识准备 三.打包与运行 四.请求上下文 五.数据访问.事务与缓存应用 六.过滤器.处理.拦截器 七.视图模板与Mvc注解 八.校验.及定制与扩展 九.跨域 ...
- Android学习笔记2
4,用intent在activity之间传递数据(两个Activity可能不是在一个应用程序中) (1),从MainActivity向HelloActivity传递参数123 package com. ...
- Cesium参考资源
Reference resources cesium官网 cesium 下载 cesium官方文档 APIs cesium-workshop github cesium 官方示例 cesium git ...
- CSS快速入门(三)
目录 字体相关调整 背景相关调整 控制背景平铺 调整背景图像的大小 边框属性 圆与圆角 盒模型 块级盒子(Block box) 和 内联盒子(Inline box) display属性 盒子模型 盒模 ...
- 进程(守护进程--互斥锁--IPC机制--生产者模型--僵尸进程与孤儿进程--模拟抢票--消息队列)
目录 一:进程理论知识 1.理论知识 二:什么是进程? 三:僵尸进程与孤儿进程 1.僵尸进程 四:守护进程 1.什么是守护进程? 2.主进程创建守护进程 3.守护进程 五:互斥锁(模拟多人抢票) 1. ...