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

[原创]NTFS XCB定位。

2013-7-4 11:19
13076
#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;
}
#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;
}

[培训]科锐逆向工程师培训第53期2025年7月8日开班!

上传的附件:
收藏
免费 5
支持
分享
最新回复 (10)
雪    币: 8833
活跃值: (2419)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
2
自从有了新方法无视XCB删除文件后就不再定位了。
2013-7-4 13:07
0
雪    币: 1907
活跃值: (2075)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
3
求v大放血。
2013-7-4 13:15
0
雪    币: 8833
活跃值: (2419)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
4
2013-7-4 13:25
0
雪    币: 14829
活跃值: (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
游客
登录 | 注册 方可回帖
返回