linux认证:分享Linux操作系统下隐藏文件Linux认证考试

文章作者 100test 发表时间 2009:05:13 17:34:43
来源 100Test.Com百考试题网


  一. 概述
  目前通用的隐藏文件方法还是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.
  res = mutex_lock_killable(&.inode->.i_mutex).
  if (res)
  goto out.
  res = -ENOENT.
  if (!IS_DEADDIR(inode)) {
  res = file->.f_op->.readdir(file, buf, filler).
  file_accessed(file).
  }
  mutex_unlock(&.inode->.i_mutex).
  out:
  return res.
  }
  EXPORT_SYMBOL(vfs_readdir).

相关文章


linux认证:apache_mysql随机启动关闭Linux认证考试
xmanager不能远程登录Solaris10主机问题Linux认证考试
linux认证:Xined服务客户端与服务器的中介Linux认证考试
Linux系统下Telnet服务器配置Linux认证考试
linux认证:分享Linux操作系统下隐藏文件Linux认证考试
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