蹂躏D&F学习之重复NtCreateFile之二
来源:互联网 发布:多益网络有年终奖吗 编辑:程序博客网 时间:2024/06/10 00:20
//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){KdPrint(("NtCreateFile: %wZ\r", ObjectAttributes->ObjectName));}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);
//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;*(PULONG)uAddr = uNewAddr;return TRUE;}BOOLEAN UnHookSSDT(ULONG uIndex, ULONG uOldAddr){if (uOldAddr = 0){return FALSE;}ULONG uAddr = ((ULONG)(*KeServiceDescriptorTable).ServiceTableBase + uIndex * sizeof(ULONG));*(PULONG)uAddr = uOldAddr;return TRUE;}
//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);
0 0
- 蹂躏D&F学习之重复NtCreateFile之二
- 蹂躏D&F学习之重复NtCreateFile之三
- 蹂躏D&F学习之重复NtCreateFile(一开始一进去要+几个回车的)
- 蹂躏D&F学习之备份
- 蹂躏D&F学习之一
- 蹂躏D&F彻底之二让ce正常附加扫描
- 蹂躏D&F数据之XP-NtOpenProcess(虚拟机)
- 蹂躏D&F彻底之一
- Python之%s%d%f
- 3D绘图程序设计之shader学习总结(二)
- 蹂躏
- F#学习之路(4) 基本类型
- F#学习之路(6)列表类型
- F#学习之路(7)集合类型
- SHUFE WarCraft Elite Invitation之大赛前夜,一切准备就绪,心情一般,海报被蹂躏。。。
- J2EE系列之Struts2学习笔记(二十三)--Struts2防重复请求
- C和指针之函数之实现简单的printf函数(支持%d, %f, %c, %s)
- Qt框架浅析之二 ------ d指针
- C++容器使用经验总结(一)
- 最长回文子串算法
- bcd
- 黑马程序员——多线程
- safdg
- 蹂躏D&F学习之重复NtCreateFile之二
- 另类乘法
- 使用bs4和urllib2抓取网页,都是坑
- Unity对象多个生成
- nyoj 36 最长公共子序列
- jsp实现登陆验证码
- ns 2.35中移值gpsr协议(KeLiu版)
- CF 282C Treasure
- outlook 签名 设置