2512|2

63

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

读取内核内存蓝屏,请大家来帮忙 [复制链接]

请问各位高手,如何正确读取内核内存呢?操作系统为Windows Xp Sp2,无杀软,无内核hook

1.我在驱动里尝试读取0x80000000处的内容,代码如下
UCHAR buffer[100];
UCHAR *pData = (UCHAR*)0x80000000;
memcpy( buffer, pData, 100 );

结果:蓝屏

2.查阅资料后认为是有读保护,于是用以下代码来检验
__try
{
   ProbeForRead( pData, 100, 4 );
   memcpy( buffer, pData, 100 );
}
__except
{
   KdPrint(("The memory can not be read!"));
}

结果:没看到KdPrint的输出,又是蓝屏

3.获取NtOpenProcess的地址0x805CAC46,执行以下代码
UCHAR buffer[4];
UCHAR *pData = (UCHAR*)0x805CAC46;
memcpy( buffer, pData, 4 );

结果:成功获取到内容,和反汇编ntoskrnl.exe中NtOpenProcess的前4字节一致

通过以上过程,我想问各位高手,为什么0x80000000的内存不能读,而NtOpenProcess是可以的读的。既然0x80000000不能读,那ProbeForRead函数又没有抛出异常,或是直接崩溃了呢?请教大家还有没有好的读取内核内存的方法?
众所周知,破写保护,可以用如下代码
  {
     cli
     mov eax,cr0
     and eax,~0x10000
     mov cr0,eax
  }
但是没有发现类似的破读保护的代码,请各位帮帮忙,十分感谢。

最新回复

__try可以用 Physcial address要map后转成Virtual Address,才能使用,怎么能直接用指针操作?  详情 回复 发表于 2009-9-23 12:39
点赞 关注

回复
举报

79

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
0x80000000应该是未分配的内存地址,所以不可访问。
__try没有试过,不清楚在内核模式下是否可以正常使用。
NtOpenProcess是内核函数,内核代码都是可执行且可读的。
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
__try可以用
Physcial address要map后转成Virtual Address,才能使用,怎么能直接用指针操作?
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表