首页
社区
课程
招聘
[旧帖] NtReadVirtualMemory地址问题 0.00雪花
发表于: 2011-11-12 22:03 7440

[旧帖] NtReadVirtualMemory地址问题 0.00雪花

2011-11-12 22:03
7440
ULONG MyGetFunAddress( IN PCWSTR FunctionName)
{
        UNICODE_STRING UniCodeFunctionName;
        RtlInitUnicodeString( &UniCodeFunctionName, FunctionName );
        return (ULONG)MmGetSystemRoutineAddress( &UniCodeFunctionName );   
}
为什么MyGetFunAddress(L"NtReadVirtualMemory");返回0失败;
而MyGetFunAddress(L"NtOpenThread");返回成功

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 541
活跃值: (654)
能力值: ( LV12,RANK:250 )
在线值:
发帖
回帖
粉丝
2
NtReadVirtualMemory函数是未导出的。
MmGetSystemRoutineAddress只能得Nt的导出函数。所以NtReadVirtualMemory得的是NULL。

要想得到NtReadVirtualMemory函数地址,需要从SSDT入手。或者用特征码定位。
2011-11-12 22:43
0
雪    币: 100
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
如果NtReadVirtualMemory被其它的驱动HOOK了,我得到的地址多不是真实的地址;
我想得到真实的地址,难到用特征码在内核中慢慢的搜?
或者用文件映射内核文件,自已从文件中找?
2011-11-13 18:17
0
雪    币: 75
活跃值: (53)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
用文件映射内核文件,并配合特征码,内核文件中找真实的地址
2011-11-13 20:36
0
雪    币: 75
活跃值: (53)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
具体实现,参照WRK函数
MiFindExportedRoutineByName (
    IN PVOID DllBase,
    IN PANSI_STRING AnsiImageRoutineName
    )

其实就是遍历PE文件导出表,获取函数地址
2011-11-13 20:47
0
雪    币: 2242
活跃值: (488)
能力值: ( LV9,RANK:200 )
在线值:
发帖
回帖
粉丝
6
map ntdll.dll,遍历导出表找到ZwReadVirtualMemory,从而获得该函数ID.
然后同法获得SSDT,根据该ID就能得到该函数地址了
2011-11-14 17:41
0
游客
登录 | 注册 方可回帖
返回
//