萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 網路安全 >  >> 病毒防護

Linux 病毒原型工作流程與關鍵技術解析

本文總結 Linux 病毒原型代碼,介紹 ELF 感染器原理與病毒傳播流程,需具備 ELF 格式、C/匯編混合閱讀、病毒基本原理知識。

ELF Infector(ELF 文件感染器)

參考 Silvio Cesare《UNIX ELF PARASITES AND VIRUS》演算法:
1. ELF 頭 p_shoff 增加 PAGE_SIZE。
2. 修補寄生代碼跳轉至原入口。
3. 定位文本段程序頭。
4. 修改 ELF 入口指向新代碼(p_vaddr + p_filesz)。
5. 增加 p_filesz、p_memsz 容納寄生代碼。
6. 後續段 p_offset 增加 PAGE_SIZE。
7. 文本段最後節區 sh_len 增加寄生代碼長度。
8. 後續節區 sh_offset 增加 PAGE_SIZE。
9. 物理插入新代碼並填充至 PAGE_SIZE。

原型使用的 g-elf-infector 依此原理編寫,源碼見附錄。僅用於製作首個帶毒文件,與病毒本體分離。使用需定義三項:返回地址偏移、寄生代碼函數、結尾函數(防編譯器重排序)。

病毒原型工作流程

  1. ELF Infector 感染一個 ELF 文件,產生首個帶毒文件。
  2. 帶毒文件執行時優先跳轉至病毒代碼。
  3. 病毒代碼發作,直接開始傳播。
  4. 遍歷當前目錄,符合條件的 ELF 文件進行感染。
  5. 感染過程類似 Infector,但運行環境不同,實現有較大差別。
  6. 要求文本段有剩餘空間容納病毒碼,否則跳過;已感染文件無剩餘空間,不會二次感染。
  7. 病毒代碼執行完畢,恢復堆棧與寄存器,跳回真正入口,正常運行。

關鍵技術處理

1. ELF 執行流程重定向與代碼插入

定位文本段,將病毒代碼接在尾部,調整段/節虛擬地址,建立 section 關聯防 strip 移除,注意對齊(p_align)。修改 ELF 頭入口地址指向病毒代碼:
org_entry = ehdr->e_entry;
ehdr->e_entry = phdr[txt_index].p_vaddr + phdr[txt_index].p_filesz;

2. 病毒代碼返回真實入口

採用 PUSH + RET 組合:
__asm__ volatile (
"return:\n\t"
"push $0xAABBCCDD\n\t" /* push ret_addr */
"ret\n"
);

其中 0xAABBCCDD 存放真實程序入口,感染時由感染程序填寫。

copyright © 萬盛學電腦網 all rights reserved