首页
社区
课程
招聘
[原创]win7 x64 下的Object Hook
发表于: 2015-9-1 04:07 14647

[原创]win7 x64 下的Object Hook

2015-9-1 04:07
14647

x86下Object Hook很简单,后来到了x64,发现Hook蓝屏,于是自己动手研究了下,发现PspProcessOpen是下是mov rcx,qword ptr [rsp+28h]得出至少9个参数
于是开始敲代码呗,不知道的全部用int64替换掉,重要的几个参数通过逆向得到了,
直接上码吧 不需要过PG
上个图


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

上传的附件:
收藏
免费 3
支持
分享
最新回复 (13)
雪    币: 256
活跃值: (48)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
2
代码写的不好,只是测试用的...
2015-9-1 04:12
0
雪    币: 22
活跃值: (242)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
3
好东西啊,X64的 object钩子
2015-9-1 07:45
0
雪    币: 97
活跃值: (141)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
你对PG理解,太少了。不是简单的改函数,改参数就ok的。你这个是可以运行了,但是过半个小时就会蓝屏。
2015-9-1 08:30
0
雪    币: 459
活跃值: (398)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
5
是啊,PG 还是会检测到的,老师,pass pg 不现实啊,客户知道的话不会同意的,有啥好办法没
还有,win64 下 有没有好的隐藏dll 的办法呢,求老师指教
2015-9-1 08:58
0
雪    币: 6
活跃值: (19)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
楼主辛苦了,那么晚还在发技术帖。
2015-9-1 09:26
0
雪    币: 219
活跃值: (783)
能力值: (RANK:290 )
在线值:
发帖
回帖
粉丝
7
10个参数才对
2015-9-1 11:03
0
雪    币: 1895
活跃值: (1657)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
8
你这个。要是打开权限之类的话,为嘛要用obj hook,直接用obj回调哇。

ObRegisterCallbacks

http://bbs.pediy.com/showthread.php?t=168023
2015-9-1 14:10
0
雪    币: 256
活跃值: (48)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
9
我测试没蓝
2015-9-1 20:38
0
雪    币: 256
活跃值: (48)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
10
貌似对openProcess的处理不太好..
2015-9-1 20:40
0
雪    币: 97
活跃值: (141)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
11
如果这条路能走通,x64早就大批hook出现了。
2015-9-2 06:27
0
雪    币: 544
活跃值: (264)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
12
win7 x64 objecthook 不会蓝屏。从win8开始会,所以还是ObRegisterCallbacks吧
2015-9-2 21:32
0
雪    币: 99
活跃值: (110)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
学习了。
2015-9-3 12:56
0
雪    币: 42
活跃值: (208)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
不是有现成的ObRegisterCallbacks吗,你还这么折腾干什么!
NTSTATUS ObProtectProcess(BOOLEAN Enable)
{
       PAGED_CODE();
       if (Enable == TRUE)
       {
               NTSTATUS obst1 = 0, obst2 = 0;
               OB_CALLBACK_REGISTRATION obReg, obReg2;
               OB_OPERATION_REGISTRATION opReg, opReg2;

               //reg ob callback 1
               memset(&obReg, 0, sizeof(obReg));
               obReg.Version = ObGetFilterVersion();
               obReg.OperationRegistrationCount = 1;
               obReg.RegistrationContext = NULL;
               RtlInitUnicodeString(&obReg.Altitude, L"321124");
               obReg.OperationRegistration = &opReg;
               memset(&opReg, 0, sizeof(opReg));
               opReg.ObjectType = PsProcessType;
               opReg.Operations = OB_OPERATION_HANDLE_CREATE | OB_OPERATION_HANDLE_DUPLICATE;
               opReg.PreOperation = (POB_PRE_OPERATION_CALLBACK)&preCall;
               obst1 = ObRegisterCallbacks(&obReg, &obHandle);

               //reg ob callback 2
               memset(&obReg2, 0, sizeof(obReg2));
               obReg2.Version = ObGetFilterVersion();
               obReg2.OperationRegistrationCount = 1;
               obReg2.RegistrationContext = NULL;
               RtlInitUnicodeString(&obReg2.Altitude, L"321125");
               obReg2.OperationRegistration = &opReg2;
               memset(&opReg2, 0, sizeof(opReg2));
               opReg2.ObjectType = PsThreadType;
               opReg2.Operations = OB_OPERATION_HANDLE_CREATE | OB_OPERATION_HANDLE_DUPLICATE;
               opReg2.PreOperation = (POB_PRE_OPERATION_CALLBACK)&preCall2;
               obst1 = ObRegisterCallbacks(&obReg2, &obHandle2);
               
               return NT_SUCCESS(obst1) & NT_SUCCESS(obst2);
       }
       else
       {
               if (obHandle != NULL)
                       ObUnRegisterCallbacks(obHandle);
               if (obHandle2 != NULL)
                       ObUnRegisterCallbacks(obHandle2);
               return TRUE;
       }
}
2018-7-17 16:18
0
游客
登录 | 注册 方可回帖
返回
//