<form id="hz9zz"></form>
  • <form id="hz9zz"></form>

      <nobr id="hz9zz"></nobr>

      <form id="hz9zz"></form>

    1. 首頁 > 電腦資訊 > 電腦知識

      Linux設置系統下藏匿文件

      作者:佚名   來源:本站   時間:2018-06-12  點擊:93次

      Linux下隱藏文件,目前通用的隱藏文件方法還是hooksys_getdents64系統調用, 大致流程就是先調用原始的sys_getdents64系統調用,然后在在buf中做過濾。修改sys_call_table是比較原始的rk技術了,碰到好點的管理員, 基本上gdb一下vmlinux就能檢測出來。 如何想做到更加隱蔽的話,就要尋找新的技術。 inline hook也是目前比較流行的做法,不容易檢測。本文通過講解一種利用inline hook內核中某函數, 來達到隱藏文件的方法。

      一. 概述

      目前通用的隱藏文件方法還是hooksys_getdents64系統調用, 大致流程就是先調用原始的sys_getdents64系統調用,然后在在buf中做過濾。修改sys_call_table是比較原始的rk技術了,碰到好點的管理員, 基本上gdb一下vmlinux就能檢測出來。 如何想做到更加隱蔽的話,就要尋找新的技術。 inline hook也是目前比較流行的做法,不容易檢測。本文通過講解一種利用inline hook內核中某函數, 來達到隱藏文件的方法。

      二. 剖析sys_getdnts64系統調用

      想隱藏文件, 還是要從sys_dents64系統調用下手。 去看下它在內核中是如何實現的。

      代碼在linux-2.6.26/fs/readdir.c中:

      asmlinkage long sys_getdents64(unsigned int fd, struct linux_dirent64

      __user * dirent, unsigned int count)

      {

      struct file * file;

      struct linux_dirent64 __user * lastdirent;

      struct getdents_callback64 buf;

      int error;

      error = -EFAULT;

      if (!access_ok(VERIFY_WRITE, dirent, count))

      goto out;

      error = -EBADF;

      file = fget(fd);

      if (!file)

      goto out;

      buf.current_dir = dirent;

      buf.previous = NULL;

      buf.count = count;

      buf.error = 0;

      error = vfs_readdir(file, filldir64, &buf);

      if (error < 0)

      goto out_putf;

      error = buf.error;

      lastdirent = buf.previous;

      if (lastdirent) {

      typeof(lastdirent->d_off) d_off = file->f_pos;

      error = -EFAULT;

      if (__put_user(d_off, &lastdirent->d_off))

      goto out_putf;

      error = count - buf.count;

      }

      out_putf:

      fput(file);

      out:

      return error;

      }

      首先調用access_ok來驗證是下用戶空間的dirent地址是否越界,是否可寫。 接著根據fd,利用fget找到對應的file結構。 接著出現了一個填充buf數據結構的操作,先不管它是干什么的,接著往下看。

      vfs_readdir(file, filldir64, &buf);

      函數最終還是調用vfs層的vfs_readdir來獲取文件列表的。 到這,我們可以是否通過hookvfs_readdir來達到隱藏文件的效果呢。 繼續跟蹤vfs_readdir看看這個想法是否可行。

      源代碼在同一文件中:

      int vfs_readdir(struct file *file, filldir_t filler, void *buf)

      {

      struct inode *inode = file->f_path.dentry->d_inode;

      int res = -ENOTDIR;

      if (!file->f_op || !file->f_op->readdir)

      goto out;

      res = security_file_permission(file, MAY_READ);

      if (res)

      goto out;

      推薦游戲

      換一換
      日韩精品一区二区三区高清