首页
社区
课程
招聘
[原创]分享源码:自己学习windows内核而写的工具kernel star
发表于: 2010-9-7 13:52 192300

[原创]分享源码:自己学习windows内核而写的工具kernel star

2010-9-7 13:52
192300

这个是我为了学习windows内核而写的一个工具,参考了看雪和网上n多大大的代码和思路撒,再此谢谢撒

中间历经无数次的调试蓝屏,尤其是在虚拟机里面用od调试r3的程序。那个痛苦啊,好不容易熬过来了,应用层是纯sdk写的,繁琐饿。打算以后都用mfc写程序了,

简单介绍下这个工具吧:
有如下12个功能(测试通过xp sp3和xp sp2)

一:SSDT表的hook检测和恢复
  ~!~~~

二:IDT表的hook检测和恢复
  ~~~~~~(idt多处理器的恢复没处理,自己机器是单核的,没得搞,不过多核的列举可以)

三:系统加载驱动模块的检测
  通过使用一个全局hash表(以DRIVEROBJECT为对象)来使用以下的方法来存储得到的结果,最终显示出来

1.常规的ZwQuerySystemInformation来列举
2通过打开驱动对象目录来列举
3搜索内核空间匹配驱动的特征来列举(这个功能里面我自己的主机一运行就死机,别的机器都没事,手动设置热键来蓝屏都不行,没dump没法分析,哎,郁闷)
4从本驱动的Modulelist开始遍历来列举驱动

四:进程的列举和进程所加载的dll检测

采用以下方法来列举进程:
1ZwQuerySystemInformation参数SystemProcessesAndThreadsInformation来枚举
2进程EPROCESS 结构的Activelist遍历来枚举
3通过解析句柄表来枚举进程
4通过Handletablelisthead枚举进程
5进程创建时都会向csrss来注册,从这个进程里面句柄表来枚举进程
6通过自身进程的HANDLETABLE来枚举进程
7通过EPROCESS的SessionProcessLinks来枚举进程
8通过EPROCESS ---VM---WorkingSetExpansionLinks获取进程
9暴力搜索内存MmSystemRangeStart以上查找PROCESS对象

进程操作:
进程的唤醒和暂停通过获取PsSuspendProcess和PsResumeProcess来操作的
进程结束通过进程空间清0和插入apc。

采用以下方法查找DLL:
1遍历VAD来查找dll
2挂靠到对应的进程查找InLoadOrderLinks来枚举dll
3暴力搜索对应进程空间查找pe特征来枚举dll

DLL的操作:
Dll的卸载是通过MmUnmapViewOfSection和MmmapViewOfSection(从sdt表中相应函数搜索到的)来实现的(本来想直接清0 dll空间,有时行有时不行)(只要将这个进程的ntdll卸载了,进程就结束了,一个好的杀进程的办法撒,绿色环保无污染),注入dll使用的是插入apc实现的。(注入的dll必须是realse版的。Debug版会出现***错误,全局dll注入貌似也是)插入apc效果不是很好,要有线程有告警状态才执行。

五:线程信息的检测
遍历ThreadList来枚举线程
线程的暂停和唤醒都是通过反汇编获取PsResumeThread和PsSuspendThread直接从r3传来ETHREAD来操作的,通过插入APC来结束线程

六:shadow sdt表的hook检测与恢复
没有采用pdb来解决函数名问题,直接写入xp和03的shandow表函数名(主要是自己的网不稳定,连windbg有时都连不上微软)

七:系统所有的过滤驱动的检测
  查看各device下是否挂接有驱动之类的,可直接卸载

八:系统常用回调历程的检测和清除
  只检查了PsSetLoadImageNotifyRoutine PsSetCreateThreadNotifyRoutine 
  PsSetCreateProcessNotifyRoutine CmRegisterCallback这几个,至于那个什么shutdown回调不知道是啥玩意,就没搞了,有知道的顺便告诉我下撒,谢谢

九:文件系统fat和ntfs的分发函数检测
  直接反汇编fat和ntfs的DriverEntry得到对应的填充分发的偏移,然后和当前已经运行的文件系统的分发相比是否被hook,并附带恢复

十:文件查看功能
  自己解析ntfs和fat的结构,来实现列举文件和直接写磁盘删除。附带有普通的删除和发生IRP来删除。不过这里面有点问题,ntfs删除有时把目录给搞坏了,大家凑合着吧,
Ntfs网上删除这些操作的代码不多,就是sudami大大的利用ntfs-3g来实现的,看了下,太多了,充满了结构。然后自己对照着系统删除文件时目录的变化来自己实现的。只处理了$BITMAP对应的位清除,父目录的对应文件的索引项的覆盖,删除文件对应的filerecord清0.
另外偷懒时间都没处理,呵呵,y的,一个破时间都都搞好几个字节移来移去的。

