修改linux核心達到隱藏程序目的 2 6 28

2021-06-22 22:08:01 字數 1704 閱讀 8865

修改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。現在這個檔案系統已用於反映系...