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 ...
随机推荐
- Centos7 安装 brctl 工具
[root@docker-node1 ~]# brctl show -bash: brctl: command not found [root@docker-node1 ~]# yum -y inst ...
- Echart可视化学习(三)
文档的源代码地址,需要的下载就可以了(访问密码:7567) https://url56.ctfile.com/f/34653256-527823386-04154f 正文: 编写中间模块 添加显示样式 ...
- vue 使用mock来模拟数据
首先,需要安装mock npm install mockjs --save-dev 在main.js中引入mock mock文件写法如下: const Mock = require('mockjs') ...
- 一文搞定 Windows Terminal 设置与 zsh 安装 (非WSL)
为 Windows Terminal 添加标签页 添加 Anaconda 标签页 在settings.json文件中的list列表中添加设置项: { // Make changes here to t ...
- 【Java】toString
toString 当我们输出一个对象的引用时,实际上就是调用当前对象的toString() Object类中toString()的定义: public String toString() { retu ...
- 人口信息普查系统-JavaWeb-四
今天给大家分享前端人口登记页面,人口查询页面 人口登记 <%@ page language="java" contentType="text/html; chars ...
- 常见线程池之 newCacheThreadPool 缓存线程池 简单使用
package com.aaa.threaddemo; import java.util.concurrent.BlockingQueue; import java.util.concurrent.E ...
- 如何使用 pytorch 实现 yolov3
前言 看了 Yolov3 的论文之后,发现这论文写的真的是很简短,神经网络的具体结构和损失函数的公式都没有给出.所以这里参考了许多前人的博客和代码,下面进入正题. 网络结构 Yolov3 将主干网络换 ...
- 2022.02.05 DAY2
前言 今天陪老姐送对象去安庆了,上午还去了西风禅寺求了个签,第一次拿到中评签,看来今年还需要继续努力哈哈哈.一直到晚上才有时间去做点题目,今天依旧是leetcode. 题目 leetcode 1 两数 ...
- 「CTSC2010」产品销售
「CTSC2010」产品销售 30pts的费用流都会吧... 100pts只要模拟费用流就行了,是不是很简单呀( 咕咕咕 令\(M_i\)表示\(i-1\to i\)的正向边,\(M_i^{'}\)表 ...