随着网络的普及,我们的生活越来越方便,但是网络安全也成了很多人面临的一个问题。特别是那些有着商业数据的企业电脑,更要注意上网安全常识,不然病毒会对我们造成严重的威胁。 作者: sudami 为了考研, 庸庸碌碌的过了半年。 现在终于出头了, 现在又忙于毕业设计(软件界面美化和驱动文件加壳), 没空学习内核知识 。 今天特把以前的一些想法发出来, 大家讨论讨论。 在网上找了一下, 谈文件隐藏的不少, 说如何检测隐藏文件的好像不多。 这里说说我关于隐藏文件(和注册表)检测的一些思路, 错误和不足希望大牛们指出。 我们知道现在一般隐藏文件的检测方法有几种, 一种是文件系统层即直接发irp到文件系统进行询问, 一种是直接对磁盘的数据进行分析。 当然后者应该说是比前者更安全。 但相信你看过mj0011大牛的《基于IO Packet隐藏文件和注册表, 过磁盘解析和总线解析》(当然你用他公布的代码可能不一定成功, 因为其中有些小bug), 其实这也不是安全的, 怎么办?前有azy大牛的ak922, 后有mj0011大牛的总线过滤。 那我们只好夹缝中求生存了, 呵呵。 入正题, 我们知道就windows ntfs系统而言, 第一方法自己构建的irp包其实走的线路是NtfsFsdDirectoryControl NtfsCommonDirectoryControl NtfsQueryDirectory在后面就是走NtfsRestartIndexEnumeration和NtfsContinueIndexEnumeration等等到ReadIndexBuffer到NtfsMapStream到CcMapData, 通过CcMapData得到相应FileObject的Cache地址, 然后进行解析。 其中Cache的具体地址为在CcMapData最后一个参数里。 这是我用syser分析中的两分截图, 分析过NTFS文件系统的话当你看到FILE0和INDX字样的时候一定很是熟悉, 文件的解析就从这里开始了。 其实在这做分析, 比直接读磁盘数据分析要简单点, 代码如下: 复制内容到剪贴板 代码: VOID ListDir (LPBYTE pDir, UINT uAlcSize) { LPINDX pIndx; LPINDXATTR pIndxAttr; DWORD dwRes; BYTE pRuns[0x200]; pIndx = ( LPINDX ) pDir; pIndxAttr = (LPINDXATTR)( pDir + ( 0x18 + pIndx->wHeadSize ) ); if ( 'I' != pIndx->bDirID [0] |