修改linux核心達到隱藏程序目的(2.6.28)
要求:高階作業系統與分布式系統作業
ps和top
命令列出了
unix
中當前所有程序的相關資訊,作業要求在linux中增加兩個系統呼叫,功能如下:
hide():
執行此系統呼叫後,隱藏當前程序,即當前程序不能夠被ps和top命令檢視到。
unhide()
:執行此系統呼叫後,取消隱藏當前程序,即當前程序恢復正常,能夠被ps和top命令檢視到。
解題思路:
ps命令和
top命令從
/proc
檔案系統中讀取程序資訊並顯示出來。因此,如果乙個程序的程序號沒有在
/proc
檔案系統中反映出來,則這個程序被「隱藏」了,「隱藏」程序在ps或
top命令的輸出不出現。 2
。修改linux的程序控制塊task_struts,在程序控制塊中增加乙個字段:
int hide;
hide
的值為1時,表示該程序被隱藏;為0時,表示該程序不被隱藏。 3
。修改建立程序的相關**,在程序建立時,置hide為0;即程序在初始建立時(預設)不被隱藏。 4
。在系統中增加系統呼叫hide(),其功能為: 1
)將程序控制塊中的hide置1; 2
)刪除/proc檔案系統中該程序的相關目錄項; 5
。在系統中增加系統呼叫unhide(),其功能為: 1
)將程序控制塊中的hide清0; 2
)增加/proc檔案系統中該程序的相關目錄項
具體做法:(實驗核心版本2.6.28,)
跟蹤核心可知,proc目錄下程序號目錄是動態生成的,是在每次readdir,getdents時動態生成,所以從某種意義上說增加或刪除/proc檔案系統中該程序的相關目錄項這種說法是不正確的。proc目錄內容的填充函式是proc_pid_readdir(fs/proc/base.c)
int proc_pid_readdir(struct file * filp, void * dirent, filldir_t filldir) //核心原始碼,修改前
ns = filp->f_dentry->d_sb->s_fs_info;
iter.task = null;
iter.tgid = filp->f_pos - tgid_offset;
for (iter = next_tgid(ns, iter);
iter.task;
iter.tgid += 1, iter = next_tgid(ns, iter))
} filp->f_pos = pid_max_limit + tgid_offset;
out:
put_task_struct(reaper);
out_no_task:
return 0;
}將proc_pid_readdir函式中的for迴圈修改為
for (iter = next_tgid(ns, iter);
iter.task;
iter.tgid += 1, iter = next_tgid(ns, iter)) }
} 修改task_struct 新增hide欄位(include/linux/sched.h)
struct task_struct
2 執行,檢視實驗結果
隱藏程序之核心版
隱藏程序通常出現在惡意程式中,隱藏的程序能讓任務管理器 procexp等3環的程式無法找到它,那麼如何實現隱藏程序呢?由於對這方面還是很感興趣,今天就來研究一下核心層的隱藏程序,首先在使用者層3環,如任務管理器 procexp遍歷程序都是使用createtoolhelp32snapshot api建...
Linux程序隱藏問題 顯示隱藏程序
阿里云云監控到有兩台redis伺服器cpu被某程序消耗400 cpu資源 系統檢視top 情況並未找到高消耗程序x7但cpu100 ni netstat 查詢到了一些異常請求,初步判斷出元件被提權入侵了 嘗試查詢異常程序x7關聯的檔案,排查還在 etc hosts發現增加了如下異常對映,檢視相關異常...
linux 隱藏程序 crux實現
本文在不修改ps或top命令的任何 與採用將程序號置0的方法的前提下,實現隱藏程序,本程式在crux 2.2上實現 1 原理 linux中,可以通過 proc檔案系統訪問到許多核心的內部資訊。proc檔案系統最初的設計也是用於方便地訪問程序相關的資訊,因此命名為proc。現在這個檔案系統已用於反映系...