SSDT替换ZwSetInformationFile实现保护某文件不被删除

转载 2012年03月31日 16:32:13
#include <ntddk.h>
 
typedef struct _SDT
{
  PULONG ServiceTableBase;
  PULONG ServiceCounterTableBase;
  ULONG NumberOfService;
  PUCHAR ParamTableBase;
}SDT, *PSDT;
 
typedef
NTSTATUS
(__stdcall *ZWSETINFORMATIONFILE)(IN HANDLE FileHandle,
                  OUT PIO_STATUS_BLOCK IoStatusBlock,
                  IN PVOID FileInformation,
                  IN ULONG Length,
                  IN FILE_INFORMATION_CLASS FileInformationClass);
 
extern "C" PSDT KeServiceDescriptorTable;  //ntoskrnl.exe导出的
PULONG pFuncSDT;  //原函数地址在SSDT中的位置
ZWSETINFORMATIONFILE OriZwSetInformationFile;  //原函数地址
 
VOID DriverUnload(IN PDRIVER_OBJECT pDriverObject);
VOID Hook();
VOID UnHook();
NTSTATUS MyZwSetInformationFile(IN HANDLE FileHandle,
                OUT PIO_STATUS_BLOCK IoStatusBlock,
                IN PVOID FileInformation,
                IN ULONG Length,
                IN FILE_INFORMATION_CLASS FileInformationClass);
 
extern "C" NTSTATUS DriverEntry(IN PDRIVER_OBJECT pDriverObject,
                IN PUNICODE_STRING pRegPath)
{
  pDriverObject->DriverUnload = DriverUnload;
  Hook();
  return STATUS_SUCCESS;
}
 
VOID DriverUnload(IN PDRIVER_OBJECT pDriverObject)
{
  UnHook();
}
 
VOID Hook()
{
  UNICODE_STRING strFuncName;
  RtlInitUnicodeString(&strFuncName, L"ZwSetInformationFile");
  pFuncSDT = KeServiceDescriptorTable->ServiceTableBase +
    *PULONG((PUCHAR)MmGetSystemRoutineAddress(&strFuncName) + 1);
  OriZwSetInformationFile = ZWSETINFORMATIONFILE(*pFuncSDT);
  DbgPrint("OriZwSetInformationFile:%x\r\n", OriZwSetInformationFile);
  __asm
  {
    cli
    mov eax,cr0
    and eax,not 10000h  //清除cr0的WP位
    mov cr0,eax
  }
  *pFuncSDT = (ULONG)MyZwSetInformationFile;
  DbgPrint("---Hook---\r\n");
  __asm
  {
    mov eax,cr0
    or eax,10000h  //恢复cr0的WP位
    mov cr0,eax
    sti
  }
}
 
VOID UnHook()
{
  __asm
  {
    cli
    mov eax,cr0
    and eax,not 10000h
    mov cr0,eax
  }
  *pFuncSDT = (ULONG)OriZwSetInformationFile;
  DbgPrint("---UnHook---\r\n");
  __asm
  {
    mov eax,cr0
    or eax,10000h
    mov cr0,eax
    sti
  }
}
 
NTSTATUS MyZwSetInformationFile(IN HANDLE FileHandle,
                OUT PIO_STATUS_BLOCK IoStatusBlock,
                IN PVOID FileInformation,
                IN ULONG Length,
                IN FILE_INFORMATION_CLASS FileInformationClass)
{
  PFILE_OBJECT pFileObject;
  NTSTATUS ret = ObReferenceObjectByHandle(FileHandle, GENERIC_READ,
    *IoFileObjectType, KernelMode, (PVOID*)&pFileObject, 0);
  if (NT_SUCCESS(ret))
  {
    UNICODE_STRING uDosName;
    ret = IoVolumeDeviceToDosName(pFileObject->DeviceObject, &uDosName);  //XP and later
    if (NT_SUCCESS(ret))
    {
      if (!_wcsicmp(pFileObject->FileName.Buffer, L"\\test.txt") &&
        !_wcsicmp(uDosName.Buffer, L"C:"))       
      {
        ExFreePool(uDosName.Buffer);
        return STATUS_ACCESS_DENIED;
      }
      ExFreePool(uDosName.Buffer);
    }
  }
  return OriZwSetInformationFile(FileHandle, IoStatusBlock, FileInformation,
    Length, FileInformationClass);
}

HOOK 文件保护,隐藏 禁止访问

三个主要的函数:NtQueryDirectoryFile、NtCreateFile、NtOpenFile, 其它函数定义未用,保留。   源码.h头文件PathProtect.h: #pragm...

成功实现通过SSDT HOOK拒绝指定文件的访问

菜鸟习作,老鸟勿笑~~ ---------------------------------------------------------------------------------------...
  • digimon
  • digimon
  • 2011年05月23日 21:26
  • 946

进程隐藏与进程保护(SSDT Hook 实现)(二)

进程隐藏与进程保护(SSDT Hook 实现)(二) 文章目录:                   1. 引子 – Demo 实现效果: 2. 进...
  • pi9nc
  • pi9nc
  • 2013年06月12日 16:38
  • 3315

SSDT Hook实现内核级的进程保护

SSDT Hook效果图 加载驱动并成功Hook  NtTerminateProcess函数: 当对 指定的进程进行保护后,尝试使用“任务管理器”结束进程的时候,会弹出“拒绝访问”...
  • php_fly
  • php_fly
  • 2013年06月29日 17:02
  • 3166

进程隐藏与进程保护(SSDT Hook 实现)(二)

文章目录:                   1. 引子 – Demo 实现效果: 2. 进程隐藏与进程保护概念: 3. SSDT Hook 框架搭建: 4. Ring...

进程隐藏与进程保护(SSDT Hook 实现)(一) 转载自 Zachary.XiaoZhen - 梦想的天空

文章目录:                   1. 引子 – Hook 技术: 2. SSDT 简介: 3. 应用层调用 Win32 API 的完整执行流程: 4. 详解 SSDT: ...

内核级驱动对抗Hook ZwSetInformationFile反删除技术

网络安全中的文件删除与保护一直都是大家谈论的焦点问题,针对如何保护磁盘上属于自己的专有文件,已经存在一些现成技术,比如信息隐藏技术。笔者详细的谈论过有关基于有序规则的信息隐藏与加密技术,利用一些常见图...

内核级驱动对抗Hook ZwSetInformationFile反删除技术

网络安全中的文件删除与保护一直都是大家谈论的焦点问题,针对如何保护磁盘上属于自己的专有文件,已经存在一些现成技术,比如信息隐藏技术。笔者详细的谈论过有关基于有序规则的信息隐藏与加密技术,利用一些常见图...

进程隐藏与进程保护(SSDT Hook 实现)(一)

转载自  Zachary.XiaoZhen - 梦想的天空 lian
  • mxwtws
  • mxwtws
  • 2014年09月28日 10:23
  • 369

进程隐藏与进程保护(SSDT Hook 实现)(二 视频加密软件推荐

文章目录:                   1. 引子 – Demo 实现效果: 2. 进程隐藏与进程保护概念: 3. SSDT Hook 框架搭建: 4. Ring...
  • xuplus
  • xuplus
  • 2014年06月30日 22:26
  • 1682
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SSDT替换ZwSetInformationFile实现保护某文件不被删除
举报原因:
原因补充:

(最多只允许输入30个字)