簡單的介紹Unix系統(tǒng)病毒機制
本文介紹了Unix系統(tǒng)病毒機制、具體實現(xiàn)以及ELF文件格式。簡述了Unix系統(tǒng)病毒檢測和反檢測技術(shù),提供了Linux/i386架構(gòu)下的一些例子。需要一些初步的Unix系統(tǒng)編程經(jīng)驗,能夠理解Linux/i386下匯編語言,如果理解ELF本身更好。
本文沒有任何實際意義上的病毒編程技術(shù),僅僅是把病毒原理應(yīng)用到Unix系統(tǒng)環(huán)境下。這里也不打算從頭介紹ELF規(guī)范,感興趣的讀者請自行閱讀ELF規(guī)范。
Unix系統(tǒng)感染 ELF 格式文件
進程映象包含"文本段"和"數(shù)據(jù)段",文本段的內(nèi)存保護屬性是r-x,因此一般自修改代碼不能用于文本段。數(shù)據(jù)段的內(nèi)存保護屬性是rw-。
段并不要求是頁尺寸的整數(shù)倍,這里用到了填充。
關(guān)鍵字:
[...] 一個完整的頁
M 已經(jīng)使用了的內(nèi)存
P 填充
頁號
#1 [PPPPMMMMMMMMMMMM] \
#2 [MMMMMMMMMMMMMMMM] |-- 一個段
#3 [MMMMMMMMMMMMPPPP] /
段并沒有限制一定使用多個頁,因此單頁的段是允許的。
頁號
#1 [PPPPMMMMMMMMPPPP] <-- 一個段
Unix系統(tǒng)典型的,數(shù)據(jù)段不需要從頁邊界開始,而文本段要求起始頁邊界對齊,一個進程映象的內(nèi)存布局可能如下:
關(guān)鍵字:
[...] 一個完整的頁
T 文本段內(nèi)容
D 數(shù)據(jù)段內(nèi)容
P 填充
頁號
#1 [TTTTTTTTTTTTTTTT] <-- 文本段內(nèi)容
#2 [TTTTTTTTTTTTTTTT] <-- 文本段內(nèi)容
#3 [TTTTTTTTTTTTPPPP] <-- 文本段內(nèi)容(部分)
#4 [PPPPDDDDDDDDDDDD] <-- 數(shù)據(jù)段內(nèi)容(部分)
#5 [DDDDDDDDDDDDDDDD] <-- 數(shù)據(jù)段內(nèi)容
#6 [DDDDDDDDDDDDPPPP] <-- 數(shù)據(jù)段內(nèi)容(部分)
頁1、2、3組成了文本段
頁4、5、6組成了數(shù)據(jù)段
從現(xiàn)在開始,為簡便起見,段描述圖表用單頁,如下:
頁號
#1 [TTTTTTTTTTTTPPPP] <-- 文本段
#2 [PPPPDDDDDDDDPPPP] <-- 數(shù)據(jù)段
在i386下,堆棧段總是在數(shù)據(jù)段被給予足夠空間之后才定位的,一般堆棧位于內(nèi)存高端,它是向低端增長的。
在ELF文件中,可裝載段都是物理映象:
- ELF Header
- .
- .
- Segment 1 <-- 文本段
- Segment 2 <-- 數(shù)據(jù)段
- .
- .
Unix系統(tǒng)每個段都有一個定位自身起始位置的虛擬地址??梢栽诖a中使用這個地址。
【編輯推薦】