能力值:
( LV9,RANK:200 )
2 楼
自己顶下 。。。。
能力值:
( LV9,RANK:200 )
3 楼
帮帮忙 大哥们 给点鼓励吧
能力值:
( LV9,RANK:180 )
4 楼
你的图像太无敌了
能力值:
( LV9,RANK:160 )
5 楼
PULONG p=&(SaveSSDT[122]);
*p=XXXXXX;
*((PULONG)(&SaveSSDT[122]))=XXXXXX;
强烈推荐去LZ看谭老爷子的C语言
能力值:
( LV9,RANK:200 )
6 楼
谢谢老兄 我是看了 别人的HOOK 是这样 未能了解别人的正常 我的不正常。
用你给的方法还是不行。。。。
能力值:
( LV8,RANK:130 )
7 楼
楼主是不是没有关系内存保护?
能力值:
( LV9,RANK:200 )
8 楼
弄了 这个东西早弄了 ,试验了N种方法也不能XX
能力值:
( LV9,RANK:160 )
9 楼
道理没有错,因为base就是第一项,我的赋值语句绝对正确
那就不是赋值上的问题了
可以写一个简单的ring3代码来印证
#include"stdio.h"
#define ULONG unsigned long
#define PULONG unsigned long *
void __stdcall testfun(void)
{
printf("test!\n");
return ;
}
typedef struct DDD
{ ULONG Pointer;
char sss;
unsigned short bbs;
}DATA;
DATA Data[10]={0};
typedef void (__stdcall* FUN)(void);
void main()
{
*((PULONG)(&Data[4]))=(ULONG)testfun;
FUN p=(FUN)(Data[4].Pointer);
p();
getchar();
}
能力值:
( LV9,RANK:200 )
10 楼
实在没有办法了,我估计是参数的问题了,原先我自定义函数 比如
NTSTATUS MyNtOpenProcess(
OUT PHANDLE ProcessHandle,
IN ACCESS_MASK DesiredAccess,
IN POBJECT_ATTRIBUTES ObjectAttributes,
IN PCLIENT_ID ClientId OPTIONAL)
自定义函数字节大小问题我没有想到好办法搞定,有一个笨方法就是90 懒得弄,
为了省事 直接定义 UCHAR MyNtOpenProcess[0X300]
然后把原始代码复制重定位到 MyNtOpenProcess里
经过试验 不管 SSDT 和INLINE 都很正常
在试验下吧
有没有好方法 让自定义函数 空间大点
能力值:
( LV9,RANK:200 )
11 楼
真晕了。。。。又试验了用
NTSTATUS MyNtOpenProcess(
OUT PHANDLE ProcessHandle,
IN ACCESS_MASK DesiredAccess,
IN POBJECT_ATTRIBUTES ObjectAttributes,
IN PCLIENT_ID ClientId OPTIONAL)
也不行 哇哇哇。。。
能力值:
( LV9,RANK:200 )
12 楼
好4点了 终于弄明白了 期待高手解答
*((ULONG*)SaveSSDT[122]) 这个是正确的 唯一的是 地址不对 我这个地址确实是 NTOPENPROCESS
的地址,上次没办法了,重新编写了一个驱动 ,通过分析发现 要HOOK NTOPENPROCESS 并不是把MYNTOPENPROCESS 赋值给NTOPENPROCESS
那样的 而是nt!KiServiceTable+0x1e8 这个地址
流程是
ULONG address;
address=nt!KiServiceTable+0x1e8 ;
MemOpen();
*((ULONG*)address)=MYNtOpenProcess;
MemClose();
这样一点问题也没有,呜呜呜.
期待高手帮忙解答下。
能力值:
( LV9,RANK:280 )
13 楼
分析:
ULONG address;
address=nt!KiServiceTable+0x1e8
这个address是指向NtOpenProcess地址的指针,也就是说 *address的内容才是NtOpenProcess的地址;
那么,现在一切都明白了吧,你要HOOK NtOpenProcess,其实就是要用你的自定义函数地址替换掉:
*address, 如:
*((ULONG*)address)=MYNtOpenProcess;
LZ要的是这个答案吗...
要深刻理解指针的含义啊,如果懂汇编,那么结合内存寻址更能帮助理解指针...
能力值:
( LV9,RANK:280 )
14 楼
更加简单点,可以这样说:
你先前的写法,仅仅是替换掉了NtOpenProcess的函数地址的内容;然而,系统调用通过SSDT计算
NtOpenProcess的服务号偏移+基址,得出一个地址,然后取这个地址的内容才是NtOpenProcess的调用入口,这个地址你是没有改变的。相反,却改了一些不该改的东西...所以蓝屏了
能力值:
( LV9,RANK:200 )
15 楼
谢谢了楼上 终于明白了。