首页
社区
课程
招聘
[求助]关于Win7-32位中NtReadVirtualMemory的疑惑
发表于: 2015-5-17 17:57 5031

[求助]关于Win7-32位中NtReadVirtualMemory的疑惑

2015-5-17 17:57
5031
1.经查,NtReadVirtualMemory在ntdll.dll中能找到倒出,与SSDT中的符合。
2.用[PC Hunter]检测,发现 NtReadVirtualMemory 函数位于[ntkrnlpa.exe]中。(不知为什么会这样)
3.查找物理地址,发现代码对不上。

实体机ntkrnlpa.exe ,基址0x84015000,大小0x415000
NtReadVirtualMemory[ntkrnlpa.exe]

[PC Hunter Professional][[Disasm]]: 70
地址		二进制		汇编
84276D9B		6A 18		push   18
84276D9D		68 68C70684		push   8406C768
84276DA2		E8 19DCE1FF		call   840949C0
84276DA7		64:8B3D 24010000		mov    edi, dword ptr fs:[124]
84276DAE		8A87 3A010000		mov    al, byte ptr [edi+13A]
84276DB4		8845 E4		mov    byte ptr [ebp-1C], al
84276DB7		8B75 14		mov    esi, dword ptr [ebp+14]
84276DBA		84C0		test   al, al


函数头84276D9B-基地址84015000 = 261D9B(相对RAV)


用[CFF Explorer]查节表,应位于节PAGE中,节RAV起点为12B200
261D9B-12B200 = 136B9B(RAV2)
物理地址为 16D000 + 136B9B = 2A3B9B


用UE打开后,发现函数的字节对不上。

我本来是想从文件中读取重定位表,修正地址的,
有劳指点,谢谢

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

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 22
活跃值: (242)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
2
Nt系列的函数在ntdll中只是一个“空壳”,会调用内核层的SSDT函数
.text:7C92D9E0 B8 BA 00 00 00      mov     eax, 0BAh             ; NtReadVirtualMemory
.text:7C92D9E5 BA 00 03 FE 7F       mov     edx, 7FFE0300h
.text:7C92D9EA FF 12                      call    dword ptr [edx]
.text:7C92D9EC C2 14 00                retn    14h
这是ntdll中的NtReadVirtualMemory的汇编,只是进入内核,调用服务号为 BAh 的在ntkrnlpa.exe中的真正实现,PCHunter扫描的是ntos中的SSDT表,不是ntdll中的。
2015-5-18 19:18
0
雪    币: 101
活跃值: (154)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
非常感谢GeekCheng同学的解答,确实是这样。
其实我只是想搞清楚SSDT表中NtReadVirtualMemory的重定位,能找到函数的文件偏移吗
2015-5-19 08:12
0
雪    币: 22
活跃值: (242)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
4
你可以从SSDT表中获得NtReadvirtualMemory的绝对地址,然后遍历文件中重定位表,如果重定位表里指定的要修复的内容和NtReadVirtualMemory的地址一样,再进行修复。
2015-5-23 07:30
0
游客
登录 | 注册 方可回帖
返回
//