成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Unix/ELF文件格式及病毒分析

瀏覽:249日期:2024-06-29 16:12:38

★ 介紹

本文介紹了Unix病毒機(jī)制、具體實(shí)現(xiàn)以及ELF文件格式。簡(jiǎn)述了Unix病毒檢測(cè)和反檢 測(cè)技術(shù),提供了Linux/i386架構(gòu)下的一些例子。需要一些初步的Unix編程經(jīng)驗(yàn),能夠 理解Linux/i386下匯編語(yǔ)言,如果理解ELF本身更好。

本文沒(méi)有任何實(shí)際意義上的病毒編程技術(shù),僅僅是把病毒原理應(yīng)用到Unix環(huán)境下。這 里也不打算從頭介紹ELF規(guī)范,感興趣的讀者請(qǐng)自行閱讀ELF規(guī)范。

★ 感染 ELF 格式文件

進(jìn)程映象包含'文本段'和'數(shù)據(jù)段',文本段的內(nèi)存保護(hù)屬性是r-x,因此一般自修改 代碼不能用于文本段。數(shù)據(jù)段的內(nèi)存保護(hù)屬性是rw-。

段并不要求是頁(yè)尺寸的整數(shù)倍,這里用到了填充。

關(guān)鍵字:

[...] 一個(gè)完整的頁(yè) M 已經(jīng)使用了的內(nèi)存 P 填充

頁(yè)號(hào) #1 [PPPPMMMMMMMMMMMM] #2 [MMMMMMMMMMMMMMMM] |-- 一個(gè)段 #3 [MMMMMMMMMMMMPPPP] /

段并沒(méi)有限制一定使用多個(gè)頁(yè),因此單頁(yè)的段是允許的。

頁(yè)號(hào) #1 [PPPPMMMMMMMMPPPP] <-- 一個(gè)段

典型的,數(shù)據(jù)段不需要從頁(yè)邊界開(kāi)始,而文本段要求起始頁(yè)邊界對(duì)齊,一個(gè)進(jìn)程映象 的內(nèi)存布局可能如下:

關(guān)鍵字:

[...] 一個(gè)完整的頁(yè) T 文本段內(nèi)容 D 數(shù)據(jù)段內(nèi)容 P 填充

頁(yè)號(hào) #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)容(部分)

頁(yè)1、2、3組成了文本段 頁(yè)4、5、6組成了數(shù)據(jù)段

從現(xiàn)在開(kāi)始,為簡(jiǎn)便起見(jiàn),段描述圖表用單頁(yè),如下:

頁(yè)號(hào) #1 [TTTTTTTTTTTTPPPP] <-- 文本段 #2 [PPPPDDDDDDDDPPPP] <-- 數(shù)據(jù)段

在i386下,堆棧段總是在數(shù)據(jù)段被給予足夠空間之后才定位的,一般堆棧位于內(nèi)存高 端,它是向低端增長(zhǎng)的。

在ELF文件中,可裝載段都是物理映象:

ELF Header . . Segment 1 <-- 文本段 Segment 2 <-- 數(shù)據(jù)段 . .

每個(gè)段都有一個(gè)定位自身起始位置的虛擬地址。可以在代碼中使用這個(gè)地址。

為了插入寄生代碼,必須保證原來(lái)的代碼不被破壞,因此需要擴(kuò)展相應(yīng)段所需內(nèi)存。

文本段事實(shí)上不僅僅包含代碼,還有 ELF 頭,其中包含動(dòng)態(tài)鏈接信息等等。如果直 接擴(kuò)展文本段插入寄生代碼,帶來(lái)的問(wèn)題很多,比如引用絕對(duì)地址等問(wèn)題。可以考慮 保持文本段不變,額外增加一個(gè)段存放寄生代碼。然而引入一個(gè)額外的段的確容易引 起懷疑,很容易被發(fā)現(xiàn)。

向高端擴(kuò)展文本段或者向低端擴(kuò)展數(shù)據(jù)段都有可能引起段重疊,在內(nèi)存中重定位一個(gè) 段又會(huì)使那些引用了絕對(duì)地址的代碼產(chǎn)生問(wèn)題。可以考慮向高端擴(kuò)展數(shù)據(jù)段,這不是 個(gè)好主意,有些Unix完整地實(shí)現(xiàn)了內(nèi)存保護(hù)機(jī)制,數(shù)據(jù)段是不可執(zhí)行的。

