免责声明
文章所涉及内容,仅供安全研究教学使用,由于传播、利用本文所提供的信息而造成的任何直接或间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任
首先我们得了解什么inline hook:
InlineHook 是一种在操作系统内核中拦截系统调用或者函数调用的技术,常用于安全软件、反病毒软件和系统工具中,用于监控和修改系统行为。通过 InlineHook 技术,软件可以实现对系统调用或者特定函数的监控、修改或者替换,以实现安全防护、行为监控等功能。
Inline Hook的两种实现方式:
1.使用E9(JMP)进行Inline Hook
E9是JMP指令的操作码,用于进行近跳转。它后面跟随一个相对偏移,表示从当前指令后的下一个指令开始计算的跳转目标。
当使用E9进行inline hooking时,你直接在目标函数的入口插入一个跳转指令,使其跳转到你的hook函数。示例:E9 [offset],其中[offset]是从JMP指令后的下一个指令到hook函数的相对偏移。相对偏移= 目的地址 - 源地址 - 5。其中,5 是 jmp 指令的字节数 。
上面的解释或许会有点难以理解,但是我这里用用通俗易懂的话解释一下,这个E9 [offset] 相当于告诉你要走几步到达那个地址。
2.使用B8(MOV)和FF E0(JMP EAX)进行InlineHook
B8是MOV指令的操作码,用于将一个立即数值移动到EAX寄存器。FF E0是JMP EAX指令的操作码,表示跳转到EAX寄存器中的地址。当使用这种方法进行InlineHook时,你首先将hook函数的地址移动到EAX寄存器,然后使用JMP EAX跳转到该地址。示例:B8 [hook function address] FF E0,其中[hook function address]是hook函数的绝对地址(即目标地址)。
上面的解释或许会有点难以理解,但是我这里用用通俗易懂的话解释一下,这个B8(MOV)和FF E0(JMP EAX)相当于给你一张纸,上面有一个地址,你直接去。
这两者的结果是一样的,但是传递值的方式不一样。(个人见解,大佬轻喷)
接下来上代码:
方法一:使用B8(MOV)和FF E0(JMP EAX)进行InlineHook
效果如下:
方法二:使用B8(MOV)和FF E0(JMP EAX)进行InlineHook
这里我们可以看到代码的差距不大,只是一个是直接告诉地址,一个是通过计算得到当前地址距离我们需要的地址有多远。下面我们继续看效果图:
我们只是解释这种技术,实际想用于免杀的话还需要配好其他技术来使用。
原文始发于微信公众号(泾弦安全):免杀基础技术
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论