【旧文章搬运】关于在指定进程调用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 ...
随机推荐
- 改变其他iframe的src
window.parent.$("#ifr").location="????";);来改变
- 安装odoo 9实录
安装Ubuntu,省略 下载 odoo源码 使用 git 下载源码 mkdir /opt/openerp/server cd /opt/openerp/server git clone https:/ ...
- Jememeter和Loadrunner测试MySQL性能
From:http://blog.csdn.net/testingstar/article/details/60579454 MySQL数据库性能测试的方法 前置条件: 安装系统:windows 7 ...
- 使用react全家桶制作博客后台管理系统 网站PWA升级 移动端常见问题处理 循序渐进学.Net Core Web Api开发系列【4】:前端访问WebApi [Abp 源码分析]四、模块配置 [Abp 源码分析]三、依赖注入
使用react全家桶制作博客后台管理系统 前面的话 笔者在做一个完整的博客上线项目,包括前台.后台.后端接口和服务器配置.本文将详细介绍使用react全家桶制作的博客后台管理系统 概述 该项目是基 ...
- jmeter后置处理器之正則表達式提取器
新浪围脖>@o蜗牛快跑o 使用这个组件时,注意使用带分组的正則表達式 使用正则分组方便提取干净数据.以免再次处理数据字符串 正則表達式在线工具推荐:点击打开链接 正則表達式语法參考:点击打 ...
- TensorFlow从入门到实战资料汇总 2017-02-02 06:08 | 数据派
TensorFlow从入门到实战资料汇总 2017-02-02 06:08 | 数据派 来源:DataCastle数据城堡 TensorFlow是谷歌基于DistBelief进行研发的第二代人工智能学 ...
- 关于Yapi出现 请求异常,请检查 chrome network 错误信息...
项目开发中由于后台接口还没有,打算使用mock模拟本地数据,配置好接口,运行接口出现 检查了cross-request插件是否安装以及激活,发现没有问题,最后发现是我的请求地址写错了,,这里请求地址需 ...
- 宜信开源微服务任务调度平台(SIA-TASK)
背景 无论是互联网应用或者企业级应用,都充斥着大量的批处理任务.常常需要一些任务调度系统帮助开发者解决问题.随着微服务化架构的逐步演进,单体架构逐渐演变为分布式.微服务架构.在此的背景下,很多原先的任 ...
- 解压 boot.img
./split_bootimg.pl boot.img Page size: 2048 (0x00000800) Kernel size: 7062084 (0x006bc244) Ramdisk s ...
- EasyDarwin EasyClient开源流媒体播放器,支持多窗口显示
EasyDarwin开源团队开源的EasyClient客户端将支持流媒体采集.编码.推送.播放.抓图.录像.Onvif 等全套功能(大家持续关注我们Github的commit),其中播放功能是开源流媒 ...