(二)文件型病毒

文件型病毒主要是感染可执行文件(PE文件)的病毒,如EXE,COM。病毒对宿主文件进行修改,把自身代码添加到宿主文件上。执行宿主程序时,将会先执行病毒程序再执行宿主程序

1.感染COM文件:

对于COM文件,系统加载时在经过一系列处理之后将全部文件读入内存,并把控制权交给该文件的第一条指令。如果该指令恰为病毒指令则病毒就会获得控制权。COM后缀带毒文件有两种结构:

? 病毒主体在原文件之后。病毒通过修改原文件头代之以一段程序(或简单

地用一条跳转指令)指向后面病毒体,以后再恢复该处原指令。 ? 病毒整体在原文件之前。加载时病毒体直接获得控制权,不破坏原程序任

何部分。

2.感染EXE文件:

EXE后缀文件与COM后缀文件不同,有一特殊的“文件头”结构,其中加载了文件重定位信息等,而非可执行指令。

系统加载EXE后缀文件时根据文件头信息定位文件并设置入口处的堆栈指针和代码指针等。病毒在传染EXE后缀文件时一般将文件头的代码指针使之指向病毒入口,当系统加载时病毒首先获得控制权。

病毒要把自身复制到EXE文件中,需要做的修改主要有: ? 写入一个新节(病毒的程序体)

? 在节表中新加一个节头

? 修改PE文件头的文件表头中的相应字段(如NumberOfSections) ? 修改程序入口点地址

其中修改程序入口点地址是十分关键的,它保证系统运行宿主文件时先执行病毒程序。

(三)python文件

python的源代码py文件在运行时都会被先编译成字节码,并把编译的结果保存到PyCodeObject中,pyc文件即是把PyCodeObject从内存中以marshal格式保存到文件后的结果。

Python中定义的PyCodeObject的结构

typedef struct {

PyObject_HEAD

int co_argcount; /* #arguments, except *args */ int co_nlocals; /* #local variables */

int co_stacksize; /* #entries needed for evaluation stack */ int co_flags; /* CO_..., see below */

PyObject *co_code; /* instruction opcodes */ PyObject *co_consts; /* list (constants used) */

PyObject *co_names; /* list of strings (names used) */

PyObject *co_varnames; /* tuple of strings (local variable names) */ PyObject *co_freevars; /* tuple of strings (free variable names) */ PyObject *co_cellvars; /* tuple of strings (cell variable names) */ /* The rest doesn't count for hash/cmp */

PyObject *co_filename; /* string (where it was loaded from) */ PyObject *co_name; /* string (name, for reference) */ int co_firstlineno; /* first source line number */

PyObject *co_lnotab; /* string (encoding addrlineno mapping) See Objects/lnotab_notes.txt for details. */

void *co_zombieframe; /* for optimization only (see frameobject.c) */ PyObject *co_weakreflist; /* to support weakrefs to code objects */ } PyCodeObject;

其中一些字段的含义 argcount:参数的个数

nlocals:局部变量的个数(包含参数在内) stacksize:堆栈的大小

flags:用来表示参数中是否有*args或者 **kwargs code:字节码

names:全局变量,函数,类,类的方法的名称

varnames:局部变量的名称(包含参数) consts:一个常量表

pyc文件就是一个嵌套的PyCodeObject结构的组合。对于每个函数或者类的方法,都会生成一个对应的PyCodeObject结构。

所有的PyCodeObject都是通过调用以下的函数得以运行的: PyObject * PyEval_EvalFrameEx(PyFrameObject *f, int throwflag)

它的作用是执行中间码,Python的代码都是通过调用这个函数来运行的。

通过上面的分析,我决定利用python代码执行的特性,用python写一个Linux下的“文件型病毒”。

四、实验所需软硬件

操作系统:ubuntu16.04 LTS 虚拟机

软件:Python2.7.11+

五、实验步骤

(一)程序框架

我决定用python写文件型病毒,是想既能体现文件型病毒的特点同时又不用到底层去计算字节数。程序包括以下几个模块:

1.传播感染模块

查找符号条件的宿主文件,然后将自身添加到宿主文件中。

为了隐蔽自身,并不是把病毒自身全部拷贝到被感染文件中去,那样的话用户很容易发现。我的做法是在一个隐蔽的位置创建病毒的一个备份,这样,当把病毒写入宿主文件时,并不是显式地写入,而只需要通过import语句引用即可达到同样的效果。

2.备份模块

备份文件我选择放在“/home/当前用户”这个目录下。因为在Linux的其他根目录下,如/usr、/bin,创建一个文件需要root权限,而用户一般情况下并不会在root权限下运行,这就涉及到提权问题。目前还没想到解决办法,所以暂时选择了“/home/当前用户”这个目录。

3.触发和破坏模块

日期触发。在每个星期的星期四这一天,用户执行被感染的.py文件,破坏模块就会执行。

系统重启。攻击模块理论上说可以任意定制,但要注意的是,如果引用了python的一些特殊模块,受害者主机系统可能并没有安装,程序执行时就会出错。

(二)具体实现

备份模块

感染模块

触发条件判断和破坏功能

