紫水晶编程技术论坛 - 努力打造成全国最好的编程论坛

 找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 6861|回复: 7

[原创思路]“隐藏”内核线程和回调

[复制链接]

851

主题

3477

帖子

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

Rank: 125Rank: 125Rank: 125Rank: 125Rank: 125

积分
37093
发表于 2014-5-17 20:37:59 | 显示全部楼层 |阅读模式
刚才在VIP讨论群里,有朋友问到怎么枚举回调所属的驱动,于是我灵机一动,想到了如何对抗这种枚举。

WIN64AST、PCHUNTER等软件枚举回调所属驱动或者枚举内核线程所属模块,无非就是对比回调入口点或内核线程起始地址“落在”哪一个驱动里(base<EntryPoint<base+size)。

于是有了以下对抗思路:
1.找一个其他驱动的可写可执行的内存空间(假设地址为FakeAddr)
2.写入JMP指令,跳转到真正的线程函数或回调函数
3.在调用PsCreateSystemThread等函数时,把地址填写为FakeAddr
在去年公审薄某人那天,我就按照这个思路弄了一个POC:http://www.m5home.com/bbs/forum.php?mod=viewthread&tid=7799

不过在64位系统需要注意的是,不能直接修改NTOSKNRL.EXE的内存空间。解决方法很简单,在一个PatchGuard不保护的驱动(比如NTFS.SYS)里找一片长度大约20字节的废弃空间即可。

851

主题

3477

帖子

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

Rank: 125Rank: 125Rank: 125Rank: 125Rank: 125

积分
37093
 楼主| 发表于 2014-5-28 15:42:21 | 显示全部楼层
补充一句,其实ARK要检测也不是不可能,就是繁琐一点:

找到了回调或者线程函数的“理论”入口点后,检查有没有JMP,如果有,就跟过去。
如果发现JMP的“落脚点”不在起始地址所属的驱动,就给出适当提示。

5

主题

57

帖子

0

精华

钻石会员

Rank: 6Rank: 6

积分
4275
发表于 2014-5-28 22:45:14 | 显示全部楼层
顶老大

28

主题

144

帖子

0

精华

铜牌会员

Rank: 2Rank: 2

积分
273
发表于 2014-6-5 15:09:02 | 显示全部楼层
我也来顶老大

0

主题

49

帖子

0

精华

铜牌会员

Rank: 2Rank: 2

积分
61
发表于 2017-12-9 00:28:13 | 显示全部楼层
这也算简化版的Inline Hook了吧.

0

主题

49

帖子

0

精华

铜牌会员

Rank: 2Rank: 2

积分
61
发表于 2017-12-9 03:52:10 | 显示全部楼层
Tesla.Angela 发表于 2014-5-28 15:42
补充一句,其实ARK要检测也不是不可能,就是繁琐一点:

找到了回调或者线程函数的“理论”入口点后,检查 ...

老大.为什么用这方法注册回调后.PCHUNTER还是显示是自己驱动注册的呢

1

主题

78

帖子

0

精华

金牌会员

Rank: 4Rank: 4Rank: 4Rank: 4

积分
1137
发表于 2018-1-18 10:25:49 | 显示全部楼层
这也能隐藏

0

主题

108

帖子

0

精华

铜牌会员

Rank: 2Rank: 2

积分
87
发表于 2018-1-25 03:44:31 | 显示全部楼层
这也能隐藏
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

手机版|Archiver|紫水晶工作室 ( 粤ICP备05020336号 )

GMT+8, 2024-3-29 22:00 , Processed in 0.030689 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表