关于Hook的一些理解

Pytorch_hook机制的理解及利用register_forward_hook(hook)中间层输出 参考文献: 【1】梯度计算问题含公式:参考链接1. 【2】pytorch改动和.data和.detch()问题:https://blog.youkuaiyun.com/dss_dssssd/article/details/83818181 【3】hook技术介绍:https://www.cnblogs.com/hellcat/p/8512090.html 【4】hook应用->中间层的输出:https://blog.youkuaiyun.com/qq_40303258/article/details/10688431 阅读详情

我们平时所说的IDT Hook,Dispatch Hook,SSDT Hook...等,是指钩住IDT中断服务例程,Dispatch 例程和SSDT系统服务,这是Hook应用上的分类,也就是拦截它们的调用,要解决的是钩什么的问题。

Inline Hook是用来实现Hook的一种方式,它和上面所说的Hook完全不是一个概念,它解决的是怎么钩的问题,一个是应用方式,一个是实现机制,IDT,Dispatch和SSDT都是可以用inline Hook来实现的。

比如我把IDT Handler的前5个字节换成长跳转跳到我的函数中运行,再用跳板函数把前5字节的指定运行后再跳回Handler+5偏移处,这样可以实现IDT Hook。

同样的Dispatch的例程我也可以这样处理,把Dispatch例程的前5字节换成跳转,跳到我的函数中,同样用一个跳板函数运行前5字节的指令,再跳回原函数的起使地址+5的位置,SSDT的也可以这样,也就是说inline Hook是实现这三种Hook的一种机制,而不是inline Hook和IDT Hook,Dispatch Hook,SSDT Hook都是一相同概念的Hook技术。

只不过有些用不着inline Hook,有些调用是用一个函数指针表,像KeServiceDescriptTable,不要总说它是什么系统服务描述表,C语言和机器语言里没有这个概念,这是操作系统一级的概念,从编译后的程序代码上来讲没有这个概念的,只从程序的角度来讲,只不过是一个结构里面一个成员(Base是一个函数指针数组),我们根据一个下标把这个指针数组中的某个条目改了(改条目在这里也是解决怎么钩的问题),就是所谓的SSDT Hook,它和下面的代码没有任何本质上的区别,确切的说下面的代码和Dispatch例程替换Hook也没有本质上的区别,不同的地方在于索引从哪里找 (ZwXXX函数地址+1的位置?IRP_MJ_XXX??),你理解了这个代码,你就理解了SSDT Hook最本质的东西,只差一些细节需要注意,比如页写保护:

#include <stdio.h>

typedef enum
{
SSDT_SHOW1,
SSDT_SHOW2,
SSDT_MAX
}SSDT_INDEX;

void Show1(void)
{
printf("show1");
}

void Show2(void)
{
printf("show2");
}

typedef void (*SSDT[SSDT_MAX])(void);

SSDT SystemTable[SSDT_MAX]={Show1,Show2};

struct
{
SSDT *Base;
int Count;
//...其它成员
}KeServiceDescriptTable;

void HookShow2(void)
{
Show2();
}

int main(void)
{
KeServiceDescriptTable.Base=SystemTable;
KeServiceDescriptTable.Count=SSDT_MAX;
//我们替换函数表项
*KeServiceDescriptTable.Base[SSDT_SHOW2]=HookShow2;

//当系统调用SHOW2时会先进Hookshow
(*KeServiceDescriptTable.Base[SSDT_SHOW2])();

return 0;
}

Inline Hook最怕的是函数前5字节指令里有jmp,因为jmp指令里带的是相对偏移量,你把指令移了位置它一跳到相对的位置就错了,这是个很简单的算术问题,100+5=105,200+5就是205了,本来指令在100它跳到105,但现在它移了位置到了200,它往后相对跳5就到了205,肯定是错的。

IDT,SSDT,DISPATCH Hook都是Hook,但是用什么机制来实现Hook的转移控制流程才是最本质的。

