首页
社区
课程
招聘
5
[原创]NTFS XCB定位。
发表于: 2013-7-4 11:19 13012

[原创]NTFS XCB定位。

2013-7-4 11:19
13012
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#define CLEANXCB(p/*PSCB*/) {p->CleanupCount = 0;p->Fcb->CleanupCount = 0;p->Fcb->LinkCount = 1;}
 
 
NTSTATUS NT5FuckChildren(PSCB pScb)//XP
{
    PULONG pExact = NULL ,pExact_Bak = NULL;
    PLCB pLcb = NULL;
    LIST_ENTRY *pList = NULL,*pNew = NULL;
    PSCB pMyScb = NULL;
    char Sign = 0;
    if (!pScb || 0x703 != *(PUSHORT)pScb){
        DbgPrint("pScb为NULL或者非文件夹不用Fuck!\n");
        return 0;  
    }
    DbgPrint("----------------进入目录分析----------------\n");
         
        CLEANXCB(pScb)
 
     pExact_Bak = pExact = ((PCHAR)pScb + 0x160) ;
      
     //DbgPrint("pExact %X *pExact %X\n",pExact,*pExact);
     if (*pExact == (ULONG)pExact){
             
         DbgPrint("此SCB无子LCB!\n");
         DbgPrint("----------------目录分析完毕----------------\n"); 
         return STATUS_UNSUCCESSFUL;
     }
         
     pLcb = (PLCB)(*pExact - 0x8);
     //DbgPrint("PLCB%XpLcb->ScbLinks.Flink%XpLcb->ScbLinks.Blink%X\n",pLcb,pLcb->ScbLinks.Flink,pLcb->ScbLinks.Blink);
     if (pLcb->NodeTypeCode != 0x70B){
          
         DbgPrint("此LCB错误!\n");
         DbgPrint("----------------目录分析完毕----------------\n");
         return STATUS_UNSUCCESSFUL;
     }
 
     while(pLcb->ScbLinks.Flink != pExact  ){
 
        DbgPrint("-->LCB: %X FCB: %X  SCB: %X\n",pLcb,pLcb->CleanupCount,pLcb->Scb);
        //===============================================================================
        pNew = pList = & ((PFCB)((PCHAR)pLcb+0x14))->ScbQueue;
        while(!((pList->Blink ==pNew || pList->Flink ==pNew) || pList->Flink==NULL)){
            pMyScb = CONTAINING_RECORD(pList->Flink,SCB, FcbLinks.Flink);
            DbgPrint("----------------MySCB %X NodeTypeCode:%X\n",pMyScb,pMyScb->Header.NodeTypeCode);
            //--------------------------
            CLEANXCB(pMyScb)
            //-------------------------
            if (0x703 == pMyScb->Header.NodeTypeCode)  {//此SCB代表一个目录
                DbgPrint("\t");
                NT5FuckChildren(pMyScb);
            }
             
                pList = pList->Flink;
        }
 //=================================================================================
        pLcb = ( ((PUCHAR)pLcb->ScbLinks.Flink)  -0x8);
 
     }
        DbgPrint("-->LCB: %X FCB: %X  SCB: %X\n",pLcb,pLcb->CleanupCount,pLcb->Scb);
        pNew = pList = & ((PFCB)pLcb->CleanupCount)->ScbQueue;
        while(!((pList->Blink ==pNew || pList->Flink ==pNew) || pList->Flink==NULL)){
            pMyScb = CONTAINING_RECORD(pList->Flink,SCB, FcbLinks.Flink);
            DbgPrint("----------------MySCB: %X NodeTypeCode:%X\n",pMyScb,pMyScb->Header.NodeTypeCode);
             CLEANXCB(pMyScb)
            if (0x703 == pMyScb->Header.NodeTypeCode)  {//此SCB代表一个目录
                DbgPrint("\t");
                NT5FuckChildren(pMyScb);
            }
             
                pList = pList->Flink;
        }
        DbgPrint("----------------目录分析完毕----------------\n");  
    return STATUS_SUCCESS;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#defineNT7CLEANXCB(p/*PSCB*/){*(PULONG)((PUCHAR)p+0x60)=0;*(PULONG)(((PUCHAR)(*(PULONG)(( PUCHAR)p + 0x50))) + 0xC4) = 0;}
NTSTATUS NT7FuckChildren(PSCB pScb)
{
    PULONG pExact = NULL ,pExact_Bak = NULL;
    PLCB pLcb = NULL;
    LIST_ENTRY *pList = NULL,*pNew = NULL;
    PSCB pMyScb = NULL;
    char Sign = 0;
        DbgPrint("----------------进入目录分析----------------\n");
         
        NT7CLEANXCB(pScb)
 
     pExact_Bak = pExact = (PULONG)((PCHAR)pScb + 0x168) ;
      
     //DbgPrint("pExact %X *pExact %X\n",pExact,*pExact);
     if (*pExact == (ULONG)pExact){
             
         DbgPrint("此SCB无子LCB!\n");
         DbgPrint("----------------目录分析完毕----------------\n"); 
         return STATUS_UNSUCCESSFUL;
     }
         
     pLcb = (PLCB)(*pExact - 0x8);
     //DbgPrint("PLCB%XpLcb->ScbLinks.Flink%XpLcb->ScbLinks.Blink%X\n",pLcb,pLcb->ScbLinks.Flink,pLcb->ScbLinks.Blink);
     if (pLcb->NodeTypeCode != 0x70B){
          
         DbgPrint("此LCB错误!\n");
         DbgPrint("----------------目录分析完毕----------------\n");
         return STATUS_UNSUCCESSFUL;
     }
 
     while(  (PULONG)pLcb->ScbLinks.Flink != pExact /*&&  (PULONG) pLcb->ScbLinks.Blink != pExact */){
 
        DbgPrint("-->LCB: %X FCB: %X  SCB: %X\n",pLcb,*(PULONG)(( PUCHAR)pLcb + 0x18),pLcb->Scb);
        //===============================================================================
        pNew = pList = & ((PFCB)(*(PULONG)(( PUCHAR)pLcb + 0x18)))->LcbQueue;//实际为ScbQueue
        while(!((pList->Blink ==pNew || pList->Flink ==pNew) || pList->Flink==NULL)){
            pMyScb = (PSCB)((PUCHAR)pList->Flink - 0x48);
            DbgPrint("----------------My SCB%X NodeTypeCode:%X\n",pMyScb,pMyScb->Header.NodeTypeCode);
            //--------------------------
            NT7CLEANXCB(pMyScb)
            //-------------------------
            if (0x703 == *(PUSHORT)(pMyScb))  {//此SCB代表一个目录
                DbgPrint("\t");
                NT7FuckChildren(pMyScb);
            }
             
                pList = pList->Flink;
        }
       // =================================================================================
        pLcb =  (PLCB)( ((PUCHAR)pLcb->ScbLinks.Flink)  -0x8);
 
     }
        DbgPrint("-->LCB: %X FCB: %X  SCB: %X\n",pLcb,*(PULONG)(( PUCHAR)pLcb + 0x18),pLcb->Scb);
        //===============================================================================
        pNew = pList = & ((PFCB)(*(PULONG)(( PUCHAR)pLcb + 0x18)))->LcbQueue;
        while(!((pList->Blink ==pNew || pList->Flink ==pNew) || pList->Flink==NULL)){
            pMyScb = (PSCB)((PUCHAR)pList->Flink - 0x48);
            DbgPrint("----------------My SCB%X NodeTypeCode:%X\n",pMyScb,pMyScb->Header.NodeTypeCode);
            //--------------------------
            NT7CLEANXCB(pMyScb)
            //-------------------------
            if (0x703 == *(PUSHORT)(pMyScb))  {//此SCB代表一个目录
                DbgPrint("\t");
                NT7FuckChildren(pMyScb);
            }
             
                pList = pList->Flink;
        }
        DbgPrint("----------------目录分析完毕----------------\n");  
    return STATUS_SUCCESS;
}

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

上传的附件:
收藏
免费 5
支持
分享
赞赏记录
参与人
雪币
留言
时间
心游尘世外
为你点赞~
2024-5-31 05:31
QinBeast
为你点赞~
2024-5-31 05:23
飘零丶
为你点赞~
2024-4-3 00:37
shinratensei
为你点赞~
2024-2-14 01:12
PLEBFE
为你点赞~
2023-3-7 00:31
最新回复 (10)
雪    币: 8833
活跃值: (2419)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
2
自从有了新方法无视XCB删除文件后就不再定位了。
2013-7-4 13:07
0
雪    币: 1898
活跃值: (1955)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
3
求v大放血。
2013-7-4 13:15
0
雪    币: 8833
活跃值: (2419)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
4
2013-7-4 13:25
0
雪    币: 13782
活跃值: (158)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
我擦,这个完全看不懂。。
2013-7-4 15:54
0
雪    币: 406
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
如果想强制删除文件确实不需要什么XCB
2013-7-4 17:25
0
雪    币: 8833
活跃值: (2419)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
7
如果做透明加密,也不需要什么XCB~~~
双SCB不需要知道原始FSD的XCB~~
2013-7-4 19:10
0
雪    币: 253
活跃值: (46)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
8
V校的周末有点时间系列啥时候继续?
2013-7-5 08:34
0
雪    币: 244
活跃值: (63)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
大神的双眼永远无法不能直视啊..
2013-7-8 18:44
0
雪    币: 8833
活跃值: (2419)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
10
马上继续~
2013-7-8 19:57
0
雪    币: 371
活跃值: (72)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
11
这个期待啊,估计忙着教学,没空来看雪.
2013-8-4 18:23
0
游客
登录 | 注册 方可回帖
返回

账号登录
验证码登录

忘记密码?
没有账号?立即免费注册