老司机91精品网站在线观看-老司机67194免费观看-老司国产精品视频-老熟人老女人国产老太-中文字幕日本在线-中文字幕日本一区久久

始創于2000年 股票代碼:831685
咨詢熱線:0371-60135900 注冊有禮 登錄
  • 掛牌上市企業
  • 60秒人工響應
  • 99.99%連通率
  • 7*24h人工
  • 故障100倍補償
您的位置: 網站首頁 > 幫助中心>文章內容

Linux操作系統下隱藏文件的新方法

發布時間:  2012/8/11 9:13:21
 一. 概述

目前通用的隱藏文件方法還是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);


 

它有3個參數,第一個是通過fget得到的file結構指針, 第2個通過結合上下文可得知,這是一個回調函數用來填充第3個參數開始的用戶空間的指針。 接著看看它具體是怎么實現的。

通過security_file_permission()驗證后, 在用mutex_lock_killable()對inode結構加了鎖。然后調用ile->f_op->readdir(file, buf, filler);通過進一步的底層函數來對buf進行填充。這個buf就是用戶空間strcut dirent64結構的開始地址。

所以到這里我們可以斷定通過hook vfs_readdir函數對buf做過濾還是可以完成隱藏文件的功能。而且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也有很方便的一點,就是它的內核源代碼是公開的, 好好閱讀源代碼吧, 你會有更多的收獲。


本文出自:億恩科技【www.ypdoo.com.cn】

