首页
论坛
课程
招聘
[原创]Hook KiFastCallEntry监控系统调用
2011-12-21 19:33 32554

[原创]Hook KiFastCallEntry监控系统调用

2011-12-21 19:33
32554
这是一个监控特定进程系统调用的小程序,整理硬盘时找到的,发出来跟大家分享。原理很简单,通过hook KiFastCallEntry实现,很老的技术了。

这个程序是我本科毕设中的一部分,本来接下来还要从监控结果中提取行为序列去检测恶意代码,不过那部分实现比较挫,不好意思发了。

这个程序监控系统调用时可以创建新进程,也可以attach到已有进程,不过记录的内容很粗糙,不想细改了。

注意事项:
1、由于本程序在 Hook KiFastCallEntry 时和360安全卫士Hook了同一个地方,所以在装有360的电脑上会做一些特殊处理。这将导致本软件运行过程中360会暂时无效,关闭本软件后360恢复;

2、一年前写的了,只测试过xp,说不准在win7下会闹哪样,也说不准会跟别的安全软件有什么冲突,懒得测试了。

截图如下:


源码和bin都在附件中。

【看雪培训】《Adroid高级研修班》2022年夏季班招生中!

上传的附件:
收藏
点赞0
打赏
分享
最新回复 (36)
雪    币: 253
活跃值: 活跃值 (52)
能力值: ( LV8,RANK:140 )
在线值:
发帖
回帖
粉丝
代码疯子 活跃值 3 2011-12-21 19:44
2
0
顶 前排占座 下载学习
雪    币: 142
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xiejienet 活跃值 2011-12-21 23:02
3
0
应该是蛮风骚的代码,哈哈
雪    币: 122
活跃值: 活跃值 (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
butian 活跃值 2011-12-21 23:05
4
0
占位学习……
雪    币: 516
活跃值: 活跃值 (268)
能力值: ( LV13,RANK:290 )
在线值:
发帖
回帖
粉丝
guxinyi 活跃值 5 2011-12-23 11:24
5
0
呵呵。。。。。。。。。。。
雪    币: 240
活跃值: 活跃值 (116)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xicao 活跃值 2011-12-23 11:28
6
0
Hook KiFastCallEntry不错,不知道如何才能兼容360
雪    币: 19
活跃值: 活跃值 (201)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
MagicFuzzX 活跃值 2011-12-23 11:29
7
0
好复杂的毕业设计
雪    币: 537
活跃值: 活跃值 (37)
能力值: ( LV9,RANK:260 )
在线值:
发帖
回帖
粉丝
Fypher 活跃值 4 2011-12-23 12:33
8
0
360是jmp xxx-->jmp yyy跳两次,可以hook第二跳。 要想兼容的话需要在detour里专门处理一下,如果是360跳过来的就不跳回KiFastCallEntry,而是跳回yyy。当然KiFastCallEntry里被改掉的5个字节就不能再执行了,因为有360帮忙做了。
雪    币: 284
活跃值: 活跃值 (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
jerrynpc 活跃值 2011-12-23 13:05
9
0
顶礼膜拜fypher大牛
雪    币: 259
活跃值: 活跃值 (302)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
dkxzl 活跃值 1 2011-12-23 13:19
10
0
在 and eax,0xfff 这里挂个钩子在EAX中获取函数序列号,再在360HOOK的下面那6字节的比较指令处挂个钩子过滤就行了,和360抢啥地盘
雪    币: 537
活跃值: 活跃值 (37)
能力值: ( LV9,RANK:260 )
在线值:
发帖
回帖
粉丝
Fypher 活跃值 4 2011-12-23 13:38
11
0
不是抢地盘,做的时候根本没考虑360,后来发现刚好和它勾了同一个地方,所以就随便改了改。这是原始架构上的最小改动,毕设而已嘛,不想为了个360改那么多。
雪    币: 259
活跃值: 活跃值 (302)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
dkxzl 活跃值 1 2011-12-23 13:53
12
0
挂个钩子几十行的代码而已,挂函数头,改INT 2E,改MSR寄存器好多地方,除非是你的框架写的太死了,难以改动
雪    币: 537
活跃值: 活跃值 (37)
能力值: ( LV9,RANK:260 )
在线值:
发帖
回帖
粉丝
Fypher 活跃值 4 2011-12-23 14:09
13
0
不是好不好改的问题,我们的侧重点不一样……你貌似没明白我的想法哈……我只是在针对题目需求提出一个理想的解决方案,跟360根本没有关系。

这个地方的需求是“通过 Hook KiFastCallEntry 来监控系统调用”,在选择Hook点时,我发现这个Hook点具有以下几个特点:

1、刚好5字节,Hook很方便;
2、内核环境已经完成;
3、ebx指向SSDT或SSDT Shadow中对应的内核函数地址;
4、eax中存放了本次函数调用的功能号;
5、edi指向本次调用对应的系统服务描述表的基地址;
6、esi指向用户栈;
7、ecx/4是参数个数;

因为这些特点,我个人以为,在这个地方Hook是满足这个需求最自然简洁,也最理想的位置。

当然后来发现360勾了同一个地方,由于360装机量很大,怕答辩或演示时出现什么问题,所以才针对360改了改。但是它毕竟是跟我不相干的软件嘛,我觉得不应该为了它改变hook方案。

当然这也是仁者见仁智者见智的问题啦,你也可以觉得你的hook方案更好。
雪    币: 1203
活跃值: 活跃值 (257)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
zhujian 活跃值 2 2011-12-23 14:14
14
0
谢谢分享,先收藏,后学习。
雪    币: 441
活跃值: 活跃值 (59)
能力值: ( LV12,RANK:600 )
在线值:
发帖
回帖
粉丝
Sysnap 活跃值 14 2011-12-23 16:49
15
0
这个点其实不太好,可以参考TsFltMgr.sys
雪    币: 537
活跃值: 活跃值 (37)
能力值: ( LV9,RANK:260 )
在线值:
发帖
回帖
粉丝
Fypher 活跃值 4 2011-12-23 16:54
16
0
thx!学习了!果断去研究下~
雪    币: 578
活跃值: 活跃值 (25)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
monsterok 活跃值 3 2011-12-23 19:15
17
0
直接wrmsr来Hook sysenter么好了
雪    币: 1701
活跃值: 活跃值 (77)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
vvking 活跃值 2011-12-23 19:52
18
0
都是强人~~
雪    币: 26
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
kedebug 活跃值 2011-12-23 21:17
19
0
这是啥技术??
雪    币: 1602
活跃值: 活跃值 (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
panti 活跃值 2011-12-24 09:09
20
0
值得一看
雪    币: 71
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
mumaren 活跃值 2011-12-24 12:18
21
0
谢谢分享,先收藏,后学习
雪    币: 537
活跃值: 活跃值 (37)
能力值: ( LV9,RANK:260 )
在线值:
发帖
回帖
粉丝
Fypher 活跃值 4 2011-12-24 14:10
22
0
自己实现一个KiFastCallEntry,或者XXX后跳回原始的KiFastCallEntry。但是这样做比较麻烦的是需要自己初始化一些内核环境,比如让fs对其PCR等~
雪    币: 58
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
hidden米 活跃值 2011-12-25 15:26
23
0
路过来**,呵呵呵
雪    币: 89
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
miaoling 活跃值 2011-12-26 10:04
24
0
占座支持一下,顶一下hook框架
雪    币: 120
活跃值: 活跃值 (156)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
雪yaojun 活跃值 2011-12-26 13:21
25
0
mark... 学习。。
游客
登录 | 注册 方可回帖
返回