r0下FSD inline hook防删除

文件暴力删除工具 暴力删除文件或文件夹 暴力删除文件或文件夹 立即下载
只拦截了Ntfs.sys上的,FastFat同Ntfs。
感觉更像是一个inline hook的例子 呵呵 :)
引用:
/*
                By 炉子[0GiNr]
                http://hi.baidu.com/breakinglove_
                http://0ginr.com
*/

typedef NTSTATUS (*pfnDrvDispath)(
                                  IN PDEVICE_OBJECT        DeviceObject,
                                  IN PIRP                    Irp
                                  );
#define ProxyJmpCodeLength 7 //sizeof(0xEA,0,0,0,0 0x08,0x00) = 7
/////////////////////////////////////
typedef struct _HookData
{
    PVOID pOriginalData;
    ULONG JmpDataLength;
} HookData,*pHookData;
/////////////////////////////////////
//code info:
//ObreferenceObjectByHandle        1
#define hkn_NtfsDispatch 1
#define NtfsDispatch 0xfa8f3618 //Ntfs!NtfsFsdSetInformation
/////////////////////////////////////
HookData ProcProtectHkDt[10];
/////////////////////////////////////
VOID DisableWriteProtect(PULONG pOldAttr);
VOID EnableWriteProtect(ULONG uOldAttr);
VOID FuncRestore(PVOID FuncAddr,PVOID pOriginalCode,ULONG RestoreLength);
BOOLEAN FuncModify(PVOID FuncAddr,PVOID FuncNewAddr,PVOID *JmpCodeAddr,ULONG *JmpCodeLength);
/////////////////////////////////////