段邊界上的頁(yè)填充提供了插入寄生代碼的地方,只要空間允許。在這里插入寄生代碼 不破壞原有段內(nèi)容,不要求重定位。文本段結(jié)尾處的頁(yè)填充是個(gè)很好的地方,最后看 上去象下面這個(gè)樣子:

關(guān)鍵字:

[...] 一個(gè)完整的頁(yè) V 寄生代碼 T 文本段內(nèi)容 D 數(shù)據(jù)段內(nèi)容 P 填充

頁(yè)號(hào) #1 [TTTTTTTTTTTTVVPP] <-- 文本段 #2 [PPPPDDDDDDDDPPPP] <-- 數(shù)據(jù)段

一個(gè)更完整的ELF可執(zhí)行布局如下:

ELF Header Program header table Segment 1 Segment 2 Section header table Section 1 . . Section n

典型的,額外的節(jié)(那些沒(méi)有相應(yīng)段的節(jié))用于存放調(diào)試信息、符號(hào)表等等。

下面是一些來(lái)自 ELF 規(guī)范的內(nèi)容:

ELF 頭位于最開(kāi)始,保存一張'road map',描述了文件的組織結(jié)構(gòu)。節(jié)保存大量鏈接 信息、符號(hào)表、重定位信息等等。

如果存在一個(gè)'program header table',將告訴操作系統(tǒng)如何建立進(jìn)程映象(執(zhí)行一 個(gè)程序)。可執(zhí)行文件必須有一個(gè)'program header table',可重定位的文件不需要 該表。'section header table'描述了文件的節(jié)組織。每個(gè)節(jié)在該表中都有一個(gè)表項(xiàng), 表項(xiàng)包含了諸如節(jié)名、節(jié)尺寸等信息。鏈接過(guò)程中被用到的文件自身必須有一個(gè) 'section header table',其他目標(biāo)文件可有可無(wú)該表。

插入寄生代碼之后,ELF 文件布局如下:

ELF Header Program header table Segment 1 - 文本段(主體代碼) - 寄生代碼 Segment 2 Section header table Section 1 . . Section n

寄生代碼必須物理插入到ELF文件中,文本段必須擴(kuò)展以包含新代碼。

下面的信息來(lái)自/usr/include/elf.h

/* The ELF file header. This appears at the start of every ELF file. */

#define EI_NIDENT (16)

typedef struct { unsigned char e_ident[EI_NIDENT]; /* Magic number and other info */ Elf32_Half e_type; /* Object file type */ Elf32_Half e_Machine; /* Architecture */ Elf32_Word e_version; /* Object file version */ Elf32_Addr e_entry; /* Entry point virtual address */ Elf32_Off e_phoff; /* Program header table file offset */ Elf32_Off e_shoff; /* Section header table file offset */ Elf32_Word e_flags; /* Processor-specific flags */ Elf32_Half e_ehsize; /* ELF header size in bytes */ Elf32_Half e_phentsize; /* Program header table entry size */ Elf32_Half e_phnum; /* Program header table entry count */ Elf32_Half e_shentsize; /* Section header table entry size */ Elf32_Half e_shnum; /* Section header table entry count */ Elf32_Half e_shstrndx; /* Section header string table index */ } Elf32_Ehdr;

e_entry 保存了程序入口點(diǎn)的虛擬地址。

e_phoff 是'program header table'在文件中的偏移。因此為了讀取 'program header table',需要調(diào)用lseek()定位該表。

e_shoff 是'section header table'在文件中的偏移。該表位于文件尾部,在文本段 尾部插入寄生代碼之后,必須更新e_shoff指向新的偏移。

/* Program segment header. */

typedef struct { Elf32_Word p_type; /* Segment type */ Elf32_Off p_offset; /* Segment file offset */ Elf32_Addr p_vaddr; /* Segment virtual address */ Elf32_Addr p_paddr; /* Segment physical address */ Elf32_Word p_filesz; /* Segment size in file */ Elf32_Word p_memsz; /* Segment size in memory */ Elf32_Word p_flags; /* Segment flags */ Elf32_Word p_align; /* Segment alignment */ } Elf32_Phdr;

