lzwf4
驱动小牛
驱动小牛
  • 注册日期2002-10-10
  • 最后登录2006-06-09
  • 粉丝0
  • 关注0
  • 积分22分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
阅读:1691回复:10

修改一个WDM驱动在内存中的数据

楼主#
更多 发布于:2003-02-27 21:08
请问大家?在一个应用或WDM驱动中,要怎样才能修改另一个WDM驱动在内存中的数据?
lzwf4
驱动小牛
驱动小牛
  • 注册日期2002-10-10
  • 最后登录2006-06-09
  • 粉丝0
  • 关注0
  • 积分22分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-03-04 19:11
谢谢了,我想就是这个意思了。只要知道地址,就可以改了。
至于内核进程的内存页(代码节)是写保护的问题,有版主的文章:
 http://www.driverdevelop.com/lu0/sys/2k0312.html

你是说要怎么获取数据地址吧!!!!

这个我只要知道它加载地址或一个函数的地址就可以计算出某一个单元的地址了(对一个固定的版本来说)。
sun_ck
驱动牛犊
驱动牛犊
  • 注册日期2002-05-29
  • 最后登录2003-03-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-03-04 13:25
arthurtu兄说的很对
 

内核空间不管映射到哪个用户空间,地址都是一样的(就一份嘛),所以可以直接访问(包括函数?)。当然,还要考虑irql的问题。
 


只要你知道数据的地址,想怎么改,随便好了(IRQL一定要小心,一定要小于缺页中断,搞不好会崩的呦)。

 

能具体点吗??
 


你是说要怎么获取数据地址吧!!!!
pjf
pjf
驱动中牛
驱动中牛
  • 注册日期2001-07-08
  • 最后登录2006-10-23
  • 粉丝0
  • 关注0
  • 积分42分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-03-03 20:03
据我所知,好象在W2K和XP中的内核进程的内存页(代码节)都是写保护的
-------------------------------------------------------------------
是,不过你说的是数据,原驱动能访问你就能访问;若你想改代码,修改cr0.WP位先(装了softice就不必改了,呵呵)。



能具体点吗??
----------------------------------------------------------------
参见arthurtu回复


还有一些什么问题?
----------------------------------------------------------------
页是否被映射等等问题,你又说了是系统进程,那没用户空间,不必说什么了。
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
地下室#
发布于:2003-03-03 19:52
pjf的意思是说,
内核空间不管映射到哪个用户空间,地址都是一样的(就一份嘛),所以可以直接访问(包括函数?)。当然,还要考虑irql的问题。
lzwf4
驱动小牛
驱动小牛
  • 注册日期2002-10-10
  • 最后登录2006-06-09
  • 粉丝0
  • 关注0
  • 积分22分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-03-03 19:05
首先谢谢大家的回答!!

在内核模下,是不是内核进程可见另一个内核进程的虚拟空间?如果是的话那我是不是在一个WDM驱动中直接访问另一个WDM驱动在内存中的数据(只要知道了它的虚拟地址),对吗?

内核模式下,内核进程也是不能相互访问私有空间的,要在一个驱动访问另一个驱动的数据,就我用过的方法有以下两种:

1、利用软中断在两个内核驱动间交换数据。
注册软中断,写一个ISR,调用中断

2、当然是利用IRP在要访问数据的驱动中注册被访问数据驱动的回调函数。
怎么注册?
1、在被访问数据驱动中打开另一个驱动对象,向其发送带I/O control的IRP,参数是要注册的回调函数。
2、另一个驱动处理该IRP.
3、利用传过来的回调函数指针,就可以获得数据了。


我的问题是要改写的是一个系统内核进程,还不是二个进程都是我自己写的程序,我又能控制呢?

未公开内核调用KeAttachProcess可以让你访问另外一个进程的虚拟地址空间,详请可以参阅NT File System internals 第5章相关内容.


据我所知,好象在W2K和XP中的内核进程的内存页(代码节)都是写保护的,用你的方法也有点行不通啊!


数据在内核空间,知道地址直接访问,只需注意IRQL(想你该是这种情况)


能具体点吗??


在用户空间,参见上楼Tom_lyd版主答复,但存在诸多不可靠问题。


还有一些什么问题?
pjf
pjf
驱动中牛
驱动中牛
  • 注册日期2001-07-08
  • 最后登录2006-10-23
  • 粉丝0
  • 关注0
  • 积分42分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-03-03 18:39
请问大家?在一个应用或WDM驱动中,要怎样才能修改另一个WDM驱动在内存中的数据?


数据在内核空间,知道地址直接访问,只需注意IRQL(想你该是这种情况)

在用户空间,参见上楼Tom_lyd版主答复,但存在诸多不可靠问题。
Tom_lyd
驱动大牛
驱动大牛
  • 注册日期2001-09-02
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-03-03 16:15
未公开内核调用KeAttachProcess可以让你访问另外一个进程的虚拟地址空间,详请可以参阅NT File System internals 第5章相关内容.
Tom_lyd
sun_ck
驱动牛犊
驱动牛犊
  • 注册日期2002-05-29
  • 最后登录2003-03-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-03-03 16:00
在内核模下,是不是内核进程可见另一个内核进程的虚拟空间?如果是的话那我是不是在一个WDM驱动中直接访问另一个WDM驱动在内存中的数据(只要知道了它的虚拟地址),对吗?

内核模式下,内核进程也是不能相互访问私有空间的,要在一个驱动访问另一个驱动的数据,就我用过的方法有以下两种:

1、利用软中断在两个内核驱动间交换数据。
注册软中断,写一个ISR,调用中断

2、当然是利用IRP在要访问数据的驱动中注册被访问数据驱动的回调函数。
怎么注册?
1、在被访问数据驱动中打开另一个驱动对象,向其发送带I/O control的IRP,参数是要注册的回调函数。
2、另一个驱动处理该IRP.
3、利用传过来的回调函数指针,就可以获得数据了。
lzwf4
驱动小牛
驱动小牛
  • 注册日期2002-10-10
  • 最后登录2006-06-09
  • 粉丝0
  • 关注0
  • 积分22分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2003-03-01 14:34
我急用啊!
lzwf4
驱动小牛
驱动小牛
  • 注册日期2002-10-10
  • 最后登录2006-06-09
  • 粉丝0
  • 关注0
  • 积分22分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2003-02-28 21:48
在内核模下,是不是内核进程可见另一个内核进程的虚拟空间?如果是的话那我是不是在一个WDM驱动中直接访问另一个WDM驱动在内存中的数据(只要知道了它的虚拟地址),对吗?
游客

返回顶部