首页
社区
课程
招聘
[原创]Hook KiFastCallEntry监控系统调用
发表于: 2011-12-21 19:33 34453

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

2011-12-21 19:33
34453

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

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

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

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

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

截图如下:


源码和bin都在附件中。


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

上传的附件:
收藏
免费 6
支持
分享
最新回复 (36)
雪    币: 270
活跃值: (97)
能力值: ( LV8,RANK:140 )
在线值:
发帖
回帖
粉丝
2
顶 前排占座 下载学习
2011-12-21 19:44
0
雪    币: 142
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
应该是蛮风骚的代码,哈哈
2011-12-21 23:02
0
雪    币: 122
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
占位学习……
2011-12-21 23:05
0
雪    币: 585
活跃值: (573)
能力值: ( LV13,RANK:290 )
在线值:
发帖
回帖
粉丝
5
呵呵。。。。。。。。。。。
2011-12-23 11:24
0
雪    币: 243
活跃值: (209)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
Hook KiFastCallEntry不错,不知道如何才能兼容360
2011-12-23 11:28
0
雪    币: 12
活跃值: (773)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
好复杂的毕业设计
2011-12-23 11:29
0
雪    币: 636
活跃值: (174)
能力值: ( LV9,RANK:260 )
在线值:
发帖
回帖
粉丝
8
360是jmp xxx-->jmp yyy跳两次,可以hook第二跳。 要想兼容的话需要在detour里专门处理一下,如果是360跳过来的就不跳回KiFastCallEntry,而是跳回yyy。当然KiFastCallEntry里被改掉的5个字节就不能再执行了,因为有360帮忙做了。
2011-12-23 12:33
0
雪    币: 284
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
顶礼膜拜fypher大牛
2011-12-23 13:05
0
雪    币: 287
活跃值: (583)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
10
在 and eax,0xfff 这里挂个钩子在EAX中获取函数序列号,再在360HOOK的下面那6字节的比较指令处挂个钩子过滤就行了,和360抢啥地盘
2011-12-23 13:19
0
雪    币: 636
活跃值: (174)
能力值: ( LV9,RANK:260 )
在线值:
发帖
回帖
粉丝
11
不是抢地盘,做的时候根本没考虑360,后来发现刚好和它勾了同一个地方,所以就随便改了改。这是原始架构上的最小改动,毕设而已嘛,不想为了个360改那么多。
2011-12-23 13:38
0
雪    币: 287
活跃值: (583)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
12
挂个钩子几十行的代码而已,挂函数头,改INT 2E,改MSR寄存器好多地方,除非是你的框架写的太死了,难以改动
2011-12-23 13:53
0
雪    币: 636
活跃值: (174)
能力值: ( LV9,RANK:260 )
在线值:
发帖
回帖
粉丝
13
不是好不好改的问题,我们的侧重点不一样……你貌似没明白我的想法哈……我只是在针对题目需求提出一个理想的解决方案,跟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方案更好。
2011-12-23 14:09
0
雪    币: 1262
活跃值: (765)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
14
谢谢分享,先收藏,后学习。
2011-12-23 14:14
0
雪    币: 581
活跃值: (149)
能力值: ( LV12,RANK:600 )
在线值:
发帖
回帖
粉丝
15
这个点其实不太好,可以参考TsFltMgr.sys
2011-12-23 16:49
0
雪    币: 636
活跃值: (174)
能力值: ( LV9,RANK:260 )
在线值:
发帖
回帖
粉丝
16
thx!学习了!果断去研究下~
2011-12-23 16:54
0
雪    币: 603
活跃值: (40)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
17
直接wrmsr来Hook sysenter么好了
2011-12-23 19:15
0
雪    币: 1737
活跃值: (110)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
都是强人~~
2011-12-23 19:52
0
雪    币: 26
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
这是啥技术??
2011-12-23 21:17
0
雪    币: 1602
活跃值: (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
值得一看
2011-12-24 09:09
0
雪    币: 71
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
谢谢分享,先收藏,后学习
2011-12-24 12:18
0
雪    币: 636
活跃值: (174)
能力值: ( LV9,RANK:260 )
在线值:
发帖
回帖
粉丝
22
自己实现一个KiFastCallEntry,或者XXX后跳回原始的KiFastCallEntry。但是这样做比较麻烦的是需要自己初始化一些内核环境,比如让fs对其PCR等~
2011-12-24 14:10
0
雪    币: 58
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
路过来**,呵呵呵
2011-12-25 15:26
0
雪    币: 94
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
占座支持一下,顶一下hook框架
2011-12-26 10:04
0
雪    币: 120
活跃值: (160)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
mark... 学习。。
2011-12-26 13:21
0
游客
登录 | 注册 方可回帖
返回
//