INLINE HOOK过驱动保护的理论知识和大概思路,简单驱动保护就是简单的HOOK掉内核API的现象

找到被HOOK的函数的当前地址在此地址处先修改页面保护属性然后写入5个字节。5个字节就是一个简单的JMP指令。这里说一下JMP指令,如下:

001 JMP 002 这样我们就会跳到

001 (在此地址写入JMP指令)+ 002(我们要写入的JMP操作数) +5(jmp指令的字节数)这里、

就是说如果你要跳回NtOpenProcess的原地址,就应该向被HOOK后的地址处写入这样的指令   JMP ( NtOpenProcess的原地址-被HOOK后的地址 - 5 )

为什么要减5呢?

这么考虑,原地址为0,现在HOOK后为10,当你在HOOK的地址处写处JMP 0后,IP到15到了,所以要减5

不是很乱思路清晰一些就明白了:

这里有一个修改页面保护属性的过程。这里有以下几种方法:

1  修改注册表相应的键值这样改

HKLM\SYSTEM\CurrentControlset\Control\SessionManger\MemoryManagement\

EnforceWriteProtection=0

HKLM\SYSTEM\CurrentControlset\Control\SessionManger\MemoryManagement\

DisablePagingExecutive=1

2 一个寄存器cr0,32位寄存器、

它的第17位(WP位)如果为1、表示开启页面保护0则是去掉页面保护、

__asm    //去掉页保护

{

Cli  //表示将处理器标志寄存器的中断标志位清0,不允许中断

mov eax,cr0

and eax,not 10000h //and eax,0FFFEFFFFh

mov cr0,eax

}

__asm    //恢复页保护

{

mov eax,cr0

or  eax,10000h //or eax,not 0FFFEFFFFh

mov cr0,eax

sti

}

3通过内核API函数Memory Descriptor List(MDL)-正规做法    通过它来描述某一块内存可读或可写

现在说一下写入JMP指令注意的知识点、、、

1  汇编写入

2  指针写入  将其定义成一个结构体如下

typedef struct _JMPCODE

{

BYTE  Jmp_Code;

ULONG  Jmp_Addr;

}JMPCODE,*PJMPCODE;

