原文发表于百度空间,2009-07-14
==========================================================================

标准的驱动与ring3的通信过程是这样的:
驱动中创建设备,并为设备创建符号链接,ring3用CreateFile打开符号链接得到设备句柄,然后DeviceIoControl发送ControlCode
DeviceIoControl的内容被封装成IRP到达Device,Device其所属Driver的对应派遣例程对IRP进行处理,处理完后IoCompleteRequest完成该IRP最后返回到ring3.
如果有必要的话,还得用Event进行一下同步~

如果没有Device(甚至还可能没有DriverObject),这一切该如何进行?
道理其实是很简单的,我们不要拘泥于某些固定的东西不变,来好好想一想。
先扯点通信的东西。通信,就是把信息从发信者传送到收信者的过程,信息传输的通道就是信道。
我们的目标是把信息从ring3传递到驱动中去,上面的标准通信过程,其实只不过是相当于我们自己建立了一个标准信道
没有Device,只是说不能用标准信道来通信了,但是还可以有别的通信方法,只要我们能把信息从ring3传递给驱动,任何方法都可以~~
我来随便说几种吧:

一、共享内存+Event
ring3用CreateFileMapping创建一块命名的共享内存,还有一个事件对象,ring0中获取相应的对象,共享内存中的内容事先定好格式,比如哪里是ControlCode,哪里是InputLength,哪里是OutputLength,哪里是InputBuffer,哪里是OutputBuffer,构成一个简单的协议包,这其实相当于一个变形的IRP结构~~当需要通信的时候,ring3将相应的内容写入共享内存,然后设置Event通知驱动,驱动收到后就可以从共享内存中取到ControlCode,InputLen,InputBuffer等等信息,进行相应处理就可以了,处理完后再以Event通知ring3,ring3就可以从OutputBuffer中获取处理结果了,不过这里没有考虑异步模式,一般自己的驱动也很少用异步~

二、Hook IopXxxControlFile
NtDeviceIoControlFile直接调用IopXxxControlFile进行处理,很容易Hook(Call替换方式hook最好,安全),也没有SSDT Hook那么扎眼。Hook该函数最大的好处是你仍然可以使用标准的DeviceIoControl来发送ControlCode和驱动通信.Hook成功后,可以打开任意一个Device,比如Beep,,然后就可以用DeviceIoControl发送ControlCode了,当然ControlCode得有点特殊标记(比如某个特殊标志位),总之你得能认出来这是你的ring3 App发来的ControlCode就行,然后Hook函数中如果是自己的ControlCode就进行相应处理,否则调用原始函数让系统处理去吧。或者自己使用一个特殊的无效句柄(但是要保证能通过检查到达ring0)来发DeviceIoControl,驱动中检查此句柄是否是某特殊值,是则认为是自已人发的ControlCode,进行处理就OK了。

稍微变形一点,直接Hook掉Beep的IRP_MJ_DEVICE_CONTROL派遣例程,然后ring3直接打开Beep用DeviceIoControl发ControlCode就行了~~

三、Hook NativeAPI
先举两个例子:
HideToolz没有Device,是使用ZwTerminateProcess来通信的~
某游戏的驱动用ZwQueryVirtualMemory来通信~~
不需要说什么了吧?NativeAPI都要经过syscall进入ring0,然后可能继续到达某些XX位置,只要在适当的位置拦截一下取走自己的信息就行了~
其实只要能把信息传递给驱动,很多API都可以(当然纯ring3实现的API不行哦)

方法还有好多好多,标准方法就那么一两种,但是非标准的方法有多少种?尽情发挥想像吧~~

转载于:https://www.cnblogs.com/achillis/p/10181781.html

【旧文章搬运】无Device的驱动如何通信相关推荐

  1. 【旧文章搬运】Windbg+Vmware驱动调试入门(一)---Windbg的设置

    原文发表于百度空间,2009-01-08 ========================================================================== Wind ...

  2. 【旧文章搬运】360安全卫士HookPort.sys完美逆向

    原文发表于百度空间,2009-11-08 这是第一次逆向一个企业级安全产品的核心代码,并完美替换原驱动正常工作 ============================================ ...

  3. 【旧文章搬运】PE感染逆向之修复(Serverx.exe专杀工具出炉手记)

    原文发表于百度空间,2008-10-4 看雪论坛发表地址:https://bbs.pediy.com/thread-73948.htm ================================ ...

  4. 【旧文章搬运】Win7可变对象头结构之InfoMask解析

    原文发表于百度空间,2010-08-11 ========================================================================== 对Win ...

  5. 【旧文章搬运】Windows中全局钩子DLL的加载过程

    原文发表于百度空间,2011-03-24 ========================================================================== 看雪上别 ...

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

    原文发表于百度空间,2008-7-24 ========================================================================== 线程是进程 ...

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

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

  8. LINUX IIO子系统分析之六 iio device的驱动开发流程说明

    前面五章我们基本上把IIO 子系统的内部设计实现均作了说明,本章我们将说明iio device的驱动开发流程,本章的主要内容大致安排如下: 一.IIO子系统的关键技术点总结 二.IIO DEVICE的 ...

  9. Ueditor编辑旧文章,从数据库中取出要修改的内容

    Ueditor编辑旧文章,从数据库中取出要修改的内容然后放置到编辑器中: <script type="text/plain" id="editor"> ...

最新文章

  1. 说明:最新谷歌AI智商不超过6岁研究来自中国科学院而非美国康内尔大学
  2. hdu 5492(矩阵模型的变形)
  3. SAP CRM WebClient UI on new focus工作原理
  4. 2-用EasyNetQ连接RabbitMQ(黄亮翻译)
  5. 60-100-020-使用-MySQL 的Show Profile命令
  6. 大数据之-Hadoop3.x_Yarn_生产环境核心参数配置案例---大数据之hadoop3.x工作笔记0150
  7. SQL Server错误代码及解释(一)
  8. python16-前端之课堂笔记
  9. reflection java_Java Reflection (JAVA反射)
  10. 快手无水印下载(python小爬虫)
  11. Linux 下安装 yum
  12. Gartner首发中国数据库市场指南,巨杉数据库代表数据库领域厂商入选
  13. python 判定n阶方矩是否为上三角矩阵
  14. 使用Mono.Cecil对MSIL进行注入
  15. android p适配三星s86,感受三星S8屏幕震撼 先过APP适配这道坎
  16. 微信小程序之商品发布+编辑功能(多图片上传功能)
  17. unity anysdk android,Unity3d Android SDK接入解析(四)通用的Android SDK接入中间件
  18. 帮我用js写一个微信聊天那种气泡效果
  19. win7系统iis建立ftp服务器,win7 iis建立ftp服务器
  20. 面试题——正则表达式

热门文章

  1. 树莓派使用STEP6:安装git
  2. 回文_Manacher算法
  3. java代理通俗简单解析
  4. web前端开发怎么样学习?看这份web前端学习路线
  5. ODP.net与Oracle连接
  6. html中a标签如何设置行宽高
  7. Linux下出现ping:unknown host xxx.xxx问题的解决办法
  8. (运维日志)在win7安装Oracle并部署Oracle数据库
  9. spgridview的过滤功能回调时发生错误~
  10. nacos配置刷新失败导致的cpu上升和频繁重启,nacos配置中心源码解析