服務器租用/服務器托管中國五強!虛擬主機域名注冊頂級提供商!15年品質保障!--億恩科技[ENKJ.COM]

  • 您可能在找
  • 億恩北京公司:
  • 經營性ICP/ISP證:京B2-20150015
  • 億恩鄭州公司:
  • 經營性ICP/ISP/IDC證:豫B1.B2-20060070
  • 億恩南昌公司:
  • 經營性ICP/ISP證:贛B2-20080012
  • 服務器/云主機 24小時售后服務電話:0371-60135900
  • 虛擬主機/智能建站 24小時售后服務電話:0371-60135900
  • 專注服務器托管17年
    掃掃關注-微信公眾號
    0371-60135900
    Copyright© 1999-2019 ENKJ All Rights Reserved 億恩科技 版權所有  地址:鄭州市高新區翠竹街1號總部企業基地億恩大廈  法律顧問:河南亞太人律師事務所郝建鋒、杜慧月律師   京公網安備41019702002023號
      0
     
     
     
     

    0371-60135900
    7*24小時客服服務熱線

     
     
    免费国产在线视频| 国产视频一区在线| 久久99青青久久99久久| a级精品九九九大片免费看| 国产视频一区二区三区四区| 国产伦久视频免费观看 视频| 国产成+人+综合+亚洲不卡| 色综合久久天天综合绕观看| 尤物视频网站在线观看| 国产a网| 精品久久久久久免费影院| 国产不卡在线观看| 国产91精品一区| 99久久精品国产国产毛片| 日日夜夜婷婷| 精品国产三级a| 天天色成人| 精品视频一区二区三区免费| 亚久久伊人精品青青草原2020| 美女免费黄网站| 日韩在线观看免费完整版视频| 人人干人人草| 久久国产精品只做精品| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 国产一区二区精品| 美女被草网站| 国产综合91天堂亚洲国产| 成人在激情在线视频| 久久99青青久久99久久| 欧美日本免费| 日韩在线观看视频免费| 91麻豆精品国产高清在线| 高清一级片| 欧美电影免费| 亚州视频一区二区| 黄视频网站免费看| 天天做日日爱夜夜爽| 精品久久久久久综合网| 国产美女在线一区二区三区| 四虎影视精品永久免费网站| 精品在线观看国产| 日韩一级黄色| 黄色福利| 毛片成人永久免费视频| 韩国三级香港三级日本三级| 国产精品自拍亚洲| 精品国产亚一区二区三区| 91麻豆精品国产自产在线观看一区| 999久久66久6只有精品| 尤物视频网站在线观看| 精品视频在线观看一区二区| 精品视频在线观看视频免费视频| 国产成人精品影视| 美女免费毛片| 精品久久久久久综合网 | 亚洲 国产精品 日韩| 欧美另类videosbestsex久久| 国产视频一区二区三区四区| 久久精品大片| 九九久久99| 欧美a级成人淫片免费看| 天堂网中文字幕| 国产伦精品一区二区三区在线观看| 国产91丝袜在线播放0| 成人a大片高清在线观看| 欧美激情一区二区三区视频高清| 国产一级生活片| 午夜欧美成人久久久久久| 美国一区二区三区| 日韩中文字幕一区| 精品视频在线观看视频免费视频| 99久久精品国产高清一区二区 | 黄视频网站在线免费观看| 香蕉视频三级| 国产综合成人观看在线| 国产国语对白一级毛片| 国产一区二区精品久久| 久久99欧美| 精品毛片视频| 精品国产一区二区三区久久久蜜臀| 成人免费观看网欧美片| 亚洲 男人 天堂| 亚欧成人毛片一区二区三区四区| 欧美爱色| 国产成人欧美一区二区三区的| 日韩一级黄色| 免费国产在线观看| 日韩免费在线观看视频| 欧美日本免费| 天堂网中文字幕| 精品久久久久久中文字幕2017| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 久久福利影视| 亚洲女人国产香蕉久久精品 | 成人在激情在线视频| 久久99中文字幕| 你懂的在线观看视频| 黄色福利| 日韩av东京社区男人的天堂| 青青久久精品| 亚洲精品中文一区不卡| 国产一区二区高清视频| 欧美1区| 欧美a级大片| 可以免费在线看黄的网站| 天天色色色| 国产成人精品在线| 色综合久久久久综合体桃花网| 成人a级高清视频在线观看| 欧美另类videosbestsex| 久久精品免视看国产成人2021| 999精品视频在线| 麻豆系列国产剧在线观看| 二级片在线观看| 午夜在线亚洲| 麻豆午夜视频| 亚欧成人乱码一区二区| 国产麻豆精品| 国产成人精品一区二区视频| 日韩中文字幕在线亚洲一区| 精品在线免费播放| 一本伊大人香蕉高清在线观看| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 999久久久免费精品国产牛牛| 欧美激情在线精品video| 日韩专区亚洲综合久久| 麻豆网站在线看| 国产福利免费视频| 夜夜操天天爽| 日本特黄特黄aaaaa大片| 久草免费资源| 欧美激情影院| 国产高清在线精品一区二区| 日韩在线观看免费完整版视频| 国产美女在线观看| 精品视频在线观看一区二区 | 黄视频网站免费观看| 国产一区二区精品久久91| 亚欧成人乱码一区二区| 久久国产影院| 韩国三级香港三级日本三级la| 免费的黄视频| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 免费一级片在线观看| 精品国产亚洲人成在线| 成人a级高清视频在线观看| 国产成+人+综合+亚洲不卡| 精品国产一区二区三区久久久蜜臀| 欧美电影免费看大全| 国产网站麻豆精品视频| 日韩专区亚洲综合久久| 国产成人精品一区二区视频| 亚洲爆爽| 欧美激情一区二区三区在线播放| 日本在线不卡视频| 国产91丝袜在线播放0| 国产91精品一区二区| 国产麻豆精品hdvideoss| 日韩免费在线视频| 日本特黄特色aa大片免费| 91麻豆高清国产在线播放| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 免费国产在线观看| 日本免费区| 青草国产在线| 青草国产在线| 久久精品免视看国产成人2021| 亚洲女人国产香蕉久久精品 | 国产麻豆精品hdvideoss| 日韩av东京社区男人的天堂| 999久久久免费精品国产牛牛| 午夜精品国产自在现线拍| 欧美激情一区二区三区在线播放| 久久国产一久久高清| 亚洲天堂免费| 成人a级高清视频在线观看| 四虎论坛| 你懂的在线观看视频| 成人a大片在线观看| 国产综合成人观看在线| 美国一区二区三区| 精品国产亚洲人成在线| 麻豆网站在线看| 夜夜操天天爽| 91麻豆精品国产片在线观看| 青青青草视频在线观看| 日本特黄特色aa大片免费| 日本在线不卡视频| 亚洲精品永久一区| 国产不卡在线观看| 欧美激情一区二区三区视频| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 国产一区二区精品| 成人高清视频在线观看| 黄视频网站在线免费观看| 国产网站免费在线观看| 亚州视频一区二区| 久久99中文字幕| 日韩中文字幕在线播放| 日韩一级精品视频在线观看|