python病毒攻击代码_用python写的简单病毒(无害) -相关推荐

  1. python 运行程序代码_一些python程序

    <从问题到程序:用Python学编程和计算>--1.2 Python语言简介 本节书摘来自华章计算机<从问题到程序:用Python学编程和计算>一书中的第1章,第1.2节,作者 ...

  2. python好玩的代码_一行 Python 能实现什么丧心病狂的功能?

    能够把自身代码打印出来的程序,叫做Quine.下面是python的一行quine: ​有人说有分号不算一行,无分号版: 其实,如果你用程序语言的名字+quine作为关键字去搜索,你能找到各种语言实现的 ...

  3. python大神代码_求python大神写一个windows可运行的代码,学习学习。

    [Python] 纯文本查看 复制代码# -*- coding: utf-8 -*- """ Created on Fri Dec 18 22:53:40 2020 @a ...

  4. python数码时钟代码_用python写一个程序,以电子时钟格式打印时间,每隔一秒刷新一次...

    1. 写一个程序,以电子时钟格式打印时间: 时间格式为: HH:MM:SS 时间每隔一秒刷新一次 代码如下 import time def showtime(): s = time.localtime ...

  5. python迷宫万花筒代码_用Python3写一个走迷宫的小程序(图形化:matplotlib,dfs,prim)...

    先看一下动态效果图(慢放): 首先生成迷宫: 主要用了两个算法:Prim和dfs 总结:Prim生成的比较像真正的迷宫,所以默认用了Prim生成迷宫 先输入n,m,会生成一个迷宫(prim生成),然后 ...

  6. python抢券代码_用Python写一个京东抢券脚本

    #coding:utf-8 #import scrapy from selenium import webdriver import time import datetime class JDQUAN ...

  7. python做游戏代码_利用Python基础代码语句,实现2G时代文字小游戏,世界如此简单!...

    相信许多80,90后都玩过2G时代的文字小游戏,它是来自QQ家园的专属回忆.偷菜,美味小镇,大乐斗,还有精武堂等等,虽然只是文字的输出,但是留给我们这一代的人的印象却是最深刻的.曾经流量很少,响应很快 ...

  8. python计算面积代码_利用Python求阴影部分的面积实例代码

    利用Python求阴影部分的面积实例代码 来源:中文源码网    浏览: 次    日期:2019年11月5日 [下载文档:  利用Python求阴影部分的面积实例代码.txt ] (友情提示:右键点 ...

  9. python 背景音乐程序代码_用Python演奏音乐

    背景 笔者什么乐器也不会,乐理知识也只有中小学音乐课学的一点点.不过借助Python,调用编曲家常用的MIDI程序库,也能弹奏出一些简单的音乐,以下是笔者的一些心得. 准备 安装mingus 首先是安 ...

  10. python母亲节快乐代码_用 Python 送上特殊的母亲节祝福

    今天是母亲节,做儿女的自然要为母亲送上节日的祝福,如果自己在母亲身边的话,可以直接说几句祝福的话以及送一些小礼物什么的,要是不在母亲身边的话,可以打个电话问候一下. 当然了,作为一个程序员,除了上面的 ...

最新文章

  1. 报名 | 2019全球AI文创大赛开启项目征集!
  2. 计算机视觉实习岗面试准备(一.基础知识)
  3. vue.js的一些事件绑定和表单数据双向绑定
  4. Redis的Zset操作
  5. Java 字符数字得到整数
  6. 魔法值是什么?(为什么在阿里巴巴开发手册中提到不允许任何魔法值直接出现在代码中)
  7. 使用CodeDom生成程序集
  8. 前端学习(2709):重读vue电商网站29之左侧菜单栏
  9. 【Excel】使用VLOOKUP+IF实现多列条件匹配查询
  10. 大楼通信综合布线系统_什么是网络综合布线系统组成?网络综合布线系统如何选择线缆?...
  11. 谷歌浏览器chrome设置特定网页使用Https(ssl)访问
  12. 问题解决:AttributeError: 'module' object has no attribute '_rebuild_tensor_v2'
  13. CISSP怎么复习备考
  14. Java代码调用第三方接口发送短信
  15. 用python演绎神奇的生命游戏,在游戏中学习numpy和matplotlib动画
  16. 如何用计算机测量图片景深,景深(摄影测量与遥感学术语 .)_百度百科
  17. 汽车租赁管理系统的设计与实现(JSP+SqlServer在线租车网站)
  18. h5微信f分享链接给对方获取对方手机号_免费微信电子贺卡制作|微请柬
  19. RC电路的频率响应、选频网络特性测试的分析与仿真
  20. Apple设备型号名称映射表

热门文章

  1. C语言视频教程-谭浩强版-小甲鱼主讲—P21
  2. [算法]PRML学习笔记1.2.3贝叶斯概率论
  3. E-Prime 2.0 用了一段时间出现警告信息无法编辑实验程序
  4. GitHub使用教程-官网指南
  5. mysql 中文 转 拼音_MySQL中文转换成拼音的函数
  6. 多商户酒店预订小程序PMS管理系统成品源码
  7. 工程数学线性代数 同济大学版 第六版 课后习题答案 高等数学 大学数学 线性代数 课后题答案与解析 考试复习提纲
  8. 窃取百度搜索结果曝光,今日头条一直穿着“皇帝的新装”?
  9. ecshop源码分析-ecshop二次开发
  10. win10音量图标没有了