通过一个内核模块拦截文件系统的回调函数来实现进程隐藏。

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:

接着编译、链接:

测试结果:

最新文章

  1. 编译lsusb
  2. Java反射特性--获取其他类实例并调用其方法
  3. Xcode的清除缓存
  4. 浅谈Excel开发:八 Excel 项目的安装部署
  5. FineUI第十四天---布局之垂直布局和水平布局
  6. 走进AngularJs(七) 过滤器(filter) - 吕大豹
  7. highstock实现股票分时
  8. ADO.NET 快速入门(十二):从 SQL Server 生成 XML 数据
  9. eclipse 中创建maven web项目
  10. 切换samba用户
  11. JSF之经常使用注解
  12. [Android学习笔记]LayoutInflater的使用
  13. Windows 8.1 Preview的新功能和新API
  14. python基础===八大排序算法的 Python 实现
  15. sqlite数据库的char,varchar,text,nchar,nvarchar,ntext的区别
  16. (二十四)mongodb中group的问题二
  17. C++中const的实现机制深入分析
  18. Word技巧设置
  19. C语言 汉诺塔问题
  20. 在 Linux 上安装 Oracle 数据库 11g

热门文章

  1. WF追忆
  2. Android中新建的文件在R没有显示相应的文件解决的方法总结
  3. style="display:none"隐藏html的标签
  4. Windoows窗口程序四
  5. Semi-Supervised Classification with Graph Convolutional Networks
  6. Python RGB 和HSV颜色相互转换
  7. android NavigationBar 显示
  8. Swing开发图形界面有如下优势
  9. 搞笑的<Button></Button>
  10. BDIP和BVLC纹理分析