快速业务通道

分享:Linux操作系统下隐藏文件

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-05-02
件的功能.vfs_readdir的地址是导出的, 这样就不用复杂的方法找它的地址了.

但是还有没有更进一步的方法呢? 前面不是提到过有个filldir64函数吗, 它用来填充buf结构的.也许通过hook它来做更隐蔽的隐藏文件方法. 继续跟踪filldir64,看看它是怎么实现的.

static int filldir64(void * __buf, const char * name, int namlen, loff_t offset,

    u64 ino, unsigned int d_type)

    {

    struct linux_dirent64 __user *dirent;

    struct getdents_callback64 * buf = (struct getdents_callback64 *) __buf;

    int reclen = ALIGN(NAME_OFFSET(dirent)   namlen   1, sizeof(u64));



    buf->error = -EINVAL;

    if (reclen > buf->count)

    return -EINVAL;

    dirent = buf->previous;

    if (dirent) {

    if (__put_user(offset, &dirent->d_off))

    goto efault;

    }

    dirent = buf->current_dir;

    if (__put_user(ino, &dirent->d_ino))

    goto efault;

    if (__put_user(0, &dirent->d_off))

    goto efault;

    if (__put_user(reclen, &dirent->d_reclen))

    goto efault;

    if (__put_user(d_type, &dirent->d_type))

    goto efault;

    if (copy_to_user(dirent->d_name, name, namlen))

    goto efault;

    if (__put_user(0, dirent->d_name   namlen))

    goto efault;

    buf->previous = dirent;

    dirent = (void __user *)dirent   reclen;

    buf->current_dir = dirent;

    buf->count -= reclen;

    return 0;

    efault:

    buf->error = -EFAULT;

    return -EFAULT;

    }


先把参数buf转换成struct getdents_callback64的结构指针.

struct getdents_callback64 {

    struct linux_dirent64 __user * current_dir;

    struct linux_dirent64 __user * previous;

    int count;

    int error;

    };


current_dir始终指向当前的struct dirent64结构,filldir64每次只填充一个dirent64结构.

它是被file->f_op->readdir循环调用的. 通过代码可以看出是把dirent64结构的相关项拷贝到用户空间的dirent64结构中, 然后更新相应的指针.

通过分析filldir64代码, 可以判定通过判断参数name,看它是否是我们想隐藏的文件,是的话,return 0就好了.

三. 扩展

通过分析sys_getdents64代码的实现,我们可以了解到通过hook内核函数的方法,来完成rootkit的功能是很简单和方便的. 关键你能了解它的实现逻辑. 对linux平台来说,阅读内核源代码是开发rootkit的根本. 如何hook? 最简单的就是修改函数的前几个字节,jmp到我们的新函数中去, 在新函数完成类似函数的功能. 根本不必在跳回原函数了, 有了内核源代码在手,原函数怎么实现,我们就怎么copy过去给它在实现一次. 所在linux实现rk也有很方便的一点,就是它的内核源代码是公开的, 好好阅读源代码吧, 你会有更多的收获.

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号