• 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:

    接着编译、链接:

    测试结果:

  • 相关阅读:
    全选、全不选、反选
    IE Tester 怎样使用firebug 调试工具?
    策略模式
    模板方法模式
    迭代器模式——android中使用
    android 实现圆形波纹动画
    android 窗口的使用
    AlertDialog 基本使用
    国外android 网站
    ViewDragHelper 任意拖动
  • 原文地址:https://www.cnblogs.com/wacc/p/3674102.html
Copyright © 2020-2023  润新知