如何实现文件隐藏

方法:

    1. 劫持系统中用于读取文件列表的系统调用

    2. 劫持文件系统中的库函数,实现对于文件的隐藏

一、如何通过劫持库函数实现:

    通过preload 预加载库机制进行

    1. 编写注入劫持函数,并编译成动态链接库

        gcc -fPIC -shared parock.c -o libmycmp.so

    2. 加载预加载库

        export LD_PRELOAD=绝对路径/libmycmp.so

    3. 卸载预加载库

        unset LD_PRELOAD

    4. 单个程序加载预加载库

        LD_PRELOAD=绝对路径/libmycmp.so ./pass args

二: 通过劫持系统调用函数进行

寻找内核内存中系统调用表的内存地址sys_call_table,调换该内存中某个函数地址,实现劫持函数的调用—–>实现某个真正系统调用的实现。

系统调用的过程: 调用int 0x80,触发SWI中断异常,从idt系统中断异常向量表) 表中,找到 0x80中断对应的中断处理函数syscall),然后调用对应的sys_call,也就是call sys_call_table eaxnr_syscall),定位到sys_read,然后找到文件file节点,通过节点,找到file_operations中的操作函数.read

寻找sys_call_table地址的方法:

  1. 通过搜索system.map文件中的sys_call_table对应的值 system.map—-存储系统调用地址的文件 在system.map中找到sys_call_table的内存地址: uname -a cat /boot/System.map-3.19.0-25-generic | grep "sys_call_table"

  2. 在内核内存中进行特征搜索,找到sys_call_table的内存地址 PAGE_OFFSET 内核内存空间的开始地址 sys_close函数是导出 sys_open sys_read不导出),所以我们可以直接获取到该函数地址 sys_close 和sys_call_table 在同一个内存区间,就可以偏移到对应的sys_call_table中

  3. IDT表

 

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注