所谓hardlink 所谓XCB大法
前两天看到NTFS之HARDLINK攻防第二版,本来是讲hardlink,不过提到了个XCB大法,卖了个关子,出于好奇就逆了360FkAdv,本来逆的差不多了想替换的,结果发现驱动由DLL释放,DLL又由别的释放,懒得写会原程序了。。。上篇blog有点前置知识。。
链接中的文章展示了一种删除Hive硬链接占坑同时解锁文件的方法(解锁文件其实是副作用)
根据逆向的结果,上一点关键Code
if ( NT_SUCCESS(MyCreateFile(&FileHandle, SourceString, 0x10100u, 4u, 0) ) ) //尝试高权限打开
{
StripFileAttributes(FileHandle);
IRPDeleteFile(FileHandle);
return ZwClose(FileHandle);
}
if ( NT_SUCCESS(MyCreateFile(&FileHandle,SourceString,FILE_ATTRIBUTE_NORMAL, 4u, 0)))//独占一般是独占数据,如上参数可以打开文件句柄
{
StripFileAttributes(FileHandle);
IRPDeleteFile(FileHandle);
if ( ZwQueryInformationFile(FileHandle, &IoStatusBlock, &FileInformation, 0x28u, FileBasicInformation) < 0
|| FileInformation.FileAttributes & FILE_ATTRIBUTE_DIRECTORY
|| (
status = ObReferenceObjectByHandle(
FileHandle,
0x80000000u,
0,
KernelMode,
(PVOID *)&FileObject,
0))
|| !NT_SUCCESS( status))
return ZwClose(FileHandle); //硬链接针对文件而非目录,目录就返回了。
pLowVolumedevice = IoGetBaseFileSystemDeviceObject(FileObject);
if ( pLowVolumedevice )
{
pLowVolumeDriver = pLowVolumedevice->DriverObject;
if ( pLowVolumeDriver )
{
if ( pLowVolumeDriver->DriverName.Buffer )
{
RtlInitUnicodeString(&DestinationString, L"\\FileSystem\\FastFat");
RtlInitUnicodeString(&String2, L"\\FileSystem\\Ntfs");
if (!g_HardCodeIni)
{ PsGetVersion(&MajorVersion,&MinorVersion, &BuildNumber, 0);
if ( MajorVersion == 5 )
{
if ( MinorVersion )
{ // xp 硬编码了
if ( MinorVersion !=1 && MinorVersion != 2 )
{
ObfDereferenceObject(FileObject);
return ZwClose(FileHandle);
}
dword_1495C = 0x74u;
dword_1494C = 0x20u;
dword_14950 = 0x7Cu;
dword_14940