当前位置:  技术问答>linux和unix

一个Linux病毒的原型分析

    来源: 互联网  发布时间:2016-01-04

    本文导语:  技术天地: 这篇文章的目的主要是对最近写的一个Linux病毒原型代码做一个总结, 同时向对这方面有兴趣的朋友做一个简单的介绍。 阅读这篇文章你需要一些知识,要对ELF有所了解、能够阅读一些嵌入了汇编的C代...

技术天地: 这篇文章的目的主要是对最近写的一个Linux病毒原型代码做一个总结, 同时向对这方面有兴趣的朋友做一个简单的介绍。 阅读这篇文章你需要一些知识,要对ELF有所了解、能够阅读一些嵌入了汇编的C代码、了解病毒的基本工作原理。 

  作者既不是一个virus coder,也不是anti-viruscoder,这篇文章旨通过对一个Linux的病毒原型的工作原理和关键环节的分析和介绍来让揭开病毒的神秘面纱,使您了解病毒的工作机理,也同时对理解Linux的系统编程有所帮助。 

剖析Linux病毒原型的工作过程和关键环节 (1)
一、 介绍 

  写这篇文章的目的主要是对最近写的一个Linux病毒原型代码做一个总结,同时向对这方面有兴趣的朋友做一个简单的介绍。阅读这篇文章你需要一些知识,要对ELF有所了解、能够阅读一些嵌入了汇编的C代码、了解病毒的基本工作原理。 

  二、 ELF Infector (ELF文件感染器) 

  为了制作病毒文件,我们需要一个ELF文件感染器,用于制造第一个带毒文件。对于ELF文件感染技术,在Silvio Cesare的《UNIX ELF PARASITES AND VIRUS》 
一文中已经有了一个非常好的分析、描述,在这方面我还没有发现可以对其进行补充的 
地方,因此在这里我把Silvio Cesare对ELF Infection过程的总结贴出来,以供参考: 

The final algorithm is using this information is. 
* Increase p_shoff by PAGE_SIZE in the ELF header 
* Patch the insertion code (parasite) to jump to the entry point 
(original) 
* Locate the text segment program header 
* Modify the entry point of the ELF header to point to the new 
code (p_vaddr + p_filesz) 
* Increase p_filesz by account for the new code (parasite) 
* Increase p_memsz to account for the new code (parasite) 
* For each phdr who's segment is after the insertion (text segment) 
* increase p_offset by PAGE_SIZE 
* For the last shdr in the text segment 
* increase sh_len by the parasite length 
* For each shdr who's section resides after the insertion 
* Increase sh_offset by PAGE_SIZE 
* Physically insert the new code (parasite) and pad to PAGE_SIZE, into 
the file - text segment p_offset + p_filesz (original) 

在Linux病毒原型中所使用的gei - ELF Infector即是根据这个原理写的。在 
附录中你可以看到这个感染工具的源代码: g-elf-infector.c 

g-elf-infector与病毒是独立开的,其只在制作第一个病毒文件时被使用。我简单介 
绍一下它的使用方法,g-elf-infector.c可以被用于任何希望--将二进制代码插入到 
指定文件的文本段,并在目标文件执行时首先被执行--的用途上。g-elf-infector.c 
的接口很简单,你只需要提供以下三个定义: 

* 存放你的二进制代码返回地址的地址,这里需要的是这个地址与代码起始 
地址的偏移,用于返回到目标程序的正常入口 
#define PARACODE_RETADDR_ADDR_OFFSET 1232 

* 要插入的二进制代码(由于用C编写,所以这里需要以一个函数的方式提供) 
void parasite_code(void); 

* 二进制代码的结束(为了易用,这里用一个结尾函数来进行代码长度计算) 
void parasite_code_end(void); 

parasite_code_end应该是parasite_code函数后的第一个函数定义,通常应该如下表示 
void parasite_code(void) 

... 
... 
... 

void parasite_code_end(void) {} 

在这里存在一个问题,就是编译有可能在编译时将parasite_code_end放在parasite_code 
地址的前面,这样会导致计算代码长度时失败,为了避免这个问题,你可以这样做 
void parasite_code(void) 

... 
... 
... 

void parasite_code_end(void) {parasite_code();} 

有了这三个定义,g-elf-infector就能正确编译,编译后即可用来ELF文件感染

剖析Linux病毒原型的工作过程和关键环节 (2) 

三、 病毒原型的工作过程

1 首先通过ELF Infector将病毒代码感染到一个ELF文件,这样就创造了第一 
个带毒文件,后续的传播就由它来完成。 

