本题目以文件在物理磁盘上客观存在的事实为基础,通过直接读取物理磁盘内容分析文件目录,交叉对比从而发现异常文件。主体思想为 交叉视图(Cross View)
- 整个研究的过程中侧重了解WIN系统下的两种文件系统的构造和储存信息方式,而花式多样的自我隐藏文件技术只做了基础了解。
- 如果说隐藏自身的文件是打入内部来阻止最外围的可视化界面告诉用户真实的情况,那么本研究所做的就是直接询问内部人员获得更可信的信息。本质上在于谁更底层。
开发使用了C语言和xp系统(Win_7以上由于安全限制不允许编程人员通过ReadFile的方式读取磁盘)
以下是课题需要注意和学习的地方。
程序实现磁盘数据读取所做的工作和改进
第一, 读取和创建句柄使用了Zw系列函数,ZW函数从Ntdll中导出,对应的API被调用时通过中断进入内核态,传递服务号来查找对应的内核函数,Ntxxxx,在Win内核中Ntxxx与Zwxxx函数的地址是相同的,所以等同于执行同一个函数。是API调用的最后一步,难以被欺骗或HOOK。能在一定程度上保证信息的可靠。
第二,为了响应用户随机从某层文件目录开始的查找,需要在整个磁盘中遍历这一信息,再从获得的信息开始查找子目录,也就是嗦,每一次用户点击,都会在整个磁盘中从头到尾查找一遍,计算量比较大。
- 在改进的方法中提到了使用文件地址表保存首次遍历的文件偏移信息,保证第二次点击相同的文件时可以直接得到相关信息而不需要再次循环。
- 引申一下,当程序关闭时内存中的信息还是会清除,第二次开启程序时还需要做重复的工作,再次收集该磁盘中的文件信息,根据这一点可以通过日志文件的形式保存在电脑中,确保程序关闭后不影响收集到的文件信息,如果有误或者新的操作及时更新。
开发程序时减少程序启动所做的工作
在这个程序设计时由于交叉视图的思路需要首先以系统调用获取文件目录列表,这个内容以文件树的方式实现,程序在初始化时已经做了很多工作,获取盘符、盘符类型、盘符基本信息等等,如果在初始化时获取大量的文件信息一定会导致程序在启动时速度慢,影响用户体验,在这个程序中是这样处理的。
文件树
文件树在启动后只显示了系统的盘符,但不代表他没有得到下级目录的信息,如果在每次点击盘符或者本层目录时再获取下级文件会导致短时间的卡顿,所以当初始化时获取了盘符和第一级目录的信息,在点击盘符时获取了二级目录的信息,这样在保证信息量不大的情况下整个程序运行的流畅,每次的显示也没有停顿。相较于获取大量信息或者点击获取综合了两者的优势。
----next
网友评论