百度空间 | 百度首页 
 
查看文章
 
[note]NTFS磁盘解析,检测Ak922.sys
2009年03月17日 星期二 20:16

      人家07年就把 NTFS解析/ 删除/ 增加/ 恢复 这些搞过了. 我现在才学习,吐血了. 菜就是菜,也只能跟在大牛们的后面学人家早就fuck过的东西了...

       最近一直瞎忙,随便做做. 能解析/ 破坏/ 删除 NTFS下的文件. 不过文件创建/重命名这块儿还有些BUG,创建出来的文件(夹)是坏的. Ak922.sys 在DISK级做了过滤,那就发scsi passthrough吧. 哈哈,弄弄还是能发现它的.

文件解析 ---- 是最简单的了. 挂接相应的分区,校验NTFS的合法性,解析MBR & BPB ,校验$MFT的完整性, 分析系统的那几个元数据($Bitmap $UpCase $Volume $VOLUME_INFORMATION $AttrDef ),保存一些信息. 这些初始化工作完成后,就可以解析指定目录的文件了. 比如在此目录对应的MFT中90H属性(索引根), A0H属性. 分别出 流文件(80H属性中的name等) 和普通文件. 分析INDEX_BLOCK下的所有Index_entry, 而每个Index_entry对应一个文件/文件夹. 所以根据其MFT号. 得到对应的MFT,再跟进去,读其90H属性,判别偏移10H的地方是否为30(即判断是否为文件夹). 最后即可正确显示出当前目录的所有文件信息了... [可以做个递归遍历]

文件删除 ---- 和金山的文件粉碎机差不多. 清掉MFT本身的30H属性, 设置偏移16H的地方为0, 将$MFT:$bitmap中这个文件的MFT的标记为0, 然后有运行数据的话,得到其LCN,在$bitmap中找到对应的位置,清0. 最后在给80H属性或者AOH指向的run data进行覆盖式的填充垃圾数据. 但是金山粉碎机是删除后马上能在explorer中看到效果. 我做的必须重启后才会看到效果. 因为直接操作的是磁盘, 没有刷新cache, 逆了一下金山粉碎机, 看不出来它调用的哪个API来刷新系统缓存的. 有知道的还请指点一番~~

文件增加 ---- 是比较麻烦的一项工程,大体步骤是: (1) 在$MFT:$bitmap中找到一个空闲位.设置为1.并在这个所指向的空闲区域分配一个新的MFT; (2) 创建 & 写入标准属性(10H) / 文件名属性(30H) / 安全描述符属性(50H)/ . ( 若是创建文件,加入80H属性 若是创建文件夹,需要新增 INDEX_ROOT(90H)属性 ). 再将 FILE_NAME 属性加入其根目录的Index中. (3) 填充这个新MFT的2个必要的值: 硬连接数 && 目录标志(0x3). (4) 写$logfile (5) 其他....

文件恢复 要简单可以很简单,要做好也不容易,我是菜鸟就不多提了,可以参考codeproject上的源码,还有这个连接:【献丑】本人突破性进展,NTFS分区数据静态恢复

差不多就这些啦. fat格式太简单就不提及了. ntfs的组织结构还是很复杂的,可以结合nt4src + windbg进行学习. MJ, AZY, gz1x,狙剑作者等诸位大牛N年前就搞过了, 想起来就汗颜, 所以虽是老技术但是不可不学,各位还没搞过的同学可以考虑空闲时间学习一下,相信会有所获.

附上一个检测ak922.sys的动画, 和其他大牛N年前就已经检测出来的连接:

ShitSword vs AK922 beta2
ShitSword VS unreal rootkit
AK922 VS系统安全软件


类别:Note | 浏览() | 评论 (20)
 
最近读者:
 
网友评论:
1
2009年03月17日 星期二 21:12 | 回复
沙发~
 
2
2009年03月17日 星期二 21:23 | 回复
不错不错,这东西要做完善很不容易哦~
 
3
2009年03月17日 星期二 21:31 | 回复
 
4
2009年03月18日 星期三 15:21 | 回复
挺快呀,我那个MFC的HIVE的还没弄完了,MFC的确实麻烦..
上回说的60%只是解析工作呀...删除,创建还没弄...得加快速度了
 
5
2009年03月18日 星期三 19:49 | 回复
为什么老是蹂躏AK922呢~试试mj0011k.sys吧~
 
6
2009年03月18日 星期三 20:08 | 回复
哈哈,MJ同学把srb过滤了,我当然检测不到啦. 或者先恢复你对atapi.sys的hook... 不过这就扯远了~~

做正事啦~~~ 我没有务工哦~~~
 
7
2009年03月23日 星期一 12:01 | 回复
我是来拜码头的
 
8
2009年03月27日 星期五 08:58 | 回复
我在解析超级大目录,比如windows \ system32 时是这样做的:

"当前目录的MFT的B0H属性,它指定了在$Bitmap中的位置,然后到这个位置处查看指定的长度, 对于每一个byte位,若为1,表明是In use,得到其地址, 就是这一块的index block, 遍历之.就这样对于大目录, 一般会遍历好多块 index block. 而每一个index block里面又有N多index_entry, 每个 Index_entry其实就是一个文件/文件夹 了"

但是速度不是很快. 不知有没有更快的方法,知道的回复哦~~:smile:
 
9
2009年03月27日 星期五 21:57 | 回复
Something~
http://hi.baidu.com/517826104/blog/item/0b04f6351aa9a51990ef3980.html
 
10
2009年03月27日 星期五 22:41 | 回复
回复QQ517826104:
就这点儿东西啊. 不能用哦~~~ 呵呵~
 
11
2009年10月10日 星期六 15:32 | 回复
大米~我想新建一文件,在父目录a0H的运行中找到最后一个索引项,然后添加一项,没有重排,没动$logfile~~额。。现在文件没出来~请问下这样行么,不知道你是怎么做的?
 
12
2009年10月10日 星期六 15:34 | 回复
其它的都做了~$MFT的bitmap和$bitmap等~
 
13
2009年10月10日 星期六 15:38 | 回复
回复BuZzTiGer:
我创建过,文件时出来了.不过是坏的. 创建文件很复杂啊.我也没仔细研究,我可以把以前写的代码给你看看. 方便的话上Q.
 
14
2009年10月10日 星期六 15:39 | 回复
好的~~我不知道你Q多少,告诉我 你的Q的吧,百度消息~谢谢了啊~呵呵
 
15
2009年10月10日 星期六 15:41 | 回复
回复BuZzTiGer:
我的Q别人找不到也加不了,很奇怪,你百度消息告诉我你Q,我加就行.
 
16
2009年11月13日 星期五 18:54 | 回复
请教一下,怎么写$logfile文件?
 
17
2009年11月15日 星期日 17:50 | 回复
回复xltytlive:
忘记了,你看看Logfile的格式吧~~
 
18
2009年11月19日 星期四 14:53 | 回复
不知道大牛还知不知道怎么刷新系统缓存的,知道的话请赐教~感谢!
 
19
2009年11月19日 星期四 18:37 | 回复
回复xie840822:
看WRK里面怎么做的, 刷系统缓存,马上就会用来解一道题
 
20
2009年11月20日 星期五 11:34 | 回复
回复imadus:哦,能不能再给点思路呀~万分感谢!
 
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
验证码: 请点击后输入四位验证码,字母不区分大小写
      

     

©2009 Baidu