(这里就需要 修改对齐方式   #pragma pack(1)     ......  恢复#pragma pack())

对齐标志改为1  本来是4,如果是4偏移就要加8,本来我们是加5的。

部分代码如下

PJMPCODE Real_Jmp;//将要写的jmp xxx指令

JMPCODE   Save_Jmp;//保护改成之前的5个字节的内容

Cur_ADDR = GetSSDT_Cur_ADDR();//获取当前的SSDT中函数的地址

Old_ADDR = GetSSDT_Old_ADDR(); //获取函数原地址

if (Cur_ADDR  !=  Old_ADDR)   //说明被HOOK了

{

//先保存要替换的5个字节的内容

Real_Jmp = (PJMPCODE) Cur_ADDR;

Save_Jmp. Jmp_Code  =  Real_Jmp -> Jmp_Code;

Save_Jmp. Jmp_Addr  =  Real_Jmp -> Jmp_Addr;

__asm    //去掉页保护

{

Cli  //表示将处理器标志寄存器的中断标志位清0,不允许中断

mov eax,cr0

and eax,not 10000h //and eax,0FFFEFFFFh

mov cr0,eax

}

Real_Jmp-> Jmp_Code =E9;//E9就是jmp的机器码

Real_Jmp-> Jmp_Addr = Old_ADDR - Cur_ADDR -5;  //这两条代码就是INLINE  HOOK的核心代码

__asm    //恢复页保护

{

mov eax,cr0

or  eax,10000h

mov cr0,eax

sti

}

}

在Unload里恢复如下也需要更改页面保护

然后反写之前保护时的语句即可

Real_Jmp-> Jmp_Code = Save_Jmp. Jmp_Code;

Real_Jmp-> Jmp_Addr = Save_Jmp. Jmp_Addr; //恢复原地址处的指令

思路大致这样,不是很难理解。

INLINE HOOK过驱动保护的理论知识和大概思路相关推荐

  1. 关于DDD领域驱动设计的理论知识收集汇总

    最近一直在学习领域驱动设计(DDD)的理论知识,从网上搜集了一些个人认为比较有价值的东西,贴出来和大家分享一下: 我一直觉得不要盲目相信权威,比如不能一谈起领域驱动设计,就一定认为国外的那个Eric ...

  2. DDD领域驱动设计基本理论知识总结

    领域驱动设计之领域模型 加一个导航,关于如何设计聚合的详细思考,见这篇文章. 2004年Eric Evans 发表Domain-Driven Design –Tackling Complexity i ...

  3. 过 DNF TP 驱动保护(一)

    文章目录: 01. 博文简介: 02. 环境及工具准备: 03. 分析 TP 所做的保护: 04. 干掉 NtOpenProcess 中的 Deep InLine Hook: 05. 干掉 NtOpe ...

  4. Windows驱动开发学习笔记(六)—— Inline HOOK

    Windows驱动开发学习笔记(六)-- Inline HOOK SSDT HOOK Inline Hook 挂钩 执行流程 脱钩 实验一:3环 Inline Hook 实验二:0环 Inline H ...

  5. 【梅哥的Ring0湿润插入教程】第一课Windows内核/驱动编程概述及应用、商业驱动保护软件原理分析...

    [梅哥的Ring0湿润插入教程] Email:mlkui@163.com 转载请注明出处,谢绝喷子记者等,如引起各类不适请自觉滚J8蛋! 第一课Windows内核/驱动编程概述及应用. 商业驱动保护软 ...

  6. 过驱动保护第一套视频(63课)

    63.白名单与校验的对抗.7z 62.过DebugProt.7z 61.过梦幻西游NECHECK保护.7z 60.过龙之谷GPK游戏保护.7z 59.真正过TP让CE可以附扫描.7z 58.DNF 驱 ...

  7. 日服巫术online过驱动保护分析(纯工具)(工具+自写驱动)

    前言: 最近在学外挂编程,基本都是利用CE,OD调试分析游戏数据,但现在游戏公司用各种保护手段防止我们调试游戏,虽然我们有CE,OD这样的利器但是仍然被游戏驱动保护挡在门外i,真可谓巧妇也难为无米之炊 ...

  8. 【转】日服巫术online过驱动保护分析(纯工具)(工具+自写驱动)

    前言: 最近在学外挂编程,基本都是利用CE,OD调试分析游戏数据,但现在游戏公司用各种保护手段防止我们调试游戏,虽然我们有CE,OD这样的利器但是仍然被游戏驱动保护挡在门外i,真可谓巧妇也难为无米之炊 ...

  9. android hook 实例,代码实例分析android中inline hook

    以下内容通过1.实现目标注入程序,2.实现主程序,3.实现注入函数,4.thumb指令集实现等4个方面详细分析了android中inline hook的用法,以下是全部内容: 最近终于沉下心来对着书把 ...

最新文章

  1. python def函数报错详解_【python】详解python函数定义 def()与参数args、可变参数*args、关键参数**args使用实例...
  2. 四轴飞行器1.4 姿态解算和Matlab实时姿态显示
  3. Kubernetes NetworkPolicy 工作原理浅析
  4. linux 查看显卡信号_Ubuntu 16.04安装nvidia显卡驱动以及各种坑(包含解决方案)
  5. java 方法的重载_Java中的方法和方法重载
  6. eslint 换行_给 eslint 写一个插件
  7. SAR成像(一):线性调频信号(LFM)和脉冲压缩
  8. 淘系双十一全链路压测流程概览
  9. 2018第一发:记一次【Advanced Installer】打包之旅
  10. U盘不显示容量,显示0字节,无法格式化
  11. 一元二次方程求根计算机的代码,一元二次方程求根Java源程序代码.doc
  12. 同为IM社交产品中的王者,QQ与微信到底有什么区别
  13. 【hardware】什么是H桥电路?
  14. Shell语法----概论
  15. 博士毕业去县城工作,如何是你,怎么选?
  16. KTorrent 2.2 公布
  17. 死囚试毒酒问题(改编)
  18. 华为助力南昌轨道“长龙”4号线实现南北游走
  19. 五年级计算机课主要学哪些内容,五年级信息技术教学计划(精选4篇)
  20. 查看git当前tag_git 切换到tag或branch分支

热门文章

  1. RequestMapping注解的作用
  2. Hystrix Health Indicator及Metrics Stream
  3. python3 数组重复数字,[python3] 3_01 数组中重复的数字
  4. 投票选举c语言程序,C语言元旦礼物:经典入门问题分析——选举投票
  5. 如何反复读取同一个 InputStream 对象
  6. 利用 exe4j 将 JAR 包制成免安装 JDK 的 EXE 文件
  7. 在操作系统理论中,什么是饿死
  8. Istio流量管理实践之(3): 基于Istio实现流量对比分析
  9. NAT的extendable参数,使得一个地址被不同接口NAT出去测试
  10. 网线制作(一根网线劈开给2台同时上网使用)