首页
社区
课程
招聘
[求助]为什么SYSCALL_INDEX宏取不到ZwReadVirtualMemory的index值?
发表于: 2009-3-31 10:43 6721

[求助]为什么SYSCALL_INDEX宏取不到ZwReadVirtualMemory的index值?

2009-3-31 10:43
6721
我用SYSCALL_INDEX宏 能够 取到ZwOpenProcess的index

#define SYSCALL_INDEX(_Function) *(PULONG)((PUCHAR)_Function+1)

NTSYSAPI NTSTATUS NTAPI ZwOpenProcess (
    OUT PHANDLE ProcessHandle,
    IN ACCESS_MASK DesiredAccess,
    IN POBJECT_ATTRIBUTES ObjectAttributes,
    IN PCLIENT_ID ClientId OPTIONAL);

g_nOpenIndex = SYSCALL_INDEX(ZwOpenProcess);
DbgPrint("g_nOpenIndex=%X", g_nOpenIndex);

这段代码能返回 g_nOpenIndex=7A

同样的代码,我定义
NTSYSAPI NTSTATUS NTAPI ZwReadVirtualMemory(
    IN HANDLE ProcessHandle,
    IN PVOID BaseAddress,
    OUT PVOID Buffer,
    IN ULONG BufferLength,
    OUT PULONG ReturnLength OPTIONAL);
g_nReadIndex = SYSCALL_INDEX(ZwReadVirtualMemory);
DbgPrint("g_nReadIndex=%X", g_nReadIndex);
代码能够正常编译,产生sys文件。
但是我在加载sys文件的时候会出错,本人新接触驱动,不知如何调试sys.

各位大大指导一下,是什么地方出现的问题?  sys文件要怎么才能调试?

[课程]Android-CTF解题方法汇总!

收藏
免费 1
支持
分享
最新回复 (7)
雪    币: 419
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
因为那函数没有导出
2009-3-31 11:09
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
按照我的理解要先找到ssdt表里对应的index,才能找到地址?
没有导出就不能Hook?
2009-3-31 11:13
0
雪    币: 419
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
xp
   
    mov edi, dword ptr [KeServiceDescriptorTable]
    mov ebx, [edi]
   
    mov esi, [ebx+(115h*4)]
    mov NtWriteVirtualMemory_addr ,esi

    mov esi, [ebx+(0bah*4)]
    mov NtReadVirtualMemory_addr,esi
2009-3-31 11:15
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
这种函数只能采用这种硬编码的方式吗?
0x0115        NtWriteVirtualMemory
0x00BA        NtReadVirtualMemory

没有一种方法,比如类似SYSCALL_INDEX宏那样能够动态的得到IDX值?
2009-3-31 11:40
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
还有这种值是固定的吗?
比如从xp->xp sp1 -> xp sp2-> xp sp3是否会变化?
xp-> windows 2003是否会变化?
2009-3-31 11:42
0
雪    币: 7651
活跃值: (523)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
7
索引很可能是变动的,不具有通用性。取索引从ntdll里面取最爽
2009-3-31 14:09
0
雪    币: 635
活跃值: (101)
能力值: ( LV12,RANK:420 )
在线值:
发帖
回帖
粉丝
8
不要试图从Zw*函数中取得SSDT INDEX,不管是NTDLL还是NTOSKRNL
这样在VISTA的某些情况下程序会出错

硬编码是比较好的方式
2009-3-31 14:16
0
游客
登录 | 注册 方可回帖
返回
//