可裝載段(文本段/數(shù)據(jù)段)在'program header'中由成員變量p_type標(biāo)識(shí)出是可裝載 的,其值為PT_LOAD (1)。與'ELF header'中的e_shoff一樣,這里的p_offset成員 必須在插入寄生代碼后更新以指向新偏移。

p_vaddr 指定了段的起始虛擬地址。以p_vaddr為基地址,重新計(jì)算e_entry,就可以 指定程序流從何處開(kāi)始。

可以利用p_vaddr指定程序流從何處開(kāi)始。

p_filesz 和 p_memsz 分別對(duì)應(yīng)該段占用的文件尺寸和內(nèi)存尺寸。

.bss 節(jié)對(duì)應(yīng)數(shù)據(jù)段里未初始化的數(shù)據(jù)部分。我們不想讓未初始化的數(shù)據(jù)占用文件空 間,但是進(jìn)程映象必須保證能夠分配足夠的內(nèi)存空間。.bss 節(jié)位于數(shù)據(jù)段尾部,任 何超過(guò)文件尺寸的定位都假設(shè)位于該節(jié)中。

/* Section header. */

typedef struct { Elf32_Word sh_name; /* Section name (string tbl index) */ Elf32_Word sh_type; /* Section type */ Elf32_Word sh_flags; /* Section flags */ Elf32_Addr sh_addr; /* Section virtual addr at execution */ Elf32_Off sh_offset; /* Section file offset */ Elf32_Word sh_size; /* Section size in bytes */ Elf32_Word sh_link; /* Link to another section */ Elf32_Word sh_info; /* Additional section information */ Elf32_Word sh_addralign; /* Section alignment */ Elf32_Word sh_entsize; /* Entry size if section holds table */ } Elf32_Shdr;

sh_offset 指定了節(jié)在文件中的偏移。

為了在文本段末尾插入寄生代碼,我們必須做下列事情:

* 修正'ELF header'中的 p_shoff * 定位'text segment program header' * 修正 p_filesz * 修正 p_memsz * 對(duì)于文本段phdr之后的其他phdr * 修正 p_offset * 對(duì)于那些因插入寄生代碼影響偏移的每節(jié)的shdr * 修正 sh_offset * 在文件中物理地插入寄生代碼到這個(gè)位置 text segment p_offset + p_filesz (original)

這里存在一個(gè)大問(wèn)題,ELF 規(guī)范中指出,

p_vaddr mod PAGE_SIZE == p_offset mod PAGE_SIZE

為了滿足這個(gè)要求:

* 修正'ELF header'中的 p_shoff ,增加 PAGE_SIZE 大小 * 定位'text segment program header' * 修正 p_filesz * 修正 p_memsz * 對(duì)于文本段phdr之后的其他phdr * 修正 p_offset ,增加 PAGE_SIZE 大小 * 對(duì)于那些因插入寄生代碼影響偏移的每節(jié)的shdr * 修正 sh_offset ,增加 PAGE_SIZE 大小 * 在文件中物理地插入寄生代碼以及填充(確保構(gòu)成一個(gè)完整頁(yè))到這個(gè)位置 text segment p_offset + p_filesz (original)

我們還需要修正程序入口點(diǎn)的虛擬地址,使得寄生代碼先于宿主代碼執(zhí)行。同時(shí)需要 在寄生代碼尾部能夠跳轉(zhuǎn)回宿主代碼原入口點(diǎn)繼續(xù)正常流程。

* 修正'ELF header'中的 p_shoff ,增加 PAGE_SIZE 大小 * 修正寄生代碼的尾部,使之能夠跳轉(zhuǎn)回宿主代碼原入口點(diǎn) * 定位'text segment program header' * 修正 'ELF header'中的 e_entry ,指向 p_vaddr + p_filesz * 修正 p_filesz * 修正 p_memsz * 對(duì)于文本段phdr之后的其他phdr * 修正 p_offset ,增加 PAGE_SIZE 大小 * 對(duì)于文本段的最后一個(gè)shdr * 修正sh_len(應(yīng)該是sh_size吧,不確定),增加寄生代碼大小 * 對(duì)于那些因插入寄生代碼影響偏移的每節(jié)的shdr * 修正 sh_offset ,增加 PAGE_SIZE 大小 * 在文件中物理地插入寄生代碼以及填充(確保構(gòu)成一個(gè)完整頁(yè))到這個(gè)位置 text segment p_offset + p_filesz (original)

