首页
社区
课程
招聘
[求助]如何HOOK NtOpenThread,KiAttachProcess这两个函数?
发表于: 2010-1-10 00:24 12953

[求助]如何HOOK NtOpenThread,KiAttachProcess这两个函数?

2010-1-10 00:24
12953
请教如何HOOK NtOpenThread,KiAttachProcess这两个函数?我看到论坛有人发过不过是汇编代码,我只会用C++。

按照HOOK NtOpenProcess的方法来HOOK NtOpenThread好像是不行的,请大牛帮忙

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (13)
雪    币: 7651
活跃值: (523)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
2
不知道该说啥好
2010-1-10 07:21
0
雪    币: 284
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
我来说吧,楼主你好。请先学习asm然后再看明白函数和函数参数的逆向代码,再来hook吧。
谢谢楼主提问,让尔等豁然开朗,茅塞顿开啊。
2010-1-10 10:00
0
雪    币: 170
活跃值: (90)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
4
为什么不行呢
2010-1-10 10:08
0
雪    币: 170
活跃值: (90)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
5
你说的太不明白了 我很乐意解决你的问题
2010-1-10 10:10
0
雪    币: 170
活跃值: (90)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
6
NtOpenThread仍然是导出函数  NtOpenProcess还是导出函数 一样采用SSDT HOOK就行了
KeAttachProcess导出函数   采用inline吧
2010-1-10 10:16
0
雪    币: 170
活跃值: (90)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
7
请把你遇到的问题详细说出  不然我想死都不知道为什么不行
2010-1-10 10:16
0
雪    币: 7651
活跃值: (523)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
8
SSDT HOOK跟导不导出有什么关系......
2010-1-10 13:02
0
雪    币: 163
活跃值: (103)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
9
做HOOK要注意堆栈平衡问题
2010-1-10 13:04
0
雪    币: 170
活跃值: (90)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
10
没什么关系啊 但是楼主说:按照HOOK NtOpenProcess的方法来HOOK NtOpenThread好像是不行的。我才说2个都是导出的 不肯能不行。如果一个导出,一个未导出 还有可能不行
2010-1-14 01:36
0
雪    币: 170
活跃值: (90)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
11
强调这2个函数都是导出函数  更加说明 采用一摸一样做法完全不可能出现不行的说法
2010-1-14 01:37
0
雪    币: 750
活跃值: (228)
能力值: ( LV9,RANK:780 )
在线值:
发帖
回帖
粉丝
12
给个进程窗口保护的C完整代码给你研究研究,HOOK了如下函数:

//处理Kernel函数
        UNICODE_STRING uniFuncName;
        RtlInitUnicodeString(&uniFuncName,L"ObOpenObjectByPointer");
        ObOpenObjectByPointer = MmGetSystemRoutineAddress(&uniFuncName);
        RtlInitUnicodeString(&uniFuncName,L"KeInsertQueueApc");
        KeInsertQueueApc = MmGetSystemRoutineAddress(&uniFuncName);
        RtlInitUnicodeString(&uniFuncName,L"KeStackAttachProcess");
        KeStackAttachProcess = MmGetSystemRoutineAddress(&uniFuncName);       
        RtlInitUnicodeString(&uniFuncName,L"KeAttachProcess");
        KeAttachProcess = MmGetSystemRoutineAddress(&uniFuncName);       
        RtlInitUnicodeString(&uniFuncName,L"PsLookupThreadByThreadId");
        PsLookupThreadByThreadId = MmGetSystemRoutineAddress(&uniFuncName);       
        //处理SSDT/SSSDT函数
        NtDuplicateObject=(PVOID)GetSSDTCurAddr(NtDuplicateObject_Index,FALSE);
        NtUserQueryWindow=(PVOID)GetSSDTCurAddr(NtUserQueryWindow_Index,TRUE); //当前SSDTSHADOW 函数指针 需要的自己加
        NtUserFindWindowEx=(PVOID)GetSSDTCurAddr(NtUserFindWindowEx_Index,TRUE);
        NtUserBuildHwndList=(PVOID)GetSSDTCurAddr(NtUserBuildHwndList_Index,TRUE);
        NtUserWindowFromPoint=(PVOID)GetSSDTCurAddr(NtUserWindowFromPoint_Index,TRUE);
        NtUserSetParent=(PVOID)GetSSDTCurAddr(NtUserSetParent_Index,TRUE);
        NtUserPostMessage=(PVOID)GetSSDTCurAddr(NtUserPostMessage_Index,TRUE);
        NtUserMessageCall=(PVOID)GetSSDTCurAddr(NtUserMessageCall_Index,TRUE);
        NtUserDestroyWindow=(PVOID)GetSSDTCurAddr(NtUserDestroyWindow_Index,TRUE);
        NtUserShowWindow=(PVOID)GetSSDTCurAddr(NtUserShowWindow_Index,TRUE);
        NtUserSetWindowLong=(PVOID)GetSSDTCurAddr(NtUserSetWindowLong_Index,TRUE);
上传的附件:
2010-1-14 02:02
0
雪    币: 1443
活跃值: (1815)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
下载学习一下,感谢楼上分享
2010-5-23 07:41
0
雪    币: 220
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
学习一下,感谢分享
2010-5-23 08:34
0
游客
登录 | 注册 方可回帖
返回
//