【旧文章搬运】关于在指定进程调用KeUserModeCallback的问题
原文发表于百度空间,2010-10-07
==========================================================================
由于KeUserModeCallback的工作原理,对调用者线程和进程有以下要求:
1、调用者线程不能是纯内核线程(由PsCreateSystemThread创建的线程)
2、调用者线程必须在其所属进程中调用KeUserModeCallback
3、调用者进程必须加载了user32.dll
原因很简单,因为KeUserModeCallback需要操作调用者线程ring3的栈,第1条不满足是因为纯内核线程没有ring3栈,也就是没有UserStack。所以想在DriverEntry等一些地方调用是不行的,即使Attach到其它进程也不行~~
第2条的限制是因为如果你使用KeAttachProcess/KeStackAttachProcess改变了进程环境,那么线程KTHREAD中保存的ring3栈指针(也就是KTHREAD.TrapFrame.HardwareEsp)在当前进程环境中将是无效的,而接下来就要向ring3栈中复制参数,即使有效也会因此破坏当前进程的数据。直接现象是KeUserModeCallback中的ProbeForWrite检查用户栈是否可写时将产生异常。
我的解决方法是Hook某个经常被调用的地方,然后检查当前进程是不是指定的进程,是的话就call ring3,call成功后恢复此Hook。这种方法有点“守株待兔”的感觉。。。
第1条和第2条的原因其实很相似,即线程本身并不会因进程环境的不同而改变,即使切换到一个普通进程,那么内核线程还是内核线程,UseESP仍然是原进程里的UserESP,在新进程中是无效的。
第3条的限制是因为如果不加载user32.dll,那么PEB->KernelCallbackTable将会为NULL。不过这个问题不是大问题,因为我们可以自己填充这个值,当然,还得多做点其它工作啦。或者DIY一下ntdll!KiUserCallbackDispatcher也可以~~
【旧文章搬运】关于在指定进程调用KeUserModeCallback的问题的更多相关文章
- 【旧文章搬运】KeUserModeCallback用法详解
原文发表于百度空间及看雪论坛,2010-01-10 看雪论坛地址:https://bbs.pediy.com/thread-104918.htm 代码及附件可到这里下载=============== ...
- 【旧文章搬运】再谈隐藏进程中的DLL模块
原文发表于百度空间,2009-09-17========================================================================== 相当老的话 ...
- 【旧文章搬运】为什么win32k.sys在System进程空间无法访问
原文发表于百度空间,2010-01-02========================================================================== 玩过Sha ...
- 【旧文章搬运】Idle进程相关的一些东西
原文发表于百度空间,2009-05-13========================================================================== Idle进 ...
- 【旧文章搬运】如何从EPROCESS辨别一个进程是否已退出
原文发表于百度空间,2008-7-31========================================================================== 前面已经通过 ...
- 【旧文章搬运】Windows内核常见数据结构(进程相关)
原文发表于百度空间,2008-7-24========================================================================== 进程的相关结 ...
- 【旧文章搬运】深入分析Win7的对象引用跟踪机制
原文发表于百度空间及看雪论坛,2010-09-12 看雪论坛地址:https://bbs.pediy.com/thread-120296.htm============================ ...
- 【旧文章搬运】分析了一下360安全卫士的HOOK(二)——架构与实现
原文发表于百度空间及看雪论坛,2009-10-14 看雪论坛地址:https://bbs.pediy.com/thread-99460.htm 刚发这篇文章的时候,因为内容涉及360的核心产品,文章被 ...
- 【旧文章搬运】Windows句柄分配算法(一)
原文发表于百度空间,2009-04-04========================================================================== 分析了Wi ...
随机推荐
- JD笔试试题(凭记忆写的+人生感悟 try finally )
京东笔试:技术篇(一套卷.包含測试.算法,研发) 一:填空题(4分 * 15) 15 个 涉及的面很广的选择题,可是比較側重基础.包含数据结构的.c++类的,操作系统的,计算机网络的. 二:编程题(2 ...
- pycharm5.0 激活方式
Pycharm5注册方式 0x1 ,安装 0x2 , 调整时间到2038年. 0x3 ,申请30天试用 0x4, 退出pycharm 0x5, 时间调整回来. ##注册方法2### 注册方法: ...
- Audio原理图设计
1.DMIC 1)当双MIC时,通过MIC上的Selection PIN脚PULL U/D进行左右channel选择.
- C语言各种keyword
1.register 在函数内定义变量时.默认是 auto 类型,变量存储在内存中,当程序用到该变量时,由控制器发出指令将内存中该变量的值送到运算器,计算结束后再从运算器将数据送到内存.假设一个变量用 ...
- Sublime Text3 配置设置攻略
转载:http://cloudbbs.org/forum.php?mod=viewthread&tid=3620 sublime本身功能有限,我们需要装上一些插件使其变得强大.sublime在 ...
- kubernetes的Service Account和secret
系列目录 Service Account Service Account概念的引入是基于这样的使用场景:运行在pod里的进程需要调用Kubernetes API以及非Kubernetes API的其它 ...
- 【ZZ】Visual C++ 6.0 精简安装版(支持VA、ICC 等等安装)
(2012-04-22 08:10:10) 标签: it 分类: 软件_Software Visual C++ 6.0 精简安装版(支持VA.ICC 等等安装) 2012-04-16 21:07 想找 ...
- HSSFWorkbook
public ActionResult excelPrint() { HSSFWorkbook workbook = new HSSFWorkbook();// 创建一个Excel文件 HSSFShe ...
- Lua_第17 章 数学库
第17 章 数学库 在这一章中(以下关于标准库的几章中相同)我的主要目的不是对每个函数给出完整地说明,而是告诉你标准库可以提供什么功能.为了可以清楚地说明问题,我可能 会忽略一些小的选项或者行为.基本 ...
- mysql-connector-java与mysql版本的对应
记录下mysql-connector-java与mysql版本的对应关系,已方便以后参考,这是最新版本对应, 时间:2017年5月23日 官网文档地址: https://dev.mysql.com/d ...