自己动手写病毒—ELF文件病毒

本文介绍了作者对ELF文件病毒的研究,包括ELF文件格式的详细解析,如文件类型、数据表示、链接视图和执行视图。通过分析一个简单的测试程序,展示了ELF文件头、节头和程序头的结构及其重要字段。文章还提及了病毒原理,指出在可执行文件未填满最后一个页面时,病毒可以利用剩余空间插入自身代码,并修改入口地址以先执行病毒代码。最后,作者提到了使用内联汇编实现系统调用的方法。
摘要由CSDN通过智能技术生成

author:luojiafei

blog:  http://blog.csdn.net/luojiafei

e-mail:    1196722167@qq.com

data:  2012/1/5                       


                         自己动手写病毒—ELF文件病毒

    对病毒的兴趣由来已久,所以在空闲的时间来很多时候都是逛逛技术网站,在不经意间发现了国外有一篇关于ELF文件病毒的文章,藉着之前为一个课程任务而编写操作系统的期间而积累下来的经验,便花了几天时间去研究了一下ELF文件病毒 并且写下了一个名为helloworld(这个名字够俗啊!),其实就是感染每一个ELF可执行文件,当用户运行被感染的文件时,就会运行一个我预先用qt写好的标题为”helloworld”的对话框,可见这是一个相对友好的病毒,仅仅是为学习而写出来的。下面便是正题了,通过这篇文章我们能学到:

    1.elf文件格式

    2.自己编写Linux的系统调用,加深对linux内核的认识。

    3.病毒原理和逆向工程分析,我们会用到EDB(即linux下的ollydgb)来动态调试病毒.

 

1.ELF文件格式

    a.ELF文件类型

       ELF文件主要分为三种类型:

ñ 可重定位文件(Relocatable File)包含适合于与其他目标文件链接来创建可执行文件或者共享目标文件的代码和数据。

ñ 可执行文件(Executable File) 包含适合于执行的一个程序,此文件规定了exec() 如何创建一个程序的进程映像。

ñ 共享目标文件(Shared Object File) 包含可在两种上下文中链接的代码和数据。首先链接编辑器可以将它和其它可重定位文件和共享目标文件一起处理,生成另外一个目标文件。其次,动态链接器(Dynamic Linker)可能将它与某个可执行文件以及其它共享目标一起组合,创建进程映像。

 

    b.ELF文件的数据表示

        ELF文件头结构及相关常数被定义在”/usr/include/elf.h”里。ELF目标文件中的所有数据结构都     遵从自然大小和对齐规则。如果 必要,数据结构可以包含显式的补齐,例如为了确保4字节对象按       4字节边界对齐。数据对齐同样适用于文件内部。下面为ELF中常用的数据格式:

名称

大小

对齐

描述

Elf32_Addr

4

4

无符号程序地址

Elf32_Half

2

2

无符号短整型

Elf32_Off

4

4

无符号偏移地址

Elf32_Sword

4

4

有符号整型

Elf32_Word

4

4

有符号整型

        ELF除了32位版还有64位版本,数据类型的名称和大小也相应地变化(Elf64_Addr…)。

 

    c.ELF的链接视图和执行视图

        目标文件既要参与程序链接又要参与程序执行。出于方便性和效率考虑,目标文件格式提供了两种      并行视图,分别反映了这些活动的不同需求。

        这两个视图并不冲突,在执行视图中的”Segment”是由链接视图中的多个权限和性质相仿         的”Section”组成的。

        下面我们便来一边看例子一边学习。例如一个test程序,

            #include<stdio.h>

            intmain()

            {

                printf("this is test\n");

                return 0;

            }

        我们用readelf -e test查看会出现4个部分,分别为ELF Header, Section Headers,    ProgramHeaders 和 Section to Segment mapping.

    (1)ELF Header:

在usr/include/elf.h中我们可以看到关于ELF Header的结构体Elf32_Ehdr

 

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

 

#define EI_N

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值