免杀基础技术

admin 2024年3月26日00:39:40评论9 views字数 1272阅读4分14秒阅读模式

免责声明

      文章所涉及内容,仅供安全研究教学使用,由于传播、利用本文所提供的信息而造成的任何直接或间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任

首先我们得了解什么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

免杀基础技术

这里我们可以看到代码的差距不大,只是一个是直接告诉地址,一个是通过计算得到当前地址距离我们需要的地址有多远。下面我们继续看效果图:

免杀基础技术

我们只是解释这种技术,实际想用于免杀的话还需要配好其他技术来使用。

这里我们简单讲一下思路:
1.使用windows自带的API函数loadlibaryA 和 GetProcAdderss,获取我们需要的函数的地址。
2.我们将函数的原7个(或者5个)字节,保存在数组中,然后将我们自己构造的函数地址,替换到原函数前7个(或者5个)字节。
3.最后当我们实现hook的时候,我们要在一次调用原本的函数,将他的返回值给返回回去,同时我们在一次挂钩钩上。

原文始发于微信公众号(泾弦安全):免杀基础技术

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年3月26日00:39:40
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   免杀基础技术http://cn-sec.com/archives/2595913.html

发表评论

匿名网友 填写信息