十一:常用内核模块钩子的检测和恢复
  这里只检测了主要的内核模块nkrnlpa**.exe的.win32k.sys,hal.dll,比对它们的原始文件从而查找eat inline hook,iat hook ,和inline hook。Inline是从TEXT段开始一段位置开始比较的。(有点慢貌似,等待显示扫描完成就好了)

十二:应用层进程所加载dll的钩子
  应用层钩子检测和内核模块钩子检测原理一样,不过为了能读写别的进程的空间,并没有使用openprocess去打开进程,而是通过KiattachProcess挂靠到当前进程,然后通过在r0直接读写进程空间的。
  

最后付个图撒:


还是有好多的bug在,没时间在继续搞了,等有时间在完善下吧(要忙着写简历了,找job),欢迎大家测试,要是蓝屏了,可以的话发下dump撒,谢谢哈(邮箱:834858875@qq.com)。调试调累死了,打算这段时间看书,然后在继续code。


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 8
支持
分享
最新回复 (128)
雪    币: 133
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
不错,收下了。
2010-9-7 13:59
0
雪    币: 146
活跃值: (182)
能力值: ( LV13,RANK:220 )
在线值:
发帖
回帖
粉丝
3
忘了补充下,把exe和2个sys放同一目录下

驱动是用WDK 7600.16385.0编译的
2010-9-7 14:00
0
雪    币: 243
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
scm
4
支持,我也写了一款小程序,遇到的问题能和楼主交流么?
2010-9-7 14:32
0
雪    币: 146
活跃值: (182)
能力值: ( LV13,RANK:220 )
在线值:
发帖
回帖
粉丝
5
可以撒,喜欢多交朋友撒
2010-9-7 14:36
0
雪    币: 431
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
看看 ,也在学习这个,谢谢楼主~~~
2010-9-7 15:04
0
雪    币: 2323
活跃值: (4113)
能力值: ( LV12,RANK:530 )
在线值:
发帖
回帖
粉丝
7
呵呵,看这个又一次再打击自己,自己还是不会驱动,不知道该从什么地方下手,买了那本Window内核安全编程,还是看不懂里面的内容,加油,加油,加加油!
2010-9-7 15:23
0
雪    币: 146
活跃值: (182)
能力值: ( LV13,RANK:220 )
在线值:
发帖
回帖
粉丝
8
天天写,日日写,写完天天蓝,日日蓝就会了
2010-9-7 15:40
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
楼主牛人呀,学习。感谢楼主提供的源码
2010-9-7 16:21
0
雪    币: 131
活跃值: (70)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
感谢楼主分享源码
2010-9-7 16:27
0
雪    币: 695
活跃值: (25)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
11
下载了,感谢lz分享src
2010-9-7 16:37
0
雪    币: 306
活跃值: (85)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
12
lz好强哦..在学内核,中..能交个朋友吗?

以后请教下你...哈哈
2010-9-7 16:49
0
雪    币: 88
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
感谢分享经验啊。
2010-9-7 16:52
0
雪    币: 6
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
虽然说不是很稳定 哈
但是要强烈的支持一下楼主的共享精神.
2010-9-7 16:56
0
雪    币: 146
活跃值: (182)
能力值: ( LV13,RANK:220 )
在线值:
发帖
回帖
粉丝
15
行撒,我也在学习中呢,

程序的功能稳定性还太差,有时间会继续搞得哈
2010-9-7 16:57
0
雪    币: 146
活跃值: (182)
能力值: ( LV13,RANK:220 )
在线值:
发帖
回帖
粉丝
16
自己顶下,
2010-9-7 18:21
0
雪    币: 135
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
谢谢楼主分享撒
2010-9-7 18:55
0
雪    币: 317
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
学习学习,作一下参考
2010-9-7 19:24
0
雪    币: 230
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
纯支持下...看来我也得加紧了.
2010-9-7 21:38
0
雪    币: 142
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
不错,下载学习了
2010-9-7 21:42
0
雪    币: 146
活跃值: (182)
能力值: ( LV13,RANK:220 )
在线值:
发帖
回帖
粉丝
21
这个是vs08写的,运行exe要装net.3.0以上貌似
2010-9-7 21:57
0
雪    币: 13
活跃值: (40)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
22
强力支持哦,哈哈
2010-9-7 23:49
0
雪    币: 1163
活跃值: (137)
能力值: ( LV12,RANK:230 )
在线值:
发帖
回帖
粉丝
23
谢谢带码的,收了,哈哈
2010-9-8 00:49
0
雪    币: 433
活跃值: (1870)
能力值: ( LV17,RANK:1820 )
在线值:
发帖
回帖
粉丝
24
漂亮,下载收藏,有空好好研究学习一下!
2010-9-8 00:54
0
雪    币: 141
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
lz威武,另外想问下,lz写这么多代码加调试花了多少时间啊?
2010-9-8 01:34
0
游客
登录 | 注册 方可回帖
返回
//