病毒可以隨機(jī)遍歷一個(gè)目錄樹(shù),尋找那些e_type等于 ET_EXEC 或者 ET_DYN 的文件, 加以感染,這分別是可執(zhí)行文件和動(dòng)態(tài)鏈接庫(kù)文件。

★ 分析Linux病毒

病毒要求不使用庫(kù),避開(kāi)libc,轉(zhuǎn)而使用系統(tǒng)調(diào)用機(jī)制。 為了動(dòng)態(tài)申請(qǐng)堆內(nèi)存用于phdr table和shdr table,應(yīng)該使用brk系統(tǒng)調(diào)用。 利用與緩沖區(qū)溢出相同的技術(shù)取得常量字符串的地址。

使用gcc -S編譯c代碼,觀察調(diào)整asm代碼。 注意在進(jìn)入/離開(kāi)寄生代碼的時(shí)候保存/恢復(fù)寄存器。

利用objdump -D觀察調(diào)整一些需要確定的偏移量。

★ 檢測(cè)病毒

這里描述的病毒很容易檢測(cè)。最顯眼的是程序入口點(diǎn)不在常規(guī)節(jié)中,甚至干脆不在任 何節(jié)中。清理病毒的過(guò)程和感染病毒的過(guò)程類似。

用objdump --all-headers很容易定位程序入口點(diǎn),用objdump --disassemble-all 跟蹤下去就可以得到程序原入口點(diǎn)。

缺省程序入口點(diǎn)是_start,但是可以在鏈接的時(shí)候更改它。

★ 結(jié)論

Unix病毒盡管不流行,但的確可行。

