zoukankan      html  css  js  c++  java
  • Ring3下Hook NtQueryDirectoryFile隐藏文件

    NTSTATUS WINAPI Hook_NtQueryDirectoryFile(IN HANDLE FileHandle,IN HANDLE Event OPTIONAL,
    IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,IN PVOID ApcContext OPTIONAL,
    OUT PIO_STATUS_BLOCK IoStatusBlock,OUT PVOID FileInformation,
    IN ULONG FileInformationLength,IN FILE_INFORMATION_CLASS FileInformationClass,
    IN BOOLEAN ReturnSingleEntry, IN PUNICODE_STRING FileName OPTIONAL,IN BOOLEAN RestartScan)
    {
    NTSTATUS Status=STATUS_SUCCESS;
    Status=OldNtQueryDirectoryFile(FileHandle,Event,ApcRoutine,ApcContext,
      IoStatusBlock,FileInformation,FileInformationLength,
      FileInformationClass,ReturnSingleEntry,FileName,RestartScan);

    if (!NT_SUCCESS(Status))
    {
      return Status;
    }

    //////////////////////////////////
    if (FileBothDirectoryInformation==FileInformationClass)
    {
      FILE_BOTH_DIRECTORY_INFORMATION* pFileInfo = (FILE_BOTH_DIRECTORY_INFORMATION*)FileInformation;
      FILE_BOTH_DIRECTORY_INFORMATION* pLastFileInfo = NULL;
      BOOL bLastFlag=FALSE;
      do
      {
       bLastFlag=!(pFileInfo->NextEntryOffset);
       if (NULL!=wcsstr(pFileInfo->FileName,L"1.hook"))
       {
        OutputDebugStringW(L"已发现目标");
        if (bLastFlag) //链表里最后一个文件
        {

         pLastFileInfo->NextEntryOffset=0;
         break;
        }
        else
        {
         int iPos = (ULONG)pFileInfo - (ULONG)FileInformation;
         int iLeft = (ULONG)FileInformationLength - iPos - pFileInfo->NextEntryOffset;

         RtlCopyMemory( (PVOID)pFileInfo, (PVOID)( (char *)pFileInfo + pFileInfo->NextEntryOffset ), iLeft );
                          continue;
        }
       }

       pLastFileInfo=pFileInfo;
       pFileInfo=(PFILE_BOTH_DIRECTORY_INFORMATION)((CHAR*)pFileInfo+pFileInfo->NextEntryOffset);

      }while(!bLastFlag);
    }
    return Status;
    }

    http://www.cnblogs.com/lzjsky/archive/2010/12/01/1892702.html

  • 相关阅读:
    01:求平均年龄
    09:与圆相关的计算
    08:温度表达转化
    07:计算多项式的值
    06:甲流疫情死亡率
    05:计算分数的浮点数值
    04:带余除法
    03:计算(a+b)/c的值
    02:计算(a+b)*c的值
    01:A+B问题
  • 原文地址:https://www.cnblogs.com/findumars/p/5689051.html
Copyright © 2011-2022 走看看