0.
初讀vfs,大體思路都有了,仔細分析了proc中,寫個檔案隱藏深入了解proc目錄項的新增與建立。
1.yy原先的隱藏方法
原先的方法是考慮sys_getdents64這個系統呼叫,有變更內部執行流,也有hook filldir64
這個函式的。
我想寫個通用的方法,就是切斷要隱藏的檔案與整個kernel的關係,說白了就是把檔案相關結構
脫離kernel聯絡(比如一些檔案相關鍊錶等),具體實行起來把inode/dentry/file等等結構都
考慮到,未免太繁瑣了。況且這裡只是實現欺騙ls的小功能。
2.具體實現起來也要涉及sys_getdents64的流程(ls就用此函式)
----------
sys_getdents64
==> vfs_readdir
==> file->f_op->readdir(對於proc根目錄是proc_root_readdir/proc內部子目錄是proc_readdir)
==> proc_readdir:
...do while (de);
...----------
從**裡面可以看到,最後獲取的de(proc_dir_entry)通過filldir函式填充到dirent,最後拷貝dirent到使用者態給ls
這裡,只要將想要隱藏的檔案的proc_dir_entry從其父目錄項的子目錄項鍊表中摘除即可。
3.**實現
**只實現隱藏檔案/proc/bus,恢復隱藏和具體通用proc檔案隱藏就沒實現:b
---------------
/* kernel-2.6.34 */
#include
#include
#include
#include
#include
#include
#include
/* hide file: /proc/bus */
#define hidefile "bus"
#define hidefile_parent "/proc"
static int __init hide_init(void)
inode = filp->f_path.dentry->d_inode;
pe = pde(inode);
/* search hidefile proc_dir_entry */
for (old_se = null, se = pe->subdir; se; old_se = se, se = se->next)
if (se == null)
/* 'del' hidefile proc_dir_entry from list */
if (old_se)
else
filp_close(filp, null);
printk(kern_alert "hide init/n");
return 0;
}static void __exit hide_exit(void)
module_init(hide_init);
module_exit(hide_exit);
module_license("gpl");
-------------
4. 測試
#ls /proc | grep bus
bus#insmod hidefile.ko
hide init
#ls /proc | grep bus
#cat /proc/bus
cat: /proc/bus/: is a directory
#cd /proc/bus
#//進入/proc/bus
經過我的測試,隱藏檔案和隱藏目錄還是有區別的,檔案可以隱藏後完全找不到,
但是目錄隱藏後仍然可以連線進入,只能騙騙ls
5.繼續vfs,看看最後能不能做個把檔案從核心關係集合中剝離的lkm :)
just for funnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn!
Proc檔案系統
include static struct proc dir entry proc null int read proc char page,char start,off t off,int count,int eof,void data len sprintf page len,debug mod...
proc檔案系統
linux 將一切事物都看成檔案,硬體裝置在檔案系統中也有相應的條目。我們使用底層系統呼叫這樣一種特殊方式通過 dev目錄中的檔案來訪問硬體。控制硬體的軟體驅動程式通常可以以某種特定方式配置,或者能夠報告相關資訊。用於與裝置驅動程式進行通訊的工具在過去就已經十分常見,近來年,傾向於提供更一致的方式來...
proc檔案系統
proc檔案系統是由核心實現的檔案系統。當使用者態訪問 proc下檔案時,實際上是呼叫核心中和該檔案對應的特定函式。一般用proc檔案來實現核心 驅動的呼叫。大部分proc檔案是唯讀的,用於獲取核心資訊 還有一些proc檔案是可寫的,當使用者態改變了proc檔案的內容時,會呼叫核心的函式,從而改變核...