Unix/ELF文件格式及病毒分析
作者:Silvio Cesare <silvio@big.net.au>
整理:小四 <scz@isbase.com>
出处:http://www.isbase.com
主页:http://www.isbase.com
日期:2000-6-8
★ 介绍
本文介绍了Unix病毒机制、具体实现以及ELF文件格式。简述了Unix病毒检测和反检
测技术,提供了Linux/i386架构下的一些例子。需要一些初步的Unix编程经验,能够
理解Linux/i386下汇编语言,如果理解ELF本身更好。
本文没有任何实际意义上的病毒编程技术,仅仅是把病毒原理应用到Unix环境下。这
里也不打算从头介绍ELF规范,感兴趣的读者请自行阅读ELF规范。
★ 感染 ELF 格式文件
进程映象包含"文本段"和"数据段",文本段的内存保护属性是r-x,因此一般自修改
代码不能用于文本段。数据段的内存保护属性是rw-。
段并不要求是页尺寸的整数倍,这里用到了填充。
关键字:
[...] 一个完整的页
M 已经使用了的内存
P 填充
页号
#1 [PPPPMMMMMMMMMMMM] /
#2 [MMMMMMMMMMMMMMMM] |-- 一个段
#3 [MMMMMMMMMMMMPPPP] /
段并没有限制一定使用多个页,因此单页的段是允许的。
页号
#1 [PPPPMMMMMMMMPPPP] <-- 一个段
典型的,数据段不需要从页边界开始,而文本段要求起始页边界对齐,一个进程映象
的内存布局可能如下:
关键字:
[...] 一个完整的页
T 文本段内容
D 数据段内容
P 填充
页号
#1 [TTTTTTTTTTTTTTTT] <-- 文本段内容
#2 [TTTTTTTTTTTTTTTT] <-- 文本段内容
#3 [TTTTTTTTTTTTPPPP] <-- 文本段内容(部分)
#4 [PPPPDDDDDDDDDDDD] <-- 数据段内容(部分)
#5 [DDDDDDDDDDDDDDDD] <-- 数据段内容
#6 [DDDDDDDDDDDDPPPP] <-- 数据段内容(部分)
页1、2、3组成了文本段
页4、5、6组成了数据段
从现在开始,为简便起见,段描述图表用单页,如下:
页号
#1 [TTTTTTTTTTTTPPPP] <-- 文本段
#2 [PPPPDDDDDDDDPPPP] <-- 数据段
在i386下,堆栈段总是在数据段被给予足够空间之后才定位的,一般堆栈位于内存高
端,它是向低端增长的。
在ELF文件中,可装载段都是物理映象:
ELF Header
.