NTSTATUS
DrvDispath(
           IN PDEVICE_OBJECT        DeviceObject,
           IN PIRP                    Irp
           )
{
    NTSTATUS st=STATUS_SUCCESS;
    PIO_STACK_LOCATION pIrpStack;
    pIrpStack=IoGetCurrentIrpStackLocation(Irp);
    dprintf(
"[LzStDrv] DrvDispath called!");
   
if (pIrpStack->Parameters.SetFile.FileInformationClass == FileDispositionInformation)
    {
        dprintf(
"[LzStDrv] delete file called!");
        
return STATUS_ACCESS_DENIED;
    }
    st=((pfnDrvDispath)ProcProtectHkDt[hkn_NtfsDispatch].pOriginalData)(DeviceObject,Irp);
   
return st;
}
BOOLEAN EnableFileProtect()
{
    PVOID pOgn;
    ULONG jdl;
    FuncModify((PVOID)NtfsDispatch,DrvDispath,&pOgn,&jdl);
    ProcProtectHkDt[1].pOriginalData=pOgn;
    ProcProtectHkDt[1].JmpDataLength=jdl;
    dprintf(
"[LzStDrv] NtfsDispatch hooked!");
   
return TRUE;
}
BOOLEAN DisableFileProtect()
{
    FuncRestore((PVOID)NtfsDispatch,ProcProtectHkDt[1].pOriginalData,ProcProtectHkDt[1].JmpDataLength-ProxyJmpCodeLength);
    ExFreePool(ProcProtectHkDt[1].pOriginalData);
    dprintf(
"[LzStDrv] NtfsDispatch unhooked!");
   
return TRUE;
}
VOID
FuncRestore(
            PVOID FuncAddr,
            PVOID pOriginalCode,
            ULONG RestoreLength
            )
{
    ULONG ulAttr;
    DisableWriteProtect(&ulAttr);
    memcpy(FuncAddr,pOriginalCode,RestoreLength);
    EnableWriteProtect(ulAttr);
}
BOOLEAN
FuncModify(
           PVOID FuncAddr,
           PVOID FuncNewAddr,
           PVOID *JmpCodeAddr,
           ULONG *JmpCodeLength
           )
{
    ULONG ulAttr;
    ULONG BackupLength=0;
    UCHAR *cPtr,*pOpcode;
    ULONG Length;
    PVOID pJmpCodeBuf;
   
char jmp_code[ProxyJmpCodeLength]={'/xea','/0','/0','/0','/0','/x08','/0'};
   
char hk_code[5]={'/xe9','/0','/0','/0','/0'};
    dprintf(
"[LzStDrv] FuncAddr=0x%X, FuncNewAddr=0x%X, JmpCodeAddr=0x%X, JmpCodeLength=0x%X./n",
        FuncAddr,FuncNewAddr,JmpCodeAddr,JmpCodeLength);
   
///////////////////////////////
   
dprintf("[LzStDrv] start calcing BackupLength/n");
   
for (cPtr = (UCHAR *)FuncAddr; cPtr < (UCHAR *)FuncAddr + PAGE_SIZE; cPtr += Length)
    {
        Length = SizeOfCode(cPtr, &pOpcode);
        BackupLength+=Length;
        
if (BackupLength>=5) break;
    }
    dprintf(
"[LzStDrv] BackupLength=%d (Dec.)/n",BackupLength);
   
///////////////////////////////
   
DisableWriteProtect(&ulAttr);
   
///////////////////////////////   
   
dprintf("[LzStDrv] ExAllocatePooling pJmpCodeBuf/n");
    pJmpCodeBuf=ExAllocatePool(PagedPool,BackupLength+ProxyJmpCodeLength);
   
if (!pJmpCodeBuf)
    {
        dprintf(
"[LzStDrv] ExAllocatePool pJmpCodeBuf faild!/n");
        
return FALSE;
    }
    dprintf(
"[LzStDrv] ExAllocatePool pJmpCodeBuf O.K./n");   
   
///////////////////////////////
   
*JmpCodeAddr=pJmpCodeBuf;
    *JmpCodeLength=BackupLength+ProxyJmpCodeLength;
   
///////////////////////////////
   
dprintf("[LzStDrv] Backing up original code/n");   
    memcpy(pJmpCodeBuf,FuncAddr,BackupLength);
    dprintf(
"[LzStDrv] Back up original code O.K./n");
   
///////////////////////////////
   
dprintf("[LzStDrv] Adding up jmp code/n");   
    *((ULONG*)(jmp_code+1))=(ULONG)FuncAddr+BackupLength;
    memcpy((VOID *)((ULONG)pJmpCodeBuf+BackupLength),jmp_code,ProxyJmpCodeLength);
    dprintf(
"[LzStDrv] Add up jmp code O.K./n");   
   
///////////////////////////////
   
dprintf("[LzStDrv] Hooking API./n");   
    *((ULONG *)(hk_code+1))=(ULONG)FuncNewAddr-(ULONG)FuncAddr-5;
//sizeof(jmp xxxxxxxx)=5
   
memcpy((VOID *)FuncAddr, hk_code, 5);
    dprintf(
"[LzStDrv] Hook API O.K./n");
   
///////////////////////////////
   
EnableWriteProtect(ulAttr);
   
return TRUE;
}
VOID DisableWriteProtect( PULONG pOldAttr)
{
    ULONG uAttr;
    _asm
    {
        push eax;
        mov  eax, cr0;
        mov  uAttr, eax;
        
and  eax, 0FFFEFFFFh; // CR0 16 BIT = 0
        
mov  cr0, eax;
        pop  eax;
        cli;
    };
    *pOldAttr = uAttr;
}
VOID EnableWriteProtect( ULONG uOldAttr )
{
    _asm
    {
        push eax;
        mov  eax, uOldAttr;
        mov  cr0, eax;
        pop  eax;
        sti;
    };
}
  
Honeywell EPKS 核心功能块组态与执行调度实战解析 本文深入解析Honeywell EPKS系统的核心功能块组态与执行调度技术,涵盖控制模块(CM)、顺序控制模块(SCM)和输入输出模块(IOM)的配置方法。通过实战案例分享执行顺序(ORDERINCM)和CEE执行周期的优化策略,帮助工程师提升工业自动化系统的控制精度和运行效率。 阅读详情

相关推荐

从SSTS到CTS:解码汽车电子架构中的需求与实现规范

