码迷,mamicode.com
首页 > 其他好文 > 详细

逆向分析 KiSystemService和KiFastCallEntry 调用内核函数部

时间:2020-12-17 13:02:57      阅读:6      评论:0      收藏:0      [点我收藏+]

标签:ima   win   jpg   png   load   函数   使用   函数参数   驱动   

逆向分析 KiSystemService和KiFastCallEntry 调用内核函数部分

一、回顾

前两篇博客,我逆向分析 KiSystemService 和 KiFastCallEntry 填充_KTRAP_FRAME 结构体的代码,二者
大同小异,主要的区别是 sysenter 只改了eip,cs,ss,虽然esp也改了,但是windows不使用,而是从TSS
里取esp0;另外sysenter并没有像中断门那样压栈,所以3环的 ss, esp, eflags, cs,eip都要在函数里依
次保存到 _KTRAP_FRAME.

技术图片

技术图片

本章节:逆向 KiSystemService和KiFastCallEntry 调用内核函数部分

1)如何根据系统服务号(eax中存储)找到要执行的内核函数?

2)调用时参数是存储到3环的堆栈,如何传递给内核函数?

二、SystemServiceTable 系统服务表(系统服务表不是SSDT)

技术图片

ServiceTable:指向函数地址表
Count:没有用
ServiceLimit:是这两张表的长度
ArgmentTable:指向函数参数表

通过上面图,我们可以得知以下信息:

?通过 _KTHREAD 可以找到系统服务表

?系统服务表又指向函数地址表和函数参数表

?有两张系统服务表,第一张是用来找内核函数的,第二张是找Win32k.sys驱动函数的。

三、逆向 KiSystemService和KiFastCallEntry 调用内核函数部分

在逆向分析调用内核函数部分时候,需要补充一下知识:

逆向三环API进入0环之前,无论是中断门还是快速调用进入,都会在eax存储一个值,我们称作为(系统调用号,服务号,)这个东西的低12位就是函数参数表和函数地址表的下标,
而第13位(下标12)如果是0,表示找第一张系统服务表(绿色的表),如果是1,那么找第二张表(黄色的表)。这点可以先记住,待会逆向的时候可以印证这个结论。

技术图片

技术图片

逆向分析 KiSystemService和KiFastCallEntry 调用内核函数部

标签:ima   win   jpg   png   load   函数   使用   函数参数   驱动   

原文地址:https://www.cnblogs.com/Besttwuya/p/14110770.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!