CRUX下实现进程隐藏(3)
2014-04-18 21:36
281 查看
通过一个内核模块拦截文件系统的回调函数来实现进程隐藏。
VFS(Virtual File System)是Linux在实际文件系统(如ext3,ext4,vfat等)上抽象出的一个文件系统模型,简单来说,VFS像是一个抽象类,为访问文件系统的内核线程提供了统一的接口,而各个具体文件系统是这个抽象类的子类,因此,可以说VFS用到了面向对象的思想。
proc文件系统也是VFS抽象类的一个具体子类,与其它文件系统不同的是,它是存在与内存中的虚拟文件系统,以文件系统的方式为访问内核数据的操作提供接口。在执行ps或ls命令时,proc文件系统会调用readdir函数依次遍历proc目录下的数字目录,而readdir又会调用filldir函数返回改数字目录对应进程的相关信息,因此,只要在filldir函数中增加适当的过滤,就可以实现对进程的隐藏了。
模块初始化流程如下:
其中patch_proc函数的作用是用我们自己定义的hack_proc_readdir函数代替原来的readdir函数。修改过程中需要关闭写保护,否则会发生内核Oops。
模块清理流程如下:
其中unpatch_proc函数的作用是恢复原来的readdir函数。
方法三内核模块的函数调用关系如下:
hack_proc_readdir函数定义如下:
hack_proc_readdir在读取并填充目录项时又会调用hack_proc_filldir函数,其定义如下:
可以发现,该函数在原始的proc_filldir函数的基础上增加了对要隐藏进程的判断(is_invisible函数),如果该进程要隐藏,则返回0,这样readdir就读不到该目录项;否则返回原始的proc_filldir。
编写完内核模块后,建立Makefile:
接着编译、链接:
测试结果:
VFS(Virtual File System)是Linux在实际文件系统(如ext3,ext4,vfat等)上抽象出的一个文件系统模型,简单来说,VFS像是一个抽象类,为访问文件系统的内核线程提供了统一的接口,而各个具体文件系统是这个抽象类的子类,因此,可以说VFS用到了面向对象的思想。
proc文件系统也是VFS抽象类的一个具体子类,与其它文件系统不同的是,它是存在与内存中的虚拟文件系统,以文件系统的方式为访问内核数据的操作提供接口。在执行ps或ls命令时,proc文件系统会调用readdir函数依次遍历proc目录下的数字目录,而readdir又会调用filldir函数返回改数字目录对应进程的相关信息,因此,只要在filldir函数中增加适当的过滤,就可以实现对进程的隐藏了。
模块初始化流程如下:
其中patch_proc函数的作用是用我们自己定义的hack_proc_readdir函数代替原来的readdir函数。修改过程中需要关闭写保护,否则会发生内核Oops。
模块清理流程如下:
其中unpatch_proc函数的作用是恢复原来的readdir函数。
方法三内核模块的函数调用关系如下:
hack_proc_readdir函数定义如下:
hack_proc_readdir在读取并填充目录项时又会调用hack_proc_filldir函数,其定义如下:
可以发现,该函数在原始的proc_filldir函数的基础上增加了对要隐藏进程的判断(is_invisible函数),如果该进程要隐藏,则返回0,这样readdir就读不到该目录项;否则返回原始的proc_filldir。
编写完内核模块后,建立Makefile:
接着编译、链接:
测试结果:
相关文章推荐
- CRUX下实现进程隐藏(1)
- CRUX下实现进程隐藏(2)
- linux 隐藏进程 - crux实现
- 文档标题:WinNT&Win2K下实现进程的完全隐藏
- 进程隐藏与进程保护(SSDT Hook 实现)(三)
- 进程隐藏与进程保护(SSDT Hook 实现)(三)
- 进程隐藏与进程保护(SSDT Hook 实现)(三)
- VB6实现在Win2000/XP上隐藏进程
- ring0实现进程的隐藏
- 进程隐藏与进程保护(SSDT HOOK 实现)
- 进程隐藏与进程保护(SSDT Hook 实现)(一)
- NT环境下进程隐藏的实现
- VB6实现在Win2000/XP上隐藏进程
- vb 纯代码实现NT下隐藏进程
- 进程隐藏与进程保护(SSDT Hook 实现)(一)
- NT环境下进程隐藏的实现
- 浅析进程“伪隐藏”技术与实现两则
- WinNT & Win2K下实现进程的完全隐藏
- 进程隐藏与进程保护(SSDT Hook 实现)(一)
- 进程隐藏与进程保护(SSDT Hook 实现)(二)