蹂躏D&F学习之重复NtCreateFile之三
来源:互联网 发布:什刹海 知乎 编辑:程序博客网 时间:2024/06/10 00:00
//rlTenD.cpp#include <ntddk.h>#include "SSDTHOOK.h"#include "rlTenD.h"ULONG g_uOldNtCreateFileAddr = 0;PFNNTCREATEFILE g_pfnNtCreateFile = NULL;NTSTATUS DriverEntry(PDRIVER_OBJECT pDriver, PUNICODE_STRING str){//驱动 ->驱动卸载=卸载驱动pDriver->DriverUnload = UnloadDriver;//调试输出DbgPrint("Loading MyDriver...\r");ULONG uAddr = GetSSDTAddr(0x42);if (uAddr){g_pfnNtCreateFile = (PFNNTCREATEFILE)uAddr;HookSSDT(0x42, (ULONG)rlNtCreateFile, &g_uOldNtCreateFileAddr);KdPrint(("NtCreateFile: 0x%08x\r", uAddr));}return STATUS_SUCCESS;}void UnloadDriver(PDRIVER_OBJECT pDriver){UnHookSSDT(0x42, g_pfnNtCreateFile);//调试输出DbgPrint("unLoading MyDriver...\r");}NTSTATUS rlNtCreateFile(_Out_ PHANDLE FileHandle,_In_ ACCESS_MASK DesiredAccess,_In_ POBJECT_ATTRIBUTES ObjectAttributes,_Out_ PIO_STATUS_BLOCK IoStatusBlock,_In_opt_ PLARGE_INTEGER AllocationSize,_In_ ULONG FileAttributes,_In_ ULONG ShareAccess,_In_ ULONG CreateDisposition,_In_ ULONG CreateOptions,_In_ PVOID EaBuffer,_In_ ULONG EaLength){if (ObjectAttributes && ObjectAttributes->ObjectName){if (wcsstr(ObjectAttributes->ObjectName->Buffer, L"1.txt") != 0){KdPrint(("NtCreateFile: %wZ\r", ObjectAttributes->ObjectName));return STATUS_UNSUCCESSFUL;}}return g_pfnNtCreateFile(FileHandle, DesiredAccess, ObjectAttributes, IoStatusBlock,AllocationSize, FileAttributes, ShareAccess, CreateDisposition, CreateOptions, EaBuffer, EaLength);}
//rlTenD.hvoid UnloadDriver(PDRIVER_OBJECT pDriver);NTSTATUS rlNtCreateFile(_Out_ PHANDLE FileHandle,_In_ ACCESS_MASK DesiredAccess,_In_ POBJECT_ATTRIBUTES ObjectAttributes,_Out_ PIO_STATUS_BLOCK IoStatusBlock,_In_opt_ PLARGE_INTEGER AllocationSize,_In_ ULONG FileAttributes,_In_ ULONG ShareAccess,_In_ ULONG CreateDisposition,_In_ ULONG CreateOptions,_In_ PVOID EaBuffer,_In_ ULONG EaLength);typedef NTSTATUS (*PFNNTCREATEFILE)(_Out_ PHANDLE FileHandle,_In_ ACCESS_MASK DesiredAccess,_In_ POBJECT_ATTRIBUTES ObjectAttributes,_Out_ PIO_STATUS_BLOCK IoStatusBlock,_In_opt_ PLARGE_INTEGER AllocationSize,_In_ ULONG FileAttributes,_In_ ULONG ShareAccess,_In_ ULONG CreateDisposition,_In_ ULONG CreateOptions,_In_ PVOID EaBuffer,_In_ ULONG EaLength);void DisableWP();void EnableWP();
//SSDTHOOK.cpp#include "SSDTHOOK.h"ULONG GetSSDTAddr(ULONG uIndex){ULONG uAddr = *(PULONG)((ULONG)(*KeServiceDescriptorTable).ServiceTableBase + uIndex * sizeof(ULONG));return uAddr; }BOOLEAN HookSSDT(ULONG uIndex,ULONG uNewAddr,PULONG puOldAddr){if (uNewAddr ==0 || puOldAddr == NULL){return FALSE;}ULONG uAddr = ((ULONG)(*KeServiceDescriptorTable).ServiceTableBase + uIndex * sizeof(ULONG));*puOldAddr = *(PULONG)uAddr;void DisableWP();*(PULONG)uAddr = uNewAddr;void EnableWP();return TRUE;}BOOLEAN UnHookSSDT(ULONG uIndex, ULONG uOldAddr){if (uOldAddr = 0){return FALSE;}ULONG uAddr = ((ULONG)(*KeServiceDescriptorTable).ServiceTableBase + uIndex * sizeof(ULONG));void DisableWP();*(PULONG)uAddr = uOldAddr;void EnableWP();return TRUE;}void DisableWP(){__asm{cli push eaxmov eax,cr0and eax,0xfffeffffmov cr0,eaxpop eax}}void EnableWP(){__asm{push eaxmov eax,cr0or eax,0x10000mov cr0,eaxpop eaxsti}}
//SSDTHOOK.h#pragma once#ifdef __cplusplusexern "C"#endif#include <ntddk.h>#include <string.h>#ifdef __cplusplus};#endiftypedef struct _SDT_ENTRY{PVOID *ServiceTableBase;PULONG ServiceCounterTableBase; //Used only in checked buildULONG NumberOfServices;PUCHAR ParamTableBase;} SDT_ENTRY, *PSDT_ENTRY;EXTERN_C SDT_ENTRY *KeServiceDescriptorTable;ULONG GetSSDTAddr(ULONG uIndex);BOOLEAN HookSSDT(ULONG uIndex, ULONG uNewAddr, PULONG puOldAddr);BOOLEAN UnHookSSDT(ULONG uIndex, ULONG uOldAddr);void DisableWP();void EnableWP();
0 0
- 蹂躏D&F学习之重复NtCreateFile之三
- 蹂躏D&F学习之重复NtCreateFile之二
- 蹂躏D&F学习之重复NtCreateFile(一开始一进去要+几个回车的)
- 蹂躏D&F学习之备份
- 蹂躏D&F学习之一
- 蹂躏D&F数据之XP-NtOpenProcess(虚拟机)
- 蹂躏D&F彻底之二让ce正常附加扫描
- 蹂躏D&F彻底之一
- Python之%s%d%f
- 蹂躏
- F#学习之路(4) 基本类型
- F#学习之路(6)列表类型
- F#学习之路(7)集合类型
- 最字头之三:最长重复子串
- 第九周项目三之输出星号图f
- SHUFE WarCraft Elite Invitation之大赛前夜,一切准备就绪,心情一般,海报被蹂躏。。。
- C和指针之函数之实现简单的printf函数(支持%d, %f, %c, %s)
- JAVA学习之三
- Cannot find the declaration of element 'beans'. 的解决方法
- python打包指南
- 反射学习笔记
- linux学习之shell脚本 ------- 基础
- Qt的安装
- 蹂躏D&F学习之重复NtCreateFile之三
- Spring Aop 实现一个简单的memcached小插件
- linux下二进制安装包的创建
- HDU-2535-Vote
- u-boot,linux内核,文件系统移植解疑和问题(一)
- 未定义基类的问题
- LRUCache和FastLRUCache实现分析
- adb 常用命令大全
- Linux