標(biāo)簽: Unix系統(tǒng)
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
久久久亚洲人| 日韩视频一区在线观看| 日韩一区二区免费电影| 亚洲1区2区3区4区| 国产偷国产偷亚洲高清97cao| 国产精品人妖ts系列视频| 欧美一区二区三区免费看| 日韩一级黄色大片| 国产精品一卡二| 欧美另类高清zo欧美| 老司机精品视频一区二区三区| 老司机午夜精品视频| 亚洲国产日韩精品| 国产日韩欧美一区在线| 亚洲三级小视频| 亚洲激情网址| 亚洲综合小说图片| 午夜在线精品偷拍| 亚洲国产乱码最新视频| 宅男噜噜噜66国产日韩在线观看| 久久丝袜美腿综合| 成人黄色av网站在线| 精品乱码亚洲一区二区不卡| caoporm超碰国产精品| 久久久精品国产免大香伊| 欧美激情日韩| 中文字幕一区二区三区四区 | 国产精品中文欧美| 在线成人免费视频| 国产高清在线精品| 26uuu另类欧美亚洲曰本| 91麻豆精品在线观看| 国产精品国产成人国产三级 | 成人h动漫精品一区二区| 精品国产成人系列| 你懂的国产精品永久在线| 国产精品国模大尺度视频| 伊人久久婷婷| 亚洲一区二区五区| 色婷婷国产精品| 麻豆成人久久精品二区三区小说| 欧美网站一区二区| 国产精品小仙女| 久久网站热最新地址| 国产精品porn| 精品久久久久久亚洲综合网| 欧美aa国产视频| 国产精品传媒在线| 亚洲一区免费| 人人爽香蕉精品| 欧美一区二区三区成人| 色综合天天综合给合国产| 亚洲日韩欧美一区二区在线| 久久国产一区| 国产精品一区二区91| 国产偷国产偷亚洲高清人白洁 | 激情久久久久久久久久久久久久久久| 91精品蜜臀在线一区尤物| 99久久精品免费| 国产精品久久久久久久岛一牛影视| av成人天堂| 奇米精品一区二区三区在线观看一| 91精品久久久久久蜜臀| 色综合婷婷久久| 亚洲午夜一二三区视频| 欧美色图天堂网| 色综合夜色一区| 亚洲激情第一区| 欧美日韩一本到| 91视视频在线观看入口直接观看www | 亚洲欧美久久久久一区二区三区| 日本色综合中文字幕| 日韩一区二区麻豆国产| 狠狠色噜噜狠狠狠狠色吗综合| 亚洲午夜精品久久久久久久久| 91精品国产综合久久国产大片| 欧美日韩一区二区三区在线视频 | 久久久精品综合| 国产亚洲精品bv在线观看| 美女一区二区视频| 欧美精品一区二区三区蜜臀| 99精品国产高清一区二区| 国产一区美女在线| 中文字幕国产一区| 男女精品网站| 成人精品免费视频| 亚洲免费成人av| 91精品在线一区二区| 亚洲精品久久| 国产乱淫av一区二区三区| 日本一区二区三区高清不卡| 亚洲欧美网站| 成人精品一区二区三区四区| 一区二区三区在线视频免费| 91精品国产一区二区三区香蕉| 91久久亚洲| 国产aⅴ综合色| 亚洲午夜久久久久| 精品国产乱码久久久久久老虎| 香蕉免费一区二区三区在线观看| 粉嫩一区二区三区性色av| 一区二区三区欧美视频| 欧美一区二区大片| 日韩视频二区| 粉嫩aⅴ一区二区三区四区五区 | 亚洲精品男同| 国产99久久久国产精品潘金网站| 一区二区三区四区av| 欧美电影免费观看高清完整版在线观看 | 亚洲男女毛片无遮挡| 4438x成人网最大色成网站| 亚洲人久久久| av激情亚洲男人天堂| 日韩成人一级片| 欧美国产日韩在线观看| 欧美日韩一级片网站| 国产一区成人| 91小视频在线免费看| 麻豆一区二区三区| 亚洲欧美日本在线| 91精品国产综合久久精品性色| 日韩亚洲国产精品| 北条麻妃一区二区三区| 免费高清不卡av| 亚洲理论在线观看| 久久久精品免费网站| 制服视频三区第一页精品| 亚洲欧美日韩精品在线| 欧美成人有码| 久久99精品一区二区三区| 一区二区三区国产豹纹内裤在线| 久久丝袜美腿综合| 在线不卡中文字幕播放| 亚洲一区日韩在线| 欧美日韩国产精品一卡| 国产成人免费视频网站高清观看视频| 五月综合激情网| 亚洲欧洲av色图| 久久品道一品道久久精品| 欧美另类z0zxhd电影| 久热re这里精品视频在线6| 黄色工厂这里只有精品| 成人性生交大片免费看视频在线 | 久久人人爽爽爽人久久久| 欧美精品三级日韩久久| 久久久综合香蕉尹人综合网| 亚洲夫妻自拍| 欧美性色综合| 色综合天天视频在线观看| 成人黄色网址在线观看| 精品一区免费av| 亚洲视频中文字幕| 日本一区二区在线不卡| 精品福利一区二区三区| 欧美精品欧美精品系列| 欧美中文字幕一区二区三区亚洲| 亚洲高清视频一区| 国产精品久久7| 97久久人人超碰| 成人av动漫网站| 国产精品99久久久久久有的能看| 男男视频亚洲欧美| 婷婷一区二区三区| 亚洲小少妇裸体bbw| 亚洲精品日日夜夜| 国产精品污网站| 久久久国产精华| 久久久精品天堂| 久久久久久久久久美女| 欧美一区二区三区婷婷月色| 欧美三级电影精品| 色av成人天堂桃色av| 免费久久久一本精品久久区| 亚洲欧美怡红院| 日韩美女视频19| 亚洲精品v日韩精品| 亚洲欧美电影院| 亚洲激情在线播放| 亚洲一区二区三区四区的| 亚洲综合一区二区三区| 亚洲午夜羞羞片| 午夜成人免费电影| 日本欧美在线观看| 精品一区二区三区视频| 久久国产精品区| 精品无码三级在线观看视频| 国产一区视频导航| 国产精品一区二区你懂的| 国产精品一区免费视频| 国产精品一区二区不卡| 成人夜色视频网站在线观看| av资源网一区| 欧美一区1区三区3区公司| 午夜国产欧美理论在线播放| 精品91视频| 另类图片国产| 欧美日韩在线播放三区四区| 日韩一二三区不卡| 成人激情免费视频| 欧美午夜视频|