本文深入解析汽车电子架构中SSTS(子系统功能规范)与CTS(零部件技术规范)的转换过程,揭示从抽象需求到物理实现的关键步骤。通过实际案例说明如何将SSTS的功能逻辑、接口定义和性能指标转化为具体的CTS实施方案,并分享多供应商协同与测试验证的最佳实践,帮助开发者高效完成汽车电子系统开发。

weixin_29201859的博客 499

NTFS FSD HOOK

NTFS FSD HOOKNTSTATUS FSDHookControl( IN BOOLEAN IsHook ) { NTSTATUS status = STATUS_SUCCESS; UNICODE_STRING uNTFS = {0}; PDRIVER_OBJECT NTFS = NULL; RtlInitUnicodeString( &uNTFS, L"\\Fi

Lycorisradiata 692

YOLOv8的Anchor-Free革新:从中心点预测到动态IoU匹配的全面解析

本文深入解析了YOLOv8采用Anchor-Free(无锚框)设计的核心优势与实现机制。通过摒弃预设锚框,模型直接预测目标中心点与宽高,结合解耦头、动态IoU匹配及Varifocal Loss等创新,显著简化了训练流程并提升了检测精度,尤其在小目标检测和模型泛化能力上表现突出。

weixin_29094301的博客 356

Hook Npfs驱动对象Dispatch过滤创建和打开管道

通过Hook Npfs对象的Dispatch的IRP回调函数,达到过滤命名管道的需求,这种方式测试win7-win10_1909 都非常稳定! #include <ntifs.h> #include <ntstrsafe.h> #include <ntddkbd.h> // Propertys // ============================================================================== extern

Sven的忘却日记 624

wincc 服务器授权型号,WinCC V7.5 SP1软件安装及授权方法

上篇教程给大家介绍了TIA Portal V16 安装方法,今天分享一下WinCC V7.5 SP1。目前V7.5 SP1是WinCC最新的版本,发布时间2019年11月13日。先放一个官网对WinCC V7.5 的介绍视频,感兴趣的可以先看一下。1、软件下载官网下载链接:https://support.industry.siemens.com/cs/document/109772879五个文件下...

weixin_39956110的博客 1万+

别再混淆了!5分钟搞懂机器人导纳控制与阻抗控制的本质区别(附Simulink对比仿真)

本文深入解析机器人柔顺控制中的导纳控制与阻抗控制的本质区别,通过信号流方向、架构对比和应用场景三个关键视角进行详细阐述。文章还提供Simulink对比仿真案例,帮助读者快速理解两种控制策略的差异及其适用场景,特别适合机器人控制领域的研究者和工程师参考。

weixin_42543046的博客 604

FSD HOOK与SSDT HOOK恢复简单思路

FSD 解释: File System Driver文件系统驱动程序,分为本地FSD和远程FSD。 (1) 本地FSD:允许用户访问本地计算机上的数据 ——本地FSD负责向I/O管理器注册自己,当开始访问某个卷时,I/O管理器调用FSD来进行卷识别。 ——完成卷识别后,本地FSD创建一个设备对象以表示所装载的文件系统。 ——I/O管理器通过卷参数块(VPB)在存...

weixin_34292924的博客 401

Cursor Pro版保姆级开通教程:绕过7天试用,支付宝一步搞定(附地区报错解决方案)

本文详细介绍了Cursor Pro版的订阅流程,包括支付宝支付步骤和解决区域报错的实用方案。针对开发者常见的网络问题和云服务器配置需求,提供了从本地环境调整到云端部署的完整指南,帮助用户高效解锁Pro版的代码补全、私有代码库等核心功能。

weixin_28710999的博客 2104

绕过文件系统过滤驱动和钩子

1对付文件系统过滤驱动 文件系统过滤驱动Attach在正常的文件系统之上,监视和过滤我们的文件访问。文件系统驱动栈就是由这一连串的Attach起来的过滤驱动组成。我们可以用IoGetRelatedDeviceObject这个函数来获得一个FileObject对应的最底层的那个功能驱动对象(FDO)。但是这样虽然绕过了那些过滤驱动,却同时也绕过了正常的FSD如Ntfs/Fastfat,因为正常

trents的专栏 3918

OpenClaw 钉钉和飞书集成方案研究 & OpenClaw 研究分析报告

OpenClaw(原名 Clawdbot,曾用名 Moltbot)是一款开源的个人 AI 智能体,采用"本地优先"设计理念。与传统聊天机器人不同,OpenClaw 具备真正的系统级执行能力,能够实际操作用户的计算机系统,完成各种实际任务。核心优势本地部署:所有数据存储在用户本地设备,隐私零泄露系统级执行:具备完整的系统访问权限,可执行文件操作、命令运行等全渠道交互:支持多种即时通讯平台作为交互界面开源透明:MIT 许可证,代码完全开放,社区驱动开发应用场景个人助理:日程管理、任务提醒、邮件处理。

AI天才研究院 2341

【论文解读】Baidu Apollo EM Motion Planner

系统顶层是一种多车道策略,通过并行计算车道级别轨迹来处理车道变更场景;在车道轨迹生成器内部,迭代的解决基于Frenet坐标的路径和速度规划;针对路径和速度规划问题,提出了动态规划与基于样条的二次规划相结合的方法,构造了一个可扩展且易于调整的框架,同时处理交通规则、障碍物决策和平滑度问题。该规划器可扩展至高速公路和城市低速驾驶场景。高精地图模块提供了任何人都可以访问的高精地图。感知和定位模块提供了动态环境中必要的信息。运动规划模块考虑生成一条安全平滑的轨迹再交由汽车的控制模块去执行。

xiewf的博客 6093

[驱动开发] 手写 r0 hook(NtOpenProcess 为例)

inlineHook的原理: 为了方便好理解,一些变量名和函数名在这里使用中文命名,有些编译器不支持中文命名,在这里要注意(我的是VS2019) hook.h: #pragma once #include<ntifs.h> #include<ntddk.h> #pragma intrinsic(__readmsr) //SSDT的结构 typedef struct _SYSTEM_SERVICE_TABLE { PLONG ServiceTableBase; PVOI

LYSM 1968

学 Simulink—— 基于高频方波电压注入的表贴式永磁电机无感控制仿真

本文手把手教授基于Simulink的高频方波电压注入法实现表贴式永磁同步电机(SPMSM)无传感器控制。针对表贴式电机微弱凸极特性(Lq/Ld≈1.05-1.15),详解方波注入相比正弦注入的优势:通过5kHz方波(PWM频率半值)集中能量提升信噪比,并采用相邻周期电流直接相减的零延迟分离技术。系统架构包含高频注入器、无滤波器信号分离模块、锁相环观测器和磁饱和极性辨识等关键环节,提供参数设置经验(如注入幅值10-15%Vdc)和典型性能指标(位置误差<0.2rad)。特别强调工程实现要点:PWM同步时

xiaoheshang_123的博客 168

R0 下 FSD inline Hook 防删除

<br />/*<br />                By 炉子[0GiNr]<br />                http://hi.baidu.com/breakinglove_<br />                http://0ginr.com<br />*/<br />typedef NTSTATUS (*pfnDrvDispath)(<br />                                  IN PDEVICE_OBJECT        DeviceOb

Rootkit ﹏ 1053

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Windows驱动学习(六)-- FSD钩子

教程参考自:https://www.bilibili.com/video/av26193169/?p=8 代码地址:https://github.com/G4rb3n/Windows-Driver/tree/master/MT_FSDHook 1. 概述 FSD钩子是一种较实用的过滤方法,对比于上一章的添加键盘过滤设备,这种方法更显得简单高效。 2. 驱动编写 2.1 驱动入口函数 入口函数简单明...

安全杂货铺 2748

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

R0下Inline Hook模板

InlineHook 已导出函数 VOID   HookObReferenceObjectByHandle() {       KIRQL Irql;     KdPrint(("[ObReferenceObjectByHandle] :0x%x",ObReferenceObjectByHandle));  //地址验证     //保存函数前五个字节内容     Rtl

yxuenong的专栏 908

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Win64 驱动内核编程-17. MINIFILTER(文件保护)

MINIFILTER(文件保护) 使用HOOK来监控文件操作的方法有很多,可以在SSDT上HOOK一堆和FILE有关的函数,也可以对FSD进行IRPHOOK,不过这些方法既不方便,也不安全。微软推荐的文件操作过滤方法是使用过滤驱动,在VISTA之后,推荐使用MINI...

墨鱼菜鸡 593

FSD's Inline Hook & EAT modify check Completed

   瞎折腾个半天,太菜, 之前也没怎么搞过检测程序,于是匆匆逆了下几个无壳的ARK,结合R3和R0,加上自己的一些总结,胡弄了个DEMO. 目前仅仅是遍历检测ntoskrnl.exe EAT(没加SSDT), 对于fastfat.sys/ntfs.sys/disk.sys等模块还没有检测,不过弄起来也很快, 支持对未导出函数 、Push+ret 等的HOOK检测,不过很脆弱,后期继续加强检

1325

SSDT inlineHook

上一篇我们介绍了最简单的SSDT,这篇来写一下inlineHook。 所谓的inlineHook就是在内存中修改所需要挂钩函数的前几个字节,让其跳转到我们的fake函数,执行完毕后再跳回去执行原函数,这样的话我们就没有修改SST表里面的内容,而是对函数本身修改。 流程摘自:看雪aniquest 1. 获取服务函数地址: (1)通过全局变量KeServiceDescriptorTable获得SSDT表的起始地址; (2)映射ntdll.dll到ring0空间,获得要Hook的函数的服务索引号; (

dre4merp 526

FSDHOOK恢复

WCHAR DriverName[] = L"\\FileSystem\\ntfs"; WCHAR DriverPath[] = L"\\??\\C:\\WINDOWS\\system32\\drivers\\ntfs.sys"; RestoreFSDMajorRoutine(&DriverName, &DriverPath, IRP_MJ_CREATE); //函数名: Resto

125096 720

inline hook IofCallDriver 调用ntfs时保护文件访问

#include #include NTSTATUS DriverUnload(IN PDRIVER_OBJECT DriverObject); int IsNeedProtect(DEVICE_OBJECT *DeviceObject, PIRP Irp); ULONG GetFunctionAddr(IN PCWSTR FunctionName); VOID InlineHook();

125096 820

HOOK ntfs 禁止格式化

if(bHooked == FALSE) { RtlInitUnicodeString (&HookDriverName, L"\\FileSystem\\Ntfs"); //获得\Driver\VolSnap驱动对象 status = ObReferenceObjectByName ( &HookDriverName, OBJ_CASE_INSENSITIVE, 0, 0, *

stecdeng的专栏 1359

挂钩FSD实现文件隐藏

【文章标题】: 挂钩FSD实现文件隐藏 【文章作者】: index09 【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教! -------------------------------------------------------------------------------- 【详细过程】 最近看Fastfat驱动想到的方法。查了一下又是被别人玩过了,还是简单说一下吧

zacklin的专栏 1865

文件系统fsd hook (一)原理

要知道FSDHook原理,首先我们必须了解什么是FSD,也就是FileSystem。我们电脑上的文件系统ntfs.sys,他有个设备\FileSystem\Ntfs,这个设备是用IoCreateDevice创建,跟我们写驱动的时候一样,那么我们可以通过这个设备,来对ntfs做一些操作,跟ntfs驱动进行一些通信。我们来看IDA分析: //这个就是我们以前的代码,创建一个通信设备 RtlI...

weixin_30602505的博客 318

fsd hook里获取文件全路径

NTSTATUS MyFsdCreate(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp){PDRIVER_DISPATCH        RealDispatch;NTSTATUS                    ntStatus;NTSTATUS                    status;PFILE_OBJECT             

1306

基于CallStack的反Rootkit HOOK检测

Anti-Rootkit目前扫描Hook的方法主要有以下几种:   1.对抗inline -hook ,IAT/EAT Hook   Anti-Rootkit使用读取磁盘上系统文件并将之进行map\重定位后,同内存中的代码进行对比的方法来检测inline hook(或EAT/IAT HOOK,后同),类似的工具例如Rootkit Unhooker, gmer, Icesword等等。

1554
上一篇: 深入浅出secdrv.sys本地提权0day Poc
下一篇: 解析网页后门和挂马
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值