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

author:luojiafei

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

e-mail:    [email protected]

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

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
自己动手编译器和链接器pdf是一个非常有挑战性的任务,需要具备一定的编程和计算机原理知识。 首先,编译器是用来将高级语言代码转换成机器可执行的低级语言代码的工具。编编译器的第一步是熟悉目标语言的语法和语义规则,然后设计并实现词法分析器和语法分析器以将输入的源代码转化为语法树。接下来,需要设计并实现语义分析器,包括类型检查和语义错误检测等,在这一步中还需定义中间代码生成规则。最后,根据目标语言的特性,设计并实现代码优化器和代码生成器,将中间代码转化为目标语言的机器代码。 其次,链接器是用来将多个目标文件和库文件合并为一个可执行文件的工具。编链接器的第一步是了解目标文件和库文件的格式,包括ELF、COFF等。然后,将输入的目标文件和库文件解析为可读的数据结构,对各个模块进行地址重定位和符号解析,解决重复定义和未定义符号等问题。接下来,需要进行代码和数据的合并和对齐等操作,生成最终的可执行文件。 在编编译器和链接器的过程中,需要使用一种编程语言,例如C或C++,并利用相关的开发工具和库函数辅助实现。同时,还需要深入理解计算机的体系结构、寄存器分配和内存管理等概念。 总之,自己动手编译器和链接器pdf是一个充满挑战和学习机会的任务,需要掌握相关的编程和计算机原理知识,并有较强的实践能力和问题解决能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值