欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

如何使用汇编语言编写一个病毒

来源:本站整理 作者:维一零 时间:2017-01-05 TAG: 我要投稿

病毒编写的艺术似乎丢失了似的。我们不要将恶意软件,特洛伊木马,蠕虫等等混淆成病毒。你可以使用任何友好的脚本语言去编写那些垃圾程序并且拍着自己的后背嘚瑟一下,但这并不能让你成为一个病毒作者。编写计算机病毒并不一定就是你所看到的关于破坏,还得要看你的病毒可以传播多广泛同时避免被检测,也得要比杀毒软件公司更为聪明。这事关创新和创造力。一个计算机病毒在很多方面就像一个纸飞机。你需要使用聪明和具有创造性的方式去折飞机,并试图使它在不可避免的着陆前尽可能长久的飞翔。在万维网之前,传播病毒是一种挑战。运气好的话,它会感染除了你自己之外的任何电脑。如果运气更好点,你的病毒将获得像鲸鱼病毒或米开朗基罗病毒一样的名声。
如果你想被视为一个“病毒作者”,你必须获得这类称号。在地下黑客组织里,在黑客/破解者/入侵者之中,我最尊重的是病毒作者。因为不是任何人都能做到,那是真的能够表现出他比别人拥有更深的、关于系统和软件方面的知识。你不能指望简单地遵循常规就能成为一个病毒作者。编写一个真正的病毒需要比一般“黑客”拥有更多的技能。多年以来,我没有成功的写出一个可以运行良好的二进制文件感染病毒。一直就是报错、报错、报错。这是一件令人沮丧的事情。因此我坚持编写蠕虫、木马炸弹和ANSI炸弹。我坚持编写BBS的漏洞利用,也去逆向视频游戏软件以破解其版权保护。每当我以为我的汇编技术终于足够,试图编写出一个病毒的时候,失败再次地落到我的脸上。我花了好几年的时间才能够编写出一个真正可运行的病毒。这就是为什么我着迷于病毒并且想找出一些真正的病毒作者。在瑞安“elfmaster”奥尼尔传奇的书籍《学习Linux二进制程序分析》中,他指出:
这是一个超越常规编程约定的伟大挑战工程,它要求开发人员跳出传统模式,去操纵代码、数据和环境使其以某种方式表现,在与AV杀毒软件开发者的交流时,令我吃惊的是,他们旁边没有人有任何真正关于如何逆向一个病毒的想法,更不用说去设计什么真正的启发式来识别它们(除了签名)。事实上,病毒编写是非常困难的,并且需要标准比较严格的技能。
使用汇编语言编写一个病毒
病毒是一种艺术。汇编和C(不使用代码库)将是你的画笔。今天,我将帮助你经历一些我面临过的挑战。让我们开始吧,看看你是否拥有成为一个艺术家的潜能!
与我之前的“源代码感染”病毒教程不同,这是更先进且具有挑战性的经历/运用(即使对经验丰富的开发人员)。但是,我鼓励你继续阅读并尽你所能地汲取。
让我们先描述一下我认为的、一个真正病毒应该有的特点:
——病毒会感染二进制可执行文件
——病毒代码必须是独立的,它独立于其他文件、代码库、程序等
——被感染的宿主文件能够继续执行并且传播病毒
——病毒在不损害宿主文件的情况下表现得像一只寄生虫。受感染的宿主应继续像它被感染之前一样执行
因为我们要感染二进制可执行文件,所以简要列表介绍几个不同的可执行文件类型。
ELF-(可执行和链接的文件格式)Unix和类Unix系统标准的的二进制文件格式。这也被许多手机,游戏机(Playstation,任天堂)等等使用。
Mach-O-(Mach对象)被NeXTSTEP,macOS,iOS等等,所使用的二进制可执行文件格式,你其实在用它,因为所有的苹果手机都是这。
PE-(便携式可执行程序)用于32位和64位微软操作系统
MZ(DOS)- DOS支持的可执行文件格式…所有的微软32位及以下操作系统使用
COM(DOS)- DOS支持的可执行文件格式…所有的微系32位及以下操作系统使用
微软的病毒教程有许多,但是ELF病毒似乎更具挑战性并且教程稀缺,所以我将主要关注的是32位ELF程序的感染。
我将假设读者至少对病毒复制的方式有一个常规的理解。如果没有,我推荐你阅读我以前的博客文章主题:
https://cranklin.wordpress.com/2011/04/19/how-to-write-a-stupid-simple-computer-virus-in-3-lines-of-code/
https://cranklin.wordpress.com/2011/11/29/how-to-create-a-computer-virus/
https://cranklin.wordpress.com/2012/05/10/how-to-make-a-simple-computer-virus-with-python/
第一步是找到要感染的文件。DOS指令集可以方便寻找文件。AH:4Eh INT 21指令能够基于给定的文件描述找到第一个匹配的文件,而AH:4Fh INT 21指令可以找到下一个匹配的文件。不幸的是,对于我们却不会这么简单。使用Linux汇编来检索文件列表,这相关的文档并不是很多。少数的几个回答中我们发现它依赖于POSIX系统的readdir()函数。但是我们是黑客,对么?让我们做黑客应该做的事情来实现它。你应该熟悉的工具是strace。通过运行strace ls,我们看到了当运行ls命令时,跟踪到的系统调用和信号。

你感兴趣的调用是getdents。所以下一步是在http://syscalls.kernelgrok.com/查找”getdents”。这将给我们一个小小的提示,关于我们应该怎样使用它以及我们如何得到一个目录列表。下面就是我所发现的东西:
      mov eax, 5      ; sys_open
    mov ebx, folder ; 目录名称
    mov ecx, 0
    mov edx, 0
    int 80h
    cmp eax, 0      ; 检测在eax中的fd是否 > 0 (ok)
    jbe error       ; 不能打开文件,  以错误状态退出

[1] [2] [3] [4] [5] [6] [7]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载