原文发表于百度空间,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的问题的更多相关文章

  1. 【旧文章搬运】KeUserModeCallback用法详解

    原文发表于百度空间及看雪论坛,2010-01-10 看雪论坛地址:https://bbs.pediy.com/thread-104918.htm  代码及附件可到这里下载=============== ...

  2. 【旧文章搬运】再谈隐藏进程中的DLL模块

    原文发表于百度空间,2009-09-17========================================================================== 相当老的话 ...

  3. 【旧文章搬运】为什么win32k.sys在System进程空间无法访问

    原文发表于百度空间,2010-01-02========================================================================== 玩过Sha ...

  4. 【旧文章搬运】Idle进程相关的一些东西

    原文发表于百度空间,2009-05-13========================================================================== Idle进 ...

  5. 【旧文章搬运】如何从EPROCESS辨别一个进程是否已退出

    原文发表于百度空间,2008-7-31========================================================================== 前面已经通过 ...

  6. 【旧文章搬运】Windows内核常见数据结构(进程相关)

    原文发表于百度空间,2008-7-24========================================================================== 进程的相关结 ...

  7. 【旧文章搬运】深入分析Win7的对象引用跟踪机制

    原文发表于百度空间及看雪论坛,2010-09-12 看雪论坛地址:https://bbs.pediy.com/thread-120296.htm============================ ...

  8. 【旧文章搬运】分析了一下360安全卫士的HOOK(二)——架构与实现

    原文发表于百度空间及看雪论坛,2009-10-14 看雪论坛地址:https://bbs.pediy.com/thread-99460.htm 刚发这篇文章的时候,因为内容涉及360的核心产品,文章被 ...

  9. 【旧文章搬运】Windows句柄分配算法(一)

    原文发表于百度空间,2009-04-04========================================================================== 分析了Wi ...

随机推荐

  1. 关于finfo_file函数获取文件mime值验证出错的问题

    今天在做图片上传 验证图片mime值时 突然发现  个别特殊情况下finfo_file 获取的MIME值不能直接使用, 依照官方的写法是 $finfo=finfo_open(FILEINFO_MIME ...

  2. Sencha touch 初体验

    一.什么是Sencha Touch? Sencha Touch是一个应用手持移动设备的前端js框架,与extjs是同一个门派的,它继承了extjs的优点和缺点.功能很强大,效果很炫丽,效率不高. 二. ...

  3. wdcp新开站点或绑定域名打不开或无法访问的问题

    一 用IP可以打开,但用域名打开网站显示到默认页面1  站点列表里是否有相应的网站信息 2  检查有没站点配置文件后台 >系统管理 >文件管理器 >虚拟主机站点文件(nginx,ap ...

  4. javascript 高级编程系列 - 继承

    1. 原型链继承 (缺点:子类继承父类的引用类型的属性值会在各个实例中共享,创建子类实例时无法向父类构造函数传递参数) // 定义父类构造函数 function SuperClass(father, ...

  5. JAVA调用命令行2

    package loadMBQL; import java.io.File; import java.io.FilenameFilter; public class LoadMBQL { /** * ...

  6. EasyIPCamera通过RTSP协议接入海康、大华等摄像机,摒弃私有SDK接入弊端

    本文转自博客:http://blog.csdn.net/xinlanbobo/article/details/53156742 近期工作中需要开发一套视频监控系统,实现WEB端.手机APP端预览局域网 ...

  7. libcurl以get方式请求服务器端文件

    static size_t callbackfunction(void *ptr, size_t size, size_t nmemb, void* userdata){    FILE* strea ...

  8. The basic principle of test case 修改引擎

    The basic principle of test case evaluation is that output resulting from running a test case is com ...

  9. Maximum likelihood from incomplete data via the EM algorithm (1977)

    Maximum likelihood from incomplete data via the EM algorithm (1977)  

  10. MFC获取电脑硬盘序列号(附源代码)

    在新建的project里面加入一个类  即:下面一个类  GetHDSerial.cpp <code class="hljs cs has-numbering" style= ...