用户态rootkit之inline hook

原创 2018年04月16日 16:21:09

前言

Rootkit是我从大一就听说过的技术,不过那个时候几乎是0基础,也完全不懂这是个什么玩意儿,其实到现在我也不懂rootkit是如何修改内核层和隐藏自己的,不过最近在学习用户态的rootkit,倒是了解了一番,做个笔记。

 

用户态Rootkit的种类

首先我了解的用户态的rootkit是分为两种,一种是IAT hook,还有一种就是inline hook。解释一下,rootkit不同于其他恶意代码的地方简单的说,我的理解就是可以非常好的隐藏自己,所以在rootkit中会用到一种常见的技术叫做hook技术。

 

IAT hook

这种方法是比较容易理解的,因为在windows系统中,每一个程序都会有导入表,导出表,而程序调用一些函数也是通过导入表,然后跳转函数的真实地址(DLL中)并执行函数,所以这种方法就是直接修改IAT表,修改某个函数的地址为恶意代码的地址然后在跳转回真实的函数,执行,就完美的运行了恶意代码,而且程序看起来并不会有什么异常

 

原谅我这个垃圾画画水平

Inline hook

Inline hook简单的说就是修改api函数的代码,不过要先将函数的前几个字节改为跳转指令,跳转到恶意代码处,恶意代码的最后一部分是原函数被修改的指令跳转到原函数的指令。


通过一个小程序来看

 

首先图中有三个函数,第一个函数和第三个函数分别是获取当前进程的process id然后分别挂起线程与回复线程,所以说明第二个函数一定是会修改内核或者安装hook。

 

进入第二个函数就发现它先获取了send()函数的地址,作为参数传入最终的hook_install函数


进入最终的函数,就发现这个函数明显的做个一个inline_hook的安装,先是获取hook函数与send()函数的差值减五,减五是因为jmp指令覆盖了5个字节,所以真正相差的值需要减5。然后分配了255个字节,从第五个字节开始就是send()函数开始的5个字节,也就是被覆盖的指令然后就是跳转指令到send()函数,而后又将send函数的前几个字节改为跳转指令,跳转到hook函数,而最后的便是hook函数执行完毕后跳转回send()函数后面部分的指令。

 

至于函数中的VirtualProctect则是为了修改send()函数的不可执行与还原。

这个程序以及内容源自《恶意代码分析实战》一书11-2。这个例子除了这个inline hook还包含了对程序存活机制的windows注册表的相关操作,修改了Appinit_DLL项,本身又是一个dll,是一个不错的例子。



instruder.zip

  • 2014年07月02日 00:27
  • 15.81MB
  • 下载

利用netfilter hook开发llinux后门rootkit程序

rootdoor包括服务器端程序和客户端程序,在centos 6.5上面测试通过。 功能: 1、任意端口复用。端口复用,它就是在系统已经开放的端口上进行通讯,并且不影响系统的正常工作和服务的正常运...
  • freeman1975
  • freeman1975
  • 2015-10-21 10:42:23
  • 790

中转inline hook,不需要恢复首字节的hook

注:我实验的环境:win7 x64 经验证XP会有稍微区别,主要是我本次实验HOOK的API, 从XP到WIN7微软有了些许改变。 ----------------------------------...
  • friendan
  • friendan
  • 2015-02-23 23:38:27
  • 3859

inline hook原理简单剖析和实现(dll)

inline hook简单原理剖析及实现(dll)
  • CFrieman
  • CFrieman
  • 2016-12-05 16:54:52
  • 454

inline hook的原理及实现

网上没有找到多少关于inline hook的文章,感觉这方面资料不是很完整,所以决定自己写一份存档,重点讲述inline hook的实现。 inline hook的核心思想是:通过替换目标函数头部指令...
  • Qiu233
  • Qiu233
  • 2016-08-06 09:35:57
  • 2375

RootKit Ring0用hook方式隐藏进程

以前使用文件过滤驱动,测试了下内核级的hook好象,就实现了进程的隐藏,好象比filter driver简单得多,找时间添加hook功能 ...
  • rageliu
  • rageliu
  • 2006-10-26 16:53:00
  • 1715

Ring3 下 API Inline Hook 优化方案探索与实现

本博文由CSDN博主zuishikonghuan所作,版权归zuishikonghuan所有,转载请注明出处:http://blog.csdn.net/zuishikonghuan/article/d...
  • zuishikonghuan
  • zuishikonghuan
  • 2016-05-03 09:30:33
  • 4856

x64 windows下的inline hook

以前做过ia32的inline hook,现在自然扩展em64t x64中,虚拟地址变成64位,但大部分指令中的地址和立即数还是32位,执行时符号位扩展至64位 因此不能简单的放一个带偏移...
  • Lactoferrin
  • Lactoferrin
  • 2012-01-27 17:48:49
  • 8917

过XX保护之 InLine Hook

1--查看系统进程中的线程,发现有属于TeSafe.sys的线程,初步推测为守护线程。         2--系统回调,具体功能不予说明。 3-- SSDT  发现有3个Inline hook函数...
  • iCrack007
  • iCrack007
  • 2015-09-26 13:55:46
  • 639

高级Linux Kernel Inline Hook技术分析与实现

[目录] 1. 简述 2. 更改offset实现跳转 3. 补充 4. 如何查杀 5. 实例 一、简述 目前流行和成熟的kernel inline hook技术就是修改内核函数的op...
  • Tomstrong_369
  • Tomstrong_369
  • 2016-05-13 14:39:49
  • 736
收藏助手
不良信息举报
您举报文章:用户态rootkit之inline hook
举报原因:
原因补充:

(最多只允许输入30个字)