greensleeve
驱动牛犊
驱动牛犊
  • 注册日期2002-05-08
  • 最后登录2010-07-17
  • 粉丝0
  • 关注0
  • 积分140分
  • 威望14点
  • 贡献值0点
  • 好评度14点
  • 原创分0分
  • 专家分0分
阅读:2168回复:13

怎么知道某些ZwXXX函数被HOOK了?

楼主#
更多 发布于:2005-05-13 04:35
如果检测到某个ZwXXX函数被HOOK了,有没有办法找到原始函数的真正地址?

谢谢

最新喜欢:

threebagsthreeb...
袁飞
idaxsy
驱动大牛
驱动大牛
  • 注册日期2004-12-09
  • 最后登录2006-03-17
  • 粉丝0
  • 关注0
  • 积分386分
  • 威望54点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-05-13 08:50
我觉得要看是哪种hook方式
[b]万水千山总是情,回个帖子行不行?[/b]
bmyyyud
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2010-01-21
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望130点
  • 贡献值0点
  • 好评度106点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-05-13 09:11
如果检测到某个ZwXXX函数被HOOK了,有没有办法找到原始函数的真正地址?

谢谢

从PE Header中查找就可
滚滚长江东逝水 浪花淘尽英雄 是非成败转头空 青山依旧在 几度夕阳红 白发渔樵江渚上 惯看秋月春风 一壶浊酒喜相逢 古今多少事 尽付笑谈中
wywwwl
驱动大牛
驱动大牛
  • 注册日期2002-08-16
  • 最后登录2018-04-07
  • 粉丝1
  • 关注0
  • 积分-10分
  • 威望135点
  • 贡献值6点
  • 好评度76点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于: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的实现的地址 ;<===注意寻址方式
琢磨悟真知
bmyyyud
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2010-01-21
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望130点
  • 贡献值0点
  • 好评度106点
  • 原创分0分
  • 专家分0分
地下室#
发布于: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
滚滚长江东逝水 浪花淘尽英雄 是非成败转头空 青山依旧在 几度夕阳红 白发渔樵江渚上 惯看秋月春风 一壶浊酒喜相逢 古今多少事 尽付笑谈中
wywwwl
驱动大牛
驱动大牛
  • 注册日期2002-08-16
  • 最后登录2018-04-07
  • 粉丝1
  • 关注0
  • 积分-10分
  • 威望135点
  • 贡献值6点
  • 好评度76点
  • 原创分0分
  • 专家分0分
  • 社区居民
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
琢磨悟真知
KMK
KMK
驱动大牛
驱动大牛
  • 注册日期2001-09-12
  • 最后登录2017-10-06
  • 粉丝2
  • 关注0
  • 积分42分
  • 威望404点
  • 贡献值2点
  • 好评度58点
  • 原创分1分
  • 专家分1分
  • 社区居民
6楼#
发布于:2005-05-13 10:59
这是另一方法 !!

Win2K/XP SDT Restore 0.2
http://www.security.org.sg/code/index.html

有源码啊 !!!!
bmyyyud
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2010-01-21
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望130点
  • 贡献值0点
  • 好评度106点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2005-05-13 11:11
这是另一方法 !!

Win2K/XP SDT Restore 0.2
http://www.security.org.sg/code/index.html

有源码啊 !!!!

pfpf,我说过KMK是世界上最好的搜索引擎!!! :)
滚滚长江东逝水 浪花淘尽英雄 是非成败转头空 青山依旧在 几度夕阳红 白发渔樵江渚上 惯看秋月春风 一壶浊酒喜相逢 古今多少事 尽付笑谈中
KMK
KMK
驱动大牛
驱动大牛
  • 注册日期2001-09-12
  • 最后登录2017-10-06
  • 粉丝2
  • 关注0
  • 积分42分
  • 威望404点
  • 贡献值2点
  • 好评度58点
  • 原创分1分
  • 专家分1分
  • 社区居民
8楼#
发布于:2005-05-13 11:24
我有一台机SDT是
KeServiceDescriptorTable.ServiceTable   E15DB4E8
这E15DB4E8在NtMapViewOfSection里error,不知如何改 !!
wywwwl
驱动大牛
驱动大牛
  • 注册日期2002-08-16
  • 最后登录2018-04-07
  • 粉丝1
  • 关注0
  • 积分-10分
  • 威望135点
  • 贡献值6点
  • 好评度76点
  • 原创分0分
  • 专家分0分
  • 社区居民
9楼#
发布于:2005-05-13 11:36
[quote]这是另一方法 !!

Win2K/XP SDT Restore 0.2
http://www.security.org.sg/code/index.html

有源码啊 !!!!

pfpf,我说过KMK是世界上最好的搜索引擎!!! :) [/quote]
应该开个专栏,叫 KMK搜索引擎
琢磨悟真知
zhaock
驱动太牛
驱动太牛
  • 注册日期2002-01-26
  • 最后登录2018-06-02
  • 粉丝3
  • 关注2
  • 积分73328分
  • 威望362317点
  • 贡献值1点
  • 好评度226点
  • 原创分0分
  • 专家分0分
  • 社区居民
10楼#
发布于:2005-05-13 11:57
楼主说的不是很明确。ZwXx指的是那些函数?

bmyyyud,如果hook了keServiceTable中的函数,例如NtCreateProcess,未在ntoskrnl中引出,从PE Header中查找
也不行

wywwwl,我觉得你说的方法可以,但是你如果知道了hook以前的地址,那和现在的地址比较一下,如果不一样,就可以下结论了吧,不用再去匹配了。当然这样我们要把所有2k/xp/03所有的pack,都做成
一张表,根据不同的版本,记录你关心的函数的地址,去查表,
够麻烦的,需要安装所有版本,所有的pack.
KMK
KMK
驱动大牛
驱动大牛
  • 注册日期2001-09-12
  • 最后登录2017-10-06
  • 粉丝2
  • 关注0
  • 积分42分
  • 威望404点
  • 贡献值2点
  • 好评度58点
  • 原创分1分
  • 专家分1分
  • 社区居民
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
zhaock
驱动太牛
驱动太牛
  • 注册日期2002-01-26
  • 最后登录2018-06-02
  • 粉丝3
  • 关注2
  • 积分73328分
  • 威望362317点
  • 贡献值1点
  • 好评度226点
  • 原创分0分
  • 专家分0分
  • 社区居民
12楼#
发布于:2005-05-13 12:24
再送一方法

[quote] 未在ntoskrnl中引出,从PE Header中查找也不行


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,查表了
greensleeve
驱动牛犊
驱动牛犊
  • 注册日期2002-05-08
  • 最后登录2010-07-17
  • 粉丝0
  • 关注0
  • 积分140分
  • 威望14点
  • 贡献值0点
  • 好评度14点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2005-05-14 04:27
Thank you guys
袁飞
游客

返回顶部