Android Native Hook 深入理解PLT hook 本文介绍NativeHook技术里的PLT hook,参考开源的xhook和bhook进行理解,本文不涉及该hook技术源码的分析,只分析大体原理,用于在进行修复稳定性问题时候寻找hook点使用。 阅读详情

相关推荐

Delphi hook 监视窗口创建

Delphi 使用Hook监视所有窗口创建,目前监视成功,但在卸载时,可能会导致资源管理器和任务管理器出现错误。

MiniHook研究

git hub 地址: https://github.com/RaMMicHaeL/minhook

yinhaijing123的专栏 1892

DELPHI HOOK 钩子 DLL+调用

DELPHI HOOK 钩子 通过调用API 通过MessageBoxA,MessageBoxW,MessageBoxW,OpenProcess 函数的截取。

关于Detours/Minhook挂钩引擎的UnHook

关于Detours/Minhook挂钩引擎的UnHook         文章本身可能用处不大,很少有人会用到所说的这些,权当积累。         一直在使用Detours 和 MinHook 两个Hook引擎进行一些系统API的挂钩,实现特殊的功能。就如标题所用词,UnHook,很少将一个已经Hook的函数再次进行UnHook,所以一直没有注意到问题所在。同事的提醒,让自己有了一点兴趣

Fly Follow the Heart 6114

X64 inline hook CreateProcessInternalW

X64 inline hook explorer.exe-->CreateProcessInternalW监视进程创建. vc2008+WIN7 64测试通过.

绕过ring3下inline hook

绕过ring3下inline hook...delphi源码!非常有借鉴价值。

inline hook和IDT hook结合

inline hook就是修改一个函数里面的几个字节为一条跳转指令,jmp到自己的函数中执行......   IDT HOOK就是修改IDT表中正常的异常处理例程的入口函数,为自己的函数地址   把这俩种思想结合起来就是""""一个字节钩子""""   请看    nt!NtOpenFile:    80579

925

inline hook x86 x64

inline hook x86 x64 windows

黑客爱用的 HOOK 技术大揭秘!

黑客爱用的 HOOK 技术大揭秘!

Candour_0的博客 762

非标准包 game.rgss3a 的打开方法 | 2023 年实测

生活笔记

陌雨’的博客 1万+

Tessent Atpg系列 第七章 Running ATPG Patterns -- 如何书写proc文件

本篇文章是记录Tessent scan ATPG系列 本文并非是对userguide的完全翻译,而是自己对userguide的理解,此外,有部分比较深入的内容可能需要后续实验验证。本系列并不对tessent scan做过多描述。 请勿随意转载: 优快云 博主: ciscomonkey一种是在使用tessent scan之后使用ATPG 另一种是使用第三方工具,如snps的DFTC之后使用tessent的ATPG。 这里我们仅仅介绍without tessent scan之后tessent ATPG:对于t

ciscomonkey的博客 7696

【Delphi】下如何实现32位和64位都能用的Inline Hook

介绍一个CnPack专家包里常用的较底层的技术Inline Hook(内联挂接),所实现的代码均在CnVcl组件包最新的CnMethodHook.pas中。

sensor_WU 博客 419

麒麟银河操作系统V10下ffmpeg的完整部署指南(兼容Linux系统)

本文提供在麒麟银河操作系统V10上从源码编译部署FFmpeg的完整指南,涵盖环境准备、核心依赖库(如x264)编译、FFmpeg本体配置安装、系统集成及常见问题排查。步骤详细,同样适用于Ubuntu、CentOS等主流Linux发行版,帮助用户打造功能强大的多媒体处理工具链。

weixin_29205061的博客 256

HOOK的理解

    一不小心点了一下csdn的blog,却发现自己不知道什么时候已经注册了,嘿嘿,一直也没有在这里留下任何印记,罪过。刚好今天看了孙鑫的最后一课,写一下自己对HOOK的理解吧。    HOOK,也就是钩子函数,要理解这个,首先要明白windows的回调机制。windows程序必须要有一个窗口,有了窗口才能接收消息。当收到任何消息的时候,总是由windows系统来对程序在注册窗口类的时候注册

