简单inline hook ObReferenceObjectByHandle保护进程和屏蔽文件执行

inline hook ObReferenceObjectByHandle 程序代码 windows 驱动层,inline hook 简单的示例程序。其实是看了“详谈内核三步走Inline Hook实现“,网上的一篇文章做的一个示例程序,只做了第一个, hook ObReferenceObjectByHandle.里面还有一个说明文件。我想这可以作为inline hook 的入门,找找感觉。 立即下载
作 者: Sysnap
时 间: 2008-05-30,19:16
链 接: http://bbs.pediy.com/showthread.php?t=65731

// ***************************************************************
//  Author:  Sysnap     
//  Link:    http://hi.baidu.com/sysnap
//  
// ***************************************************************


   
   好久没弄hook了.最近看到还是很多人弄,而且蓝屏,就把我以前的inline hook的code改下,于是有此文,呵呵,给跟我一样的菜鸟科普用的,高手飘过
   现在一般工具的进程保护可能是hook NtOpenProcess和NtTerminateProcess...其实关于进程的话题很多,印象中Sudami同学对这方面面比较懂.下面的代码可以保护进程
   WsysCheck--->>>failed
   IceSword---->>>failed
   Gmer-->>>failed
   RUK--->>>failed
   SnipeSword---->>>failde(不包括内存清0)
   其实这只是简单的进程保护,唯一的好处就是hook导出函数ObReferenceObjectByHandle,稳定...而结束之的方法也有很多,比如内存清0..PspTerminateProcess...PspExitThread等等...其中很多很强大的办法很多anti-rootkit的工具没使用,我想可能就是为了稳定吧.的确
   另外,你可以用这个code来屏蔽某些程序的运行...其实这个code的效果就是已经运行的保护其进程,没有运行的屏蔽其运行....代码写得很草/.对系统性能也有一定影响,自己根据需要再改下吧...
   代码就是inline hook ObReferenceObjectByHandle使其跳到T_ObReferenceObjectByHandle中
   __declspec(naked)  T_ObReferenceObjectByHandle(
    IN HANDLE  Handle,
    IN ACCESS_MASK  DesiredAccess,
    IN POBJECT_TYPE  ObjectType  OPTIONAL,
    IN KPROCESSOR_MODE  AccessMode,
    OUT PVOID  *Object,
    OUT POBJECT_HANDLE_INFORMATION  HandleInformation  OPTIONAL
    )
{

  _asm
{

   mov     edi,edi------>>>执行被修改的前5个字节
   push    ebp
   mov     ebp,esp
   
   push   [ebp+0x1c]------>>>参数压栈
   push   [ebp+0x18]
   push   [ebp+0x14]
   push   [ebp+0x10]
   push   [ebp+0xc]
   push   [ebp+8]
  
   call   MyObReferenceObjectByHandle  -------->>>>调用我们的功能函数 
   cmp   eax,1   
   jz     end
   
   mov   eax,ObReferenceObjectByHandle -------->>>>正常运行原来的函数  
   add   eax,5           
   jmp   eax   
end:
   mov   [ebp+8],-1------>>>>如果不想让这个函数正常运行..无效句柄就可以
   mov   eax,ObReferenceObjectByHandle     
   add   eax,5           
   jmp   eax   
   
}
  对原来函数是否要让其正常运行的判断由MyObReferenceObjectByHandle完成
   
  int  MyObReferenceObjectByHandle(
    IN HANDLE  Handle,
    IN ACCESS_MASK  DesiredAccess,
    IN POBJECT_TYPE  ObjectType  OPTIONAL,
    IN KPROCESSOR_MODE  AccessMode,
    OUT PVOID  *Object,
    OUT POBJECT_HANDLE_INFORMATION  HandleInformation  OPTIONAL
    )
{
 
  PEPROCESS Process;
  KIRQL  oldIrql;
  int JmpOffSet;
  unsigned char Code[5]={0x8b,0xff,0x55,0x8b,0xec};
  unsigned char JmpCode[5] = { 0xe9, 0x00, 0x00, 0x00, 0x00 };

  
  if(*PsProcessType==ObjectType)//判断句柄所属对象类型是不是*PsProcessType
 {

     oldIrql = KeRaiseIrqlToDpcLevel();
  __asm
  {
    CLI             
    MOV   eax, CR0     
    AND eax, NOT 10000H 
    MOV   CR0, eax
  }
  

  RtlCopyMemory ( ObReferenceObjectByHandle, Code, 5 );//恢复inline hook以便正确调用ObReferenceObjectByHandle
///////////////////////////////////////////////////////////////////////////////////////////////////////////////  
  
  
  ObReferenceObjectByHandle(Handle,DesiredAccess,ObjectType,AccessMode,&Process,NULL);
  if (_stricmp((char*)((char*)Process+0x174), ProtectName) == 0 )//判断是不是我们要保护的进程
    {
      JmpOffSet= (char*)T_ObReferenceObjectByHandle - (char*)ObReferenceObjectByHandle - 5;
      RtlCopyMemory ( JmpCode+1, &JmpOffSet, 4 );
      RtlCopyMemory ( ObReferenceObjectByHandle, JmpCode, 5 );
        
      
   __asm
   {
     MOV   eax, CR0
     OR   eax, 10000H
     MOV   CR0, eax
     STI
   }
      
   KeLowerIrql(oldIrql);
   return 1;

    }
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////  
  
  //否则再次HOOK这个函数
  JmpOffSet= (char*)T_ObReferenceObjectByHandle - (char*)ObReferenceObjectByHandle - 5;
  RtlCopyMemory ( JmpCode+1, &JmpOffSet, 4 );
  RtlCopyMemory ( ObReferenceObjectByHandle, JmpCode, 5 );
  
  __asm
  {
    MOV   eax, CR0
    OR   eax, 10000H
    MOV   CR0, eax
    STI
  }
  
  KeLowerIrql(oldIrql);

 }
 
 return 0;
}
此图已经缩小,点击察看原图。
名称:  未命名2.jpg
查看次数: 149
文件大小:  11.7 KB
此图已经缩小,点击察看原图。
名称:  未命名4.jpg
查看次数: 148
文件大小:  22.4 KB
两路半桥LLC谐振变换器软开关Simulink仿真(模拟谐振参数不同、分裂电容) 内容概要:本文介绍了“两路半桥LLC谐振变换器软开关Simulink仿真”资源包,重点在于基于Simulink平台对两路半桥LLC谐振变换器进行高精度建模与动态仿真,特别考虑了谐振参数不一致及分裂电容等非理想工况对系统性能的影响。该仿真模型不仅涵盖了主电路拓扑、软开关实现机制与谐振网络设计,还深入分析了不同参数配置下系统的启动特性、稳态效率、动态响应及软开关条件的满足情况。通过参数扫描与对比仿真,帮助用户掌握LLC变换器的关键设计要素与优化方法,具备较强的工程指导价值和科研教学意义。; 适合人群:电力电子、电气工程及其自动化等相关专业的高校师生,以及从事高频开关电源、新能源变换器、车载充电机等领域的研发工程师和技术人员。; 使用场景及目标:① 掌握两路并联半桥LLC谐振变换器的建模与仿真方法;② 理解软开关技术在提升变换器效率与降低EMI方面的关键作用;③ 分析谐振参数偏差与分裂电容结构对系统均流特性、增益曲线及软开关范围的影响;④ 支持科研项目中的拓扑验证、控制策略开发与故障工况分析; 阅读建议:建议结合Simulink仿真模型与配套说明文档进行学习,重点关注谐振腔参数设置、驱动时序设计及软开关波形观测;可通过调整谐振电感、电容值或引入参数失配,观察系统行为变化,深入理解LLC变换器的稳定边界与优化设计原则。 立即下载

相关推荐

解读Autoware.Universe规划模块:Behavior Path Planner

Behavior Path Planner是一个基于行为生成不同形态路径的路径规划器,负责生成 基于交通状况的路径(path), 车辆可以移动的可行驶区域(drivable area)(在路径消息中定义), 将被发送到车辆接口的转向信号(turn signal) 命令。

策 5493

通过ObReferenceObjectByHandle了解进程句柄三张表

逆向实战

qq_41610493的博客 1297

别再纠结Dify了!实测对比RAGFlow和Dify,聊聊企业知识库到底该怎么选

本文深度对比了RAGFlow和Dify在企业知识库选型中的实际表现,从技术架构、性能指标、部署成本等多维度进行分析。RAGFlow在复杂文档处理和准确率方面表现突出,适合有专职技术团队的企业;而Dify则以低门槛和快速部署见长。文章提供了六维度评估法,帮助企业根据文档复杂度、准确率要求等技术指标做出明智选择。

weixin_30897233的博客 675

详谈内核三步走Inline Hook实现

 http://www.cppblog.com/sleepwom/archive/2009/10/17/98819.html?opt=admin 详谈内核三步走Inline Hook实现(一)Inline hook原理Inline hook通俗的说就是对函数执行流程进行修改,达到控制函数过滤操作的目的。理论上我们可以在函数任何地方把原来指令替换成我们的跳转指令,也确实有些人在inline的

ivan240的专栏 1419

国内网络环境下Leaflet加载OpenStreetMap地图的5种替代方案(附可用瓦片地址)

本文针对国内网络环境下Leaflet加载OpenStreetMap地图的常见问题,提供了5种可用的瓦片替代方案,包括OpenStreetMap.fr HOT、OpenStreetMap.de、CartoDB、Stamen和Thunderforest,并附上详细的代码示例和选择建议,帮助开发者解决地图加载问题。

qsc901234的博客 1706

Oracle 11g RAC 节点通信故障排查与修复指南

本文详细介绍了Oracle 11g RAC集群发生节点通信故障时的系统性排查与修复方法。当出现节点异常重启时,核心问题往往源于心跳网络中断。文章提供了从快速诊断、日志分析到六层深度检查的完整指南,并给出了针对网络配置、内核参数及Oracle已知Bug等常见根因的实战解决方案,帮助DBA快速恢复集群稳定。

weixin_29246195的博客 281

驱动学习----RootKits---InlineHook

from:http://blog.sina.com.cn/s/blog_61d65e360100o5lx.html 驱动学习----RootKits---InlineHook(原创) (2011-01-03 11:03:22) 转载▼     InlineHook ----ObReferenceObjectByHandle ///Inlin

kendyhj9999的专栏 791

车载以太网:PHY(物理层)介绍

本文以TJA1101芯片为实例介绍了车载以太网PHY(物理层)组成。

kevin1499的博客 6231

INLINE HOOK RING0

<br />/字节型数据 unsigned char ULONG CR0VALUE; BYTE OriginalBytes[5]={0}; //保存原始函数前五个字节 BYTE JmpAddress[5]={0xE9,0,0,0,0}; //跳转到HOOK函数的地址 extern POBJECT_TYPE *PsProcessType; NTKERNELAPI NTSTATUS ObRe

Rootkit ﹏ 720

RK3588平台MIPI DSI屏幕调试记录

本文是基于RK3588平台,MIPI屏调试总结。调试过程中遇到的问题:一开始很久没亮,测量了电源电压和波形都正常。后来换了一组板子和屏幕做对比。最后是因为屏幕的座子没焊接好,二是接MIPI屏幕的排线太长会影响数据传输。换了一根短的线之后屏幕亮起。vp2vp3。

bingdund的博客 1392

PHP实现SM2算法(附完整源码)

PHP实现SM2算法(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 4026

ObReferenceObjectByHandle() 函数简略分析

原文链接 1. 逆向出来的 ObReferenceObjectByHandle() 函数实现 这个函数的实现请参考这个文章:ObReferenceObjectByHandle() 函数,这里不再重复贴出。 这个函数的原型是: NTSTATUS ObReferenceObjectByHandle( IN HANDLE Handle, IN ACCESS_MASK Desi

93Storm 6747

ICC2:mem出pin的Off Grid问题

这个命令本意是解决跨制成调用IP时在IP出pin位置加一定的routing blockage,限制绕线在一定范围内只能走直线出pin,用来解决off-grid问题也有很好的效果。在ICC2做先进工艺时会有off-grid的问题,off-grid可以理解为绕线没有在preferred方向track上。测试发现,2022版本以前的ICC2绕线容易有off-grid问题。主要在mem出pin的M2/M3层次上,切换版本绕线能很大程度上解决这个问题。我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?

m0_61544122的博客 1630

恢复平衡0x8b,0xff,0x55,0x8b,0xec

简单inline hook ObReferenceObjectByHandle保护进程和屏蔽文件执行 2013年02月22日 ⁄ 综合 ⁄ 共 3602字 ⁄ 字号 小 中 大 ⁄ 评论关闭 作 者: Sysnap 时 间: 2008-05-30,19:16 链 接: http://bbs.pediy.com/showthread.php?t=65731

linuxheik的专栏 2324

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

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

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

【原创】详谈内核三步走Inline Hook实现

标 题: 【原创】详谈内核三步走Inline Hook实现 作 者: 竹君 时 间: 2009-09-25,18:52:40 链 接: http://bbs.pediy.com/showthread.php?t=98493 本文以发表在黑防09期 详谈内核三步走Inline Hook实现 (一)Inline hook原理 Inline hook通俗的说就是对函数执行流程进

多媒体编程、网络编程、系统编程、网络安全编程、驱动编程 805

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

函数......ObReferenceObjectByHandle

ObReferenceObjectByHandle函数来获得这个Handle对应的FileObject。我们只能给FileObject发送IRP。 stat=ObReferenceObjectByHandle(handle,GENERIC_READ,*IoFileObjectType,KernelMode,(PVOID*)&fileob,0);ObReferenceObjectByHandle(

天蓝的专栏 6282

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Dissecting the Windows Kernel - 关于ObReferenceObjectByHandle中对句柄的处理

Dissecting the Windows Kernel -   关于ObReferenceObjectByHandle中对句柄的处理 一、   摘要 在开发一个 Anti-Rootkit工具中的枚举进程句柄时,发现枚举System Process进程的句柄信息在Windows XP和Windows 7/8的处理细节有一些不一样,遂想刨根问底,一探究竟。在获取句柄对象名和类型名的时候都会使

StanfordZhang的专栏 4719

瑞星的内核Hook分析

今天我下载的瑞星的新版本23.00.24.98,分析一下瑞星在免费之后内核当中的Hook有没有什么变化! 1. SSDT 和 Shadow SSDT Hook 瑞星Hook了一大堆的SSDT,我就直接在内核里面把它们都恢复了! 2. inline Hook 瑞星Hook了ObReferenceObjectByHandle前面的5个字节 Hook前: kd&gt...

anxi2128的博客 287

InlineHookObReferenceObjectByHandle(0环)

ObReferenceObjectByHandle是通过句柄(Handle)来访问对象。 #include "ntddk.h" #include <windef.h> extern POBJECT_TYPE *PsProcessType; VOID InlineHookObReferenceObjectByHandle(); VOID UnHook(); //根据提供的 Handl...

weixin_33738578的博客 205

[转载]关于驱动中的ObReferenceObjectByName 和 IoGetDeviceObjectPointer

今天huhu0013问我为什么ObReferenceObjectByName不能得到Device类型的对象,讨论一番,最终得到如下解释,记录一下:================================================================================= 原文:http://www.boxcounter.org/?action=show&id=13前些阵子学写过滤驱动,遇到个问题,在网上找到了相应的资料,Blog下来。 我写的程序需要挂在文件系统上,

wowbell的专栏 2380

Object Hook 简单介绍

其实这东西很多大牛多玩腻了的东西,看下论坛上比较少这类的,就来献献丑,科普一下 大牛们直接 可以飘过,这东西主要是自我复习一下OBJECT的一些知识,技术这东西久了不弄容易忘记,所以 拿出来跟和我一样菜的菜鸟们分享一下。如果有不对的地方欢迎大家指正,这样对于自己也进步得 快点,多多交流,互相学习,水平才能提高得快。    第一我们先看下OBJECT的组成 主要是3部分 如下图

liujiayu2的专栏 1675

win10 x64中inlineHook SSDT里面的函数

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

吾无法无天的博客 5134

32位/64位WINDOWS驱动之windbg分析ObReferenceObjectByHandle取回进程句柄的过程

windbg调试技巧逆向分析windbg访问断点dt查看结构指令windbg使用帮助参考 https://docs.microsoft.com/zh-cn/windows-hardware/drivers/debugger/commands.cls 清屏ba r4 地址 //对地址下4字节访问断点。

a756598009的博客 990
上一篇: DKOM Benefits and Drawbacks
下一篇: 端口访问监控原理
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值