首页
社区
课程
招聘
[己解决]关于HOOK NtReadVirtualMemory
发表于: 2012-2-5 09:40 6244

[己解决]关于HOOK NtReadVirtualMemory

2012-2-5 09:40
6244
已经成功HOOK了,但是我想输出BaseAddress和BufferLength值不对。。。

我记得好像这些是内核地址,怎么转换才能正确输出。

#pragma PAGEDCODE
extern "C" NTSTATUS __declspec(naked) __stdcall HookNtReadVirtualMemory(
                                                IN HANDLE ProcessHandle,
                                                IN PVOID BaseAddress,
                                                OUT PVOID Buffer,
                                                IN ULONG BufferLength,
                                                OUT PULONG ReturnLength OPTIONAL
                                                )
{
        KdPrint(("=== Addr:%d Size:%d ===", (int*)BaseAddress, (int*)BufferLength));
        __asm
        {
                        push 0x1c
                        push 0x804daef0
                        mov eax, pfnRealNtReadVirtualMemory                        add eax, 7
                        jmp eax
        }
}

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 1530
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
KdPrint(("=== Addr:0x%x Size:0x%x ===", BaseAddress, BufferLength));

這樣試下
2012-2-5 10:08
0
雪    币: 206
活跃值: (86)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
3
这样不行哟。
BaseAddress 输出的是r3堆栈的地址。(我调试了下,这个地址里就有所有的参数的正确的r3地址,不过怎么读出来呢。)
BufferLength输出的是内核地址。

我想知道读取的地址和大小。要是r3的正确的地址。
2012-2-5 10:19
0
雪    币: 206
活跃值: (86)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
4
搞定了。
像这样就行了。
        KdPrint(("=== Addr:%x Size:%x ===", *(ULONG*)((UCHAR*)BaseAddress+4), *(ULONG*)((UCHAR*)BaseAddress+0xc)));

原来BaseAddress r3的堆栈地址,
*BaseAddress 就是 r3的进程句柄
*(BaseAddress+4) 就是 r3 的要读取的地址
*(BaseAddress+8) 就是 r3 绶冲区地址。
。。。
2012-2-5 10:32
1
游客
登录 | 注册 方可回帖
返回
//