captain_x的专栏 2485

ISO 26262中的失效率计算:Mission profile的使用

Mission profile:任务剖面,即产品在完成规定任务这段时间内所经历的时间和环境的时序描述;集成电路在工作时环境温度是在不停变化的,同时也存在运行状态和非运行状态;为此标准提出了根据任务剖面(Mission profile)以及集成电路的实际结温来评估热幅度变化、循环温度幅值等因素的影响;汽车电子元器件相关的Mission profile参考IEC TR 62380:Table 11。

weixin_47071127的博客 4820

RandLA-Net Tensorrt 推理 c++

RandLA-Net 实现 Tensorrt 部署.

J。 1111

理解 React Hook

React Hook是React 16.8引入的新特性,它让函数组件能够拥有状态管理、副作用处理等能力,解决了类组件状态管理和逻辑复用困难的问题。内置Hook包括状态管理(useState、useReducer)、副作用处理(useEffect)、性能优化(useMemo、useCallback)等类型,还支持自定义Hook实现逻辑复用。使用Hook时必须遵循两条规则:只在最顶层调用,且仅用于React函数组件或自定义Hook中。虽然Hook带来了代码简化、逻辑拆分更灵活等优势,但也需注意避免滥用性能优化钩

Jack_Be的博客 690

dex2oat编译优化调试

dex2oat编译调试的一些技巧和方法

jidapenglin28的专栏 5048

http之Hook理解

hook函数教程(一)什么是钩子 一、什么是钩子   我们可以首先从字面上了解钩子,钩子是干什么的呢?日常生活中,我们的钩子是用来钩住某种东西的,比如,说,鱼钩是用来钓鱼的,一旦鱼咬了钩,钩子就一直钩住鱼了,任凭鱼在水里怎么游,也逃不出鱼钩的控制。同样的,Windows的钩子Hook也是用来钩东西的,比较抽象的是他是用来钩Windows事件或者消息的。最常见的就是鼠标和键盘钩子,用Hook钩子...

skh2015java的博客 3293

17、自适应和学习索引:在线物理设计调整的新维度

本文探讨了现代数据库管理系统中自适应索引和数据库裂解的新方法,通过结合学习模型与多臂老虎机(MAB)框架,实现在线物理设计调整。文章详细介绍了自适应索引的工作原理、数据库裂解技术以及如何利用机器学习进行索引选择和优化,并讨论了MAB框架在动态调整索引结构中的应用及其实际案例。

go5gopher的博客 82

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

php中关于hook(钩子)的简单理解

php中关于hook(钩子)的简单理解

qq_32421489的博客 1475

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

vue3 hook的理解?如何封装一个hook?。

Vue3 官方文档是这样定义组合式函数的。,一个利用 Vue 的组合式 API 来封装和复用具有状态逻辑的函数。在开发中,我们经常会发现一些可以重复利用的代码段,于是我们将其封装成函数以供调用。这类函数包括工具函数,但是又不止工具函数,因为我们可能也会封装一些重复的业务逻辑。以往,在前端原生开发中,我们封装的这些函数都是“无状态”的。

weixin_43995143的博客 3781

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

OV9734 DATASHEET,完整规格书

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

react hook的理解

react 为了在函数组件中能管理组件状态等提出了 hook 的概念。简单看下源码实现。以 useEffect 为例。

zzzll30的博客 1051

register_forward_hook的理解

register_forward_hook的理解register_forward_hook(hook)在pytorch中文文档根据代码理解求大佬教导的问题Q 小白理解,希望大佬指正! register_forward_hook(hook)在pytorch中文文档 register_forward_hook(hook)在pytorch中文文档 在module上注册一个forward hook。 每次...

weixin_43337647的博客 8647
上一篇: 看使用 GetStartupInfo 检查自己是否被"调试"
下一篇: Ring3 Stealth Process
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值