阅读:2168回复:13
怎么知道某些ZwXXX函数被HOOK了?
如果检测到某个ZwXXX函数被HOOK了,有没有办法找到原始函数的真正地址?
谢谢 |
|
最新喜欢:![]()
|
沙发#
发布于:2005-05-13 08:50
我觉得要看是哪种hook方式
|
|
|
板凳#
发布于:2005-05-13 09:11
如果检测到某个ZwXXX函数被HOOK了,有没有办法找到原始函数的真正地址? 从PE Header中查找就可 |
|
|
地板#
发布于:2005-05-13 10:26
我觉得要看是哪种hook方式 这个考虑非常周到. 你可以这样做:例如你发现函数 ZwXXX被HOOK了,你首先要做的是获取这个系统上未被hook时该函数的MS实现,找个新装的pc就可以了,注意0s要一致.把它作为你的搜索关键字(一个很大的uchar串).之后,你获取ZwXXX被hook后的函数地址,把他的实现都获取出来,也是一个UCHAR串s1,进行指令分析,主要获取其 CALL *** ;的调用,然后转到 CALL **** (注意***的寻址方式)跳转的地址funcAddr,获取funcAdd对应的字符串,和你的搜索关键字比较,如果匹配了,说明funcAddr就是你要的,如果不匹配,在继续分析s1. 大部分情况下s1中都会调用MS的实现. 如果可能的话,还要考虑jmp,因为: poldZw*(P1,P2)万全可以用 PUSH P2 PUSH P1 PUSH poldZw*(P1,P2)所在的下调指令地址 jmp ms的实现的地址 ;<===注意寻址方式 |
|
|
地下室#
发布于:2005-05-13 10:42
[quote]我觉得要看是哪种hook方式 这个考虑非常周到. 你可以这样做:例如你发现函数 ZwXXX被HOOK了,你首先要做的是获取这个系统上未被hook时该函数的MS实现,找个新装的pc就可以了,注意0s要一致.把它作为你的搜索关键字(一个很大的uchar串).之后,你获取ZwXXX被hook后的函数地址,把他的实现都获取出来,也是一个UCHAR串s1,进行指令分析,主要获取其 CALL *** ;的调用,然后转到 CALL **** (注意***的寻址方式)跳转的地址funcAddr,获取funcAdd对应的字符串,和你的搜索关键字比较,如果匹配了,说明funcAddr就是你要的,如果不匹配,在继续分析s1. 大部分情况下s1中都会调用MS的实现. 如果可能的话,还要考虑jmp,因为: poldZw*(P1,P2)万全可以用 PUSH P2 PUSH P1 PUSH poldZw*(P1,P2)所在的下调指令地址 jmp ms的实现的地址 ;<===注意寻址方式 [/quote] 老大开玩笑吧 :D“进行指令分析“??那我要用JMP,INT,RET,你奈我何 ;)我想楼主也不是问这个“找个新装的pc就可以了,注意0s要一致“ :P要是这样,何苦呢,下个调试符号,往软件中一捆绑,检测OS版本不就得了,找个新装的pc不是费电吗 :D |
|
|
5楼#
发布于:2005-05-13 10:51
[quote][quote]我觉得要看是哪种hook方式 这个考虑非常周到. 你可以这样做:例如你发现函数 ZwXXX被HOOK了,你首先要做的是获取这个系统上未被hook时该函数的MS实现,找个新装的pc就可以了,注意0s要一致.把它作为你的搜索关键字(一个很大的uchar串).之后,你获取ZwXXX被hook后的函数地址,把他的实现都获取出来,也是一个UCHAR串s1,进行指令分析,主要获取其 CALL *** ;的调用,然后转到 CALL **** (注意***的寻址方式)跳转的地址funcAddr,获取funcAdd对应的字符串,和你的搜索关键字比较,如果匹配了,说明funcAddr就是你要的,如果不匹配,在继续分析s1. 大部分情况下s1中都会调用MS的实现. 如果可能的话,还要考虑jmp,因为: poldZw*(P1,P2)万全可以用 PUSH P2 PUSH P1 PUSH poldZw*(P1,P2)所在的下调指令地址 jmp ms的实现的地址 ;<===注意寻址方式 [/quote] 老大开玩笑吧 :D“进行指令分析“??那我要用JMP,INT,RET,你奈我何 ;)我想楼主也不是问这个“找个新装的pc就可以了,注意0s要一致“ :P要是这样,何苦呢,下个调试符号,往软件中一捆绑,检测OS版本不就得了,找个新装的pc不是费电吗 :D [/quote] 嘿嘿,琢磨中,请勿打扰! :D |
|
|
6楼#
发布于:2005-05-13 10:59
这是另一方法 !!
Win2K/XP SDT Restore 0.2 http://www.security.org.sg/code/index.html 有源码啊 !!!! |
|
7楼#
发布于:2005-05-13 11:11
这是另一方法 !! pfpf,我说过KMK是世界上最好的搜索引擎!!! :) |
|
|
8楼#
发布于:2005-05-13 11:24
我有一台机SDT是
KeServiceDescriptorTable.ServiceTable E15DB4E8 这E15DB4E8在NtMapViewOfSection里error,不知如何改 !! |
|
9楼#
发布于:2005-05-13 11:36
[quote]这是另一方法 !! pfpf,我说过KMK是世界上最好的搜索引擎!!! :) [/quote] 应该开个专栏,叫 KMK搜索引擎 |
|
|
10楼#
发布于:2005-05-13 11:57
楼主说的不是很明确。ZwXx指的是那些函数?
bmyyyud,如果hook了keServiceTable中的函数,例如NtCreateProcess,未在ntoskrnl中引出,从PE Header中查找 也不行 wywwwl,我觉得你说的方法可以,但是你如果知道了hook以前的地址,那和现在的地址比较一下,如果不一样,就可以下结论了吧,不用再去匹配了。当然这样我们要把所有2k/xp/03所有的pack,都做成 一张表,根据不同的版本,记录你关心的函数的地址,去查表, 够麻烦的,需要安装所有版本,所有的pack. |
|
11楼#
发布于:2005-05-13 12:10
再送一方法
未在ntoskrnl中引出,从PE Header中查找也不行 Simple Hooking of Functions not Exported by Ntoskrnl.exe http://www.rootkit.com/newsread.php?newsid=248 |
|
12楼#
发布于:2005-05-13 12:24
再送一方法 Simple Hooking of Functions not Exported by Ntoskrnl.exe http://www.rootkit.com/newsread.php?newsid=248 [/quote] 这个方法解决了在ntoskrnl中未引出,通过ntdll中找到index,再 查KeServiceTable找到真正的NtXx函数的指针,但现在真正的NtXX函数指针已经在KeServiceTable中被替换了,要想找到原来的地址, 也只能按照版本,和pack,查表了 |
|
13楼#
发布于:2005-05-14 04:27
Thank you guys
|
|
|