2 当带毒文件被执行时,会首先跳到病毒代码开始执行。 

3 病毒代码开始发作,在这个原型里,病毒会直接开始传播。 

4 病毒遍历当前目录下的每一个文件,如果是符合条件的ELF文件就开始感染。 

5 病毒的感染过程和ELF Infector的过程类似,但由于工作环境的不同,代码的实现也是有较大区别的。 

6 目前传染对ELF文件的基本要求是文本段要有剩余空间能够容纳病毒代码,如果无法满足,病毒会忽略此ELF。对于被感染过一次的ELF文件,文本段将不会有剩余的空间,因此二次感染是不会发生的。 

7 病毒代码执行过后,会恢复堆栈和所有寄存器(这很重要),然后跳回到真正的可执行文件入口,开始正常的运行过程。 

上面对病毒原型的工作过程的介绍也许显得千篇一律了,和我们早就熟知的关于病毒的一些介绍没有什么区别?是的,的确是这样,原理都是类似的,关键是要看实现。下面我们就将通过对一些技术问题的分析来了解具体的实现思路。 


|
偶只为了接分!!!
飘过。。。。。。

|
好文章

    
 
 

您可能感兴趣的文章:

  • Linux下C语言strstr()查找子字符串位置函数详细介绍(strstr原型、实现及用法)
  • vim写程序如何自动提示标准C库函数原型及linux系统调用的原型?
  • 初学:请教下linux编程时怎样方便查找函数原型和结构体的
  • 病毒:我的红旗linux安装就有病毒,还IEM版呢。怎么办?请教大侠.
  • Linux下的病毒
  • linux会感染病毒吗?有哪种杀毒软件?
  • 在linux上安装wine,会不会使linux系统感染windows病毒?
  • 有没有linux操作系统下的病毒防火墙?
  • 请问:当linux遇上病毒时,该如何处理?
  • 有人说linux中了引导区病毒低格硬盘都解决不了
  • Linux下有病毒吗?
  • 高分求linux下的防杀病毒解决方案。
  • 让Linux系统免疫病毒和黑客攻击
  • Linux/Unix下似乎很少见到甚至听说病毒,谁了解,近来谈谈好吗? --阿菜
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • linux下free命令显示的内存使用情况分析
  • 如何分析linux宕机原因(或者说如何通过查日志分析宕机原因)
  • Linux下时钟同步问题:Clock skew detected原因分析及解决方法
  • 哪本linux源码分析的书里详细讲解了Linux的核心启动代码
  • Linux源代码哪本书分析的好一点??
  • Linux内核性能分析 OProfile
  • 请问哪一本LINUX源代码分析的书比较经典?
  • 关于Linux中的QoS部分源码分析
  • 请介绍几本分析Linux源代码的好书,谢谢!
  • 200分求教有关linux核心的dos攻击算法分析以及源代码的情景分析,研究用,急!!!
  • 有同志读过《linux原代码情景分析》吗?
  • help!谁能帮我搞一份linux的分析报告。
  • flyingcrean,来讲一下Linux网络分析。
  • 没头绪:linux内核分析
  • 哪里有LINUX源代码分析的文章吗?万分紧急!
  • Linux 磁盘分析工具 Disk Usage Analyser
  • Linux源代码的分析!!!!
  • linux死机分析方法咨询
  • 可有人对linux的dhcp的源码分析过么?望各位指教,
  • 哪里能够下载《Linux 内核源代码情景分析》,100分相送
  • 求《Linux内核代码情景分析》电子版
  • linux c/c++ IP字符串转换成可比较大小的数字
  • 在win分区上安装linux和独立分区安装linux有什么区别?可以同时安装吗?(两个linux系统)
  • linux哪个版本好?linux操作系统版本详细介绍及选择方案推荐
  • 在虚拟机上安装的linux上,能像真的linux系统一样开发linux程序么?
  • secureCRT下Linux终端汉字乱码解决方法
  • 我重装window后,把linux的引导区覆盖了,进不了linux怎么办?急啊,望热心的人帮助 (现在有linux的盘)
  • Linux c字符串中不可打印字符转换成16进制
  • 安装vmware软件,不用再安装linux系统,就可以模拟linux系统了,然后可以在其上学习一下LINUX下的基本操作 了?
  • Linux常用命令介绍:更改所属用户群组或档案属性
  • 红旗Linux主机可以通过127.0.0.1访问,但如何是连网的Win2000机器通过Linux的IP去访问Linux


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3