CRUX下实现进程隐藏(3)
通过一个内核模块拦截文件系统的回调函数来实现进程隐藏。
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:
接着编译、链接:
测试结果:
最新文章
- 编译lsusb
- Java反射特性--获取其他类实例并调用其方法
- Xcode的清除缓存
- 浅谈Excel开发:八 Excel 项目的安装部署
- FineUI第十四天---布局之垂直布局和水平布局
- 走进AngularJs(七) 过滤器(filter) - 吕大豹
- highstock实现股票分时
- ADO.NET 快速入门(十二):从 SQL Server 生成 XML 数据
- eclipse 中创建maven web项目
- 切换samba用户
- JSF之经常使用注解
- [Android学习笔记]LayoutInflater的使用
- Windows 8.1 Preview的新功能和新API
- python基础===八大排序算法的 Python 实现
- sqlite数据库的char,varchar,text,nchar,nvarchar,ntext的区别
- (二十四)mongodb中group的问题二
- C++中const的实现机制深入分析
- Word技巧设置
- C语言 汉诺塔问题
- 在 Linux 上安装 Oracle 数据库 11g
热门文章
- WF追忆
- Android中新建的文件在R没有显示相应的文件解决的方法总结
- style=";display:none";隐藏html的标签
- Windoows窗口程序四
- Semi-Supervised Classification with Graph Convolutional Networks
- Python RGB 和HSV颜色相互转换
- android NavigationBar 显示
- Swing开发图形界面有如下优势
- 搞笑的<;Button>;<;/Button>;
- BDIP和BVLC纹理分析