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环的更多相关文章

  1. Windows系统调用中API从3环到0环(下)

     Windows内核分析索引目录:https://www.cnblogs.com/onetrainee/p/11675224.html Windows系统调用中API从3环到0环(下) 如果对API在 ...

  2. Windows系统调用中API从3环到0环(上)

    Windows内核分析索引目录:https://www.cnblogs.com/onetrainee/p/11675224.html Windows系统调用中API从3环到0环(上) 如果对API在三 ...

  3. 64位CreateProcess逆向:(二)0环下参数的整合即创建进程的整体流程

    转载:https://bbs.pediy.com/thread-207683.htm 点击下面进入总目录: 64位Windows创建64位进程逆向分析(总目录) 在上一篇文章中,我们介绍了Create ...

  4. 洛谷3953 (NOIp2017) 逛公园——记忆化搜索+用栈判0环

    题目:https://www.luogu.org/problemnew/show/P3953 因为K只有50,所以想到用dp[ cr ][ j ]表示在点cr.比最短路多走了 j 的方案数.(看了TJ ...

  5. Hogp连接流程分析

    当BLE设备已经完成配对,并且完成GATT服务的搜索,下一步就开始profile 的连接流程了,一般LE设备都是走的HOGP的流程,我们这篇文章就分析一下hogp的连接流程. 连接是从framewor ...

  6. Windows进程创建的流程分析

    .   创建进程的大体流程:   创建进程的过程就是构建一个环境,这个环境包含了很多的机制 (比如自我保护, 与外界通信等等). 构建这个环境需要两种"人"来协调完成(用户态和内核 ...

  7. rest_framework框架之认证功能的使用和源码实现流程分析

    rest_framework框架之认证的使用和源码实现流程分析 一.认证功能的源码流程 创建视图函数 Note 创建视图函数后,前端发起请求,url分配路由,执行视图类,视图类中执行对应方法必须经过d ...

  8. freeswitch呼叫流程分析

    今天翻文档时发现之前整理的关于freeswitch呼叫相关的内容,写成博文分享出来也方便我以后查阅. 整体结构图 FreeswitchCore 模块加载过程 freeswitch主程序初始化时会从mo ...

  9. u-boot 流程分析

    u-boot 介绍: 对于计算机来说 , 从一开始上机通电是无法直接启动操作系统的 , 这中间需要一个引导过程 , 嵌入式Linux系统同样离不开引导程序 ,  这个启动程序就叫启动加载程序(Boot ...

随机推荐

  1. vue js格式化数字为金额格式

    /** * @description 格式化金额 * @param number:要格式化的数字 * @param decimals:保留几位小数 默认0位 * @param decPoint:小数点 ...

  2. Lyft 宣布开源基础设施工具管理平台 Clutch!

    今天我们很高兴地宣布,Lyft 的基础设施工具可扩展 UI 和 API 平台clutch已开放源代码,clutch使工程团队能够构建.运行和维护用户友好的工作流,这些工作流还包含特定于域的安全机制和访 ...

  3. 面渣逆袭:Java并发六十问,快来看看你会多少道!

    大家好,我是老三,面渣逆袭 继续,这节我们来盘一盘另一个面试必问知识点--Java并发. 这篇文章有点长,四万字,图文详解六十道Java并发面试题.人已经肝麻了,大家可以点赞.收藏慢慢看!扶我起来,我 ...

  4. Termux劣质的入门指南

    直入主题: 1.1 下载安装 Google下载(有条件的用!) F-droid下载(建议使用!) 也可以去酷安下载! 1.2 配置 apt update && apt upgrade ...

  5. DASCTF-Sept-X-浙江工业大学秋季挑战赛-pwn-wp

    目录 DASCTF-Sept-X-浙江工业大学秋季挑战赛-pwn-wp 总结 datasystem check分析 漏洞点 利用思路 exp hehepwn 漏洞点 exp hahapwn 漏洞点 e ...

  6. Solon Web 开发,二、开发知识准备

    Solon Web 开发 一.开始 二.开发知识准备 三.打包与运行 四.请求上下文 五.数据访问.事务与缓存应用 六.过滤器.处理.拦截器 七.视图模板与Mvc注解 八.校验.及定制与扩展 九.跨域 ...

  7. Android学习笔记2

    4,用intent在activity之间传递数据(两个Activity可能不是在一个应用程序中) (1),从MainActivity向HelloActivity传递参数123 package com. ...

  8. Cesium参考资源

    Reference resources cesium官网 cesium 下载 cesium官方文档 APIs cesium-workshop github cesium 官方示例 cesium git ...

  9. CSS快速入门(三)

    目录 字体相关调整 背景相关调整 控制背景平铺 调整背景图像的大小 边框属性 圆与圆角 盒模型 块级盒子(Block box) 和 内联盒子(Inline box) display属性 盒子模型 盒模 ...

  10. 进程(守护进程--互斥锁--IPC机制--生产者模型--僵尸进程与孤儿进程--模拟抢票--消息队列)

    目录 一:进程理论知识 1.理论知识 二:什么是进程? 三:僵尸进程与孤儿进程 1.僵尸进程 四:守护进程 1.什么是守护进程? 2.主进程创建守护进程 3.守护进程 五:互斥锁(模拟多人抢票) 1. ...