首页
社区
课程
招聘
[求助]ZwMapViewOfSection怎么会这样?
发表于: 2009-6-26 21:11 11639

[求助]ZwMapViewOfSection怎么会这样?

2009-6-26 21:11
11639
void OpenKernelFile()
{
  NTSTATUS status;
  HANDLE fileHandle;
  UNICODE_STRING usDllName;
  IO_STATUS_BLOCK  IoStatusBlock;

  RtlInitUnicodeString(&usDllName, L"\\Device\\HarddiskVolume1\\Windows\\System32\\ntdll.dll");

  
  OBJECT_ATTRIBUTES oa = {sizeof oa, 0, &usDllName, OBJ_CASE_INSENSITIVE};
  
  status = ZwOpenFile(&fileHandle, FILE_EXECUTE | SYNCHRONIZE, &oa, &IoStatusBlock, FILE_SHARE_READ, FILE_SYNCHRONOUS_IO_NONALERT);

  HANDLE SectionHandle;
  oa.ObjectName = NULL;

  #define SEC_IMAGE    0x01000000

  status =  ZwCreateSection(&SectionHandle, SECTION_ALL_ACCESS, &oa, 0, PAGE_EXECUTE_READ, SEC_IMAGE, fileHandle);

  PVOID BaseAddress = NULL;
  ULONG size = 0;

  status =  ZwMapViewOfSection(SectionHandle, NtCurrentProcess(), &BaseAddress, 0, 1000, 0, &size, (SECTION_INHERIT)1, MEM_TOP_DOWN, PAGE_READWRITE);

  ZwClose(fileHandle);
  ZwClose(SectionHandle);

}

这段代码是在R0下运行,
可是BaseAddress得到的地址值(也就是映射的基址)非常小0x001f0000
这可是在R0没法访问的,蓝屏
有哪位达人能告诉我怎么做呢

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (15)
雪    币: 231
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
高手呢都在睡觉?
2009-6-26 21:27
0
雪    币: 709
活跃值: (2420)
能力值: ( LV12,RANK:1010 )
在线值:
发帖
回帖
粉丝
3
ZwCreateSection( &SectionHandle, SECTION_ALL_ACCESS, &ObjectAttributes, 0, PAGE_EXECUTE, SEC_IMAGE, FileHandle );

试试。。
2009-6-26 23:03
0
雪    币: 7651
活跃值: (523)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
4
楼主重复发帖不说,十分钟没人理就觉得高手都在睡觉…
2009-6-26 23:12
0
雪    币: 231
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
试过了。之前就是这个参数,别人代码也是这个参数,可是就是无法访问BaseAdress
2009-6-26 23:19
0
雪    币: 231
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
本想做一个自己ARk的东东,发现实现起来困难重重,
对内核还是很陌生得很,还得多多向高手学习。
2009-6-26 23:24
0
雪    币: 581
活跃值: (149)
能力值: ( LV12,RANK:600 )
在线值:
发帖
回帖
粉丝
7
这年头...啥都是ARK....
2009-6-26 23:54
0
雪    币: 231
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
8
郁闷中,查看了好多家代码,甚至直接用别人的代吗
可是都不能得到映射文件的基址,这可真是邪门了
2009-6-27 00:00
0
雪    币: 231
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
9
谁救救我啊,
2009-6-27 11:28
0
雪    币: 581
活跃值: (149)
能力值: ( LV12,RANK:600 )
在线值:
发帖
回帖
粉丝
10
status =  ZwCreateSection(&SectionHandle, SECTION_ALL_ACCESS, &oa, 0, PAGE_EXECUTE_READ, SEC_IMAGE, fileHandle);

SECTION_ALL_ACCESS 的权限过于大...如果你的系统装了什么安全软件..那可能是失败的...
另外你 ZwClose(SectionHandle);
2009-6-27 11:46
0
雪    币: 231
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
11
我的是一个很干净的xp sp1虚拟机
ZwClose(SectionHandle);只是一个示例
我需要的是把文件映射到内核空间,然后读取PE文件
从PE文件中读取有用的信息,对比什么地方给hook住了
我看大牛们也是这么干的,怎么我使用的时候就不行了呢
搞得超超郁闷的
2009-6-27 13:05
0
雪    币: 290
活跃值: (20)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
12
L"\\Device\\HarddiskVolume1\\Windows\\System32\\ntdll.dll"
确认你这个路径正确了??
你用L"\\SystemRoot\\System32\ntdll.dll"替换看看
2009-6-29 16:51
0
雪    币: 135
活跃值: (103)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
13
初始化 OBJECT_ATTRIBUTES 不用标准的宏,所有的函数不检查返回值
……
2009-6-29 17:29
0
雪    币: 211
活跃值: (55)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
权限搞得有点乱哦
2009-6-30 00:50
0
雪    币: 129
活跃值: (31)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
有理,....你这样,问题到底在哪还不清楚呢...你这函数调用的返回何必 status =呢,你没用到嘛。。

问题总得自己想法解决。哪个函数上出了问题,在求助。。

-------

要我是你,我会弄明白这代码意思啦,什么原理啦,我是菜鸟,我打个比方吧:如果代码没问题,BaseAdd怎么不是想要的,是否会和当前进程上下文有关呢?或者其他环境因素啦什么的...多考虑嘛,你既然代码也是用别人的,别人可以你不可以,那就不是代码问题了..
2009-6-30 09:52
0
雪    币: 290
活跃值: (20)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
16
原来是说影射出来的地址不是内核地址,没看清楚还以为说是没影射成功呢
这是正常现象,其实解决办法很简单,自己在ExAllocatePool一个非分页内存然后拷贝进这里就OK了
如果你影射出来的地址不是属于内核地址范围那么其他进程使用时先KeAttachProcess
2009-6-30 14:41
0
游客
登录 | 注册 方可回帖
返回
//