 Encryption: practice
 ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ>
                                                              Blade Runner

 This will be a fix section in 29A in which we'll see many of the weirdest
 decryption routines, and the way to use them so as to decrypt its owners.

 In this first issue i'll center on easy viruses with no antidebugging, so
 that people who've just started may understand everything easily. In fur-
 ther issues i'll include  more difficult  viruses, and then this will get
 pretty interesting ;-)


     ²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²
     ²²  1.-VIRUS:ABR-1171.COM infected by PS-MPC.c virus       ²²±±
     ²²  2.-VIRUS:AC-255.COM infected by Arcv.Made.225 virus    ²²±±
     ²²  3.-VIRUS:AC-330.COM infected by Arcv.330 virus         ²²±±
     ²²  4.-VIRUS:AC-839.COM infected by Arcv.Friends virus     ²²±±
     ²²  5.-VIRUS:AC-916.COM infected by Arcv.Joanna {1} virus  ²²±±
     ²²  6.-VIRUS:ANTIMIT.COM infected by Anti-Mit virus        ²²±±
     ²²  7.-VIRUS:ARARA.COM infected by Arara virus             ²²±±
     ²²  8.-VIRUS:ATOMANT.COM the ATOMANT.UNK1 virus or variant ²²±±
     ²²  9.-VIRUS:AUS-369B.COM Found the AUSSIE.PARASITE.369    ²²±±
     ²² 10.-VIRUS:BETA0575.COM infected by Beta_Boys virus      ²²±±
     ²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²±±
       ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±


 ²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²
 ³³³³³    1  VIRUS:ABR-1171.COM infected by PS-MPC.c virus       ³³³³³
 ²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²

 ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 c  No checksum / recovery information (Anti-Vir.Dat) available.
 F  Suspicious file access.  Might be able to infect a file.
 S  Contains a routine to search for executable (.COM or .EXE) files.
 #  Found a code decryption routine or debugger trap.  This is common
    for viruses but also for some copy-protected software.
 O  Found code that can be used to overwrite/move a program in memory.
 B  Back to entry point.  Contains code to re-start the program after
    modifications at the entry-point are made.  Very usual for viruses.
 T  Incorrect timestamp.  Some viruses use this to mark infected files.
 ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

 Let's disassemble  the virus; i personally use DOS's debug for this kinda
 jobs, but use whatever debugger you like.

 -u100
 14CF:0100 E99004        JMP     0593     ; Jumpt to the address 593h
 14CF:0103 3F            AAS              ; The rest of the code, as you
 14CF:0104 95            XCHG    BP,AX    ; can see, is encrypted and has
 14CF:0105 D7            XLAT             ; no sense at all %-)
 14CF:0106 29A6C13F      SUB     [BP+3FC1],SP
 14CF:010A 8FD7          POP     DI
 14CF:010C 29A2C13F      SUB     [BP+SI+3FC1],SP
 14CF:0110 16            PUSH    SS
 14CF:0111 D7            XLAT
 14CF:0112 7F6E          JG      0182

 Now we go to address 593h and find rest of the decrypted code:

 -u593
 14CF:0593 BE0001     MOV     SI,0100  ; 100h address of actual jmp 593h
 14CF:0596 56         PUSH    SI       ; Save SI
 14CF:0597 B94A02     MOV     CX,024A  ; Number of bytes to decrypt
 14CF:059A C70429D8   MOV     WORD PTR [SI],D829  ; d829 at 100h
 14CF:059E C64402C1   MOV     BYTE PTR [SI+02],C1 ; c1h at 102h
 14CF:05A2 8134C1D7   XOR     WORD PTR [SI],D7C1  ; d7c1h at SI. If we look
                                                  ; at 100h we'll find a
                                                  ; call c212h

 If we now  look at  the header being  decrpyted, we  find that at address
 100h, instead of a jmp 593h there's this instruction: call c212h.

 -u100
 14CF:0100 E80FC1        CALL    C212  ; 100h address right now
 14CF:0103 3F            AAS

 We continue decrpyting...

 14CF:05A6 46         INC     SI   ; Increase SI, we get 101h
 14CF:05A7 46         INC     SI   ; Increase SI, we get 102h
 14CF:05A8 E2F8       LOOP    05A2 ; We decrpyt 24ah bytes which in CX
 14CF:05AA 31F6       XOR     SI,SI; Get a 0 at SI
 14CF:05AC 31C9       XOR     CX,CX; Get a 0 at CX
 14CF:05AE C3         RET
 14CF:05AF 0000       ADD     [BX+SI],AL

 And we finally have the decrypted virus and look into it; this decryption
 method is  not difficult; it's just  tracing the code as we have no anti-
 debugging catch.

 The disassembled  code starting at 100h looks  like this after decrypted;
 look at the original 100h and this one to see that the virus is ready for
 execution.

 -u100
 14CF:0100 E80F00        CALL    0112
 14CF:0103 E85400        CALL    015A
 14CF:0106 E87100        CALL    017A
 14CF:0109 E84E00        CALL    015A
 14CF:010C E87500        CALL    0184
 14CF:010F E8D700        CALL    01E9
 14CF:0112 BEB904        MOV     SI,04B9
 14CF:0115 8B1C          MOV     BX,[SI]
 14CF:0117 0BDB          OR      BX,BX
 14CF:0119 743E          JZ      0159
 14CF:011B B8DD34        MOV     AX,34DD
 14CF:011E BA1200        MOV     DX,0012


 ²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²
 ³³³³³    2  VIRUS: AC-255.COM infected by Arcv.Made.225 virus   ³³³³³
 ²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²

 ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 c  No checksum / recovery information (Anti-Vir.Dat) available.
 #  Found a code decryption routine or debugger trap.  This is common
    for viruses but also for some copy-protected software.
 ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

 -u100
 14CF:0100 E90500        JMP     0108       ; Let's jump to 108h
 14CF:0103 CD20          INT     20
 14CF:0105 90            NOP
 14CF:0106 0909          OR      [BX+DI],CX
 14CF:0108 E80000        CALL    010B       ; 10bh -> next instruction

 -u
 14CF:0118 53            PUSH    BX           ; We save BX
 14CF:0119 8D9C4801      LEA     BX,[SI+0148] ; At BX, data at SI+148h
 14CF:011D 8B941601      MOV     DX,[SI+0116] ; Same to DX
 14CF:0121 B9BC00        MOV     CX,00BC      ; Number of bytes to decrypt
 14CF:0124 8B07          MOV     AX,[BX]
 14CF:0126 33C2          XOR     AX,DX        ; Calculates AX respect of DX
 14CF:0128 86E0          XCHG    AH,AL        ; XCHanGe AL with AH
 14CF:012A 33C2          XOR     AX,DX        ; Calculates AX respect of DX
 14CF:012C 86E0          XCHG    AH,AL        ; XCHanGe AL with AH
 14CF:012E 8907          MOV     [BX],AX      ; We save AX at BX
 14CF:0130 83C302        ADD     BX,+02       ; And add 2 to it
 14CF:0133 E2EF          LOOP    0124         ; Decrypting...
 14CF:0135 5B            POP     BX
 14CF:0136 C3            RET
 14CF:0137 E8DEFF        CALL    0118

 Text that appears after decrypting virus at 1e0h:

 14CF:01E0 CD 21 B4 3E CD 21 FF E5-B4 3F CD 21 C3 4D 61 64 .!.>.!...?.!.Mad
 14CF:01F0 65 20 69 6E 20 45 6E 67-6C 61 6E 64 00 00 2A 2E e in England..*.


 ²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²
 ³³³³³    3   VIRUS:AC-330.COM infected by Arcv.330 virus        ³³³³³
 ²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²

 ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 c  No checksum / recovery information (Anti-Vir.Dat) available.
 F  Suspicious file access.  Might be able to infect a file.
 S  Contains a routine to search for executable (.COM or .EXE) files.
 #  Found a code decryption routine or debugger trap.  This is common
    for viruses but also for some copy-protected software.
 E  Flexible Entry-point.  The code seems to be designed to be linked
    on any location within an executable file.  Common for viruses.
 J  Suspicious jump construct.  Entry point via chained or indirect
    jumps.  This is unusual for normal software but common for viruses.
 B  Back to entry point.  Contains code to re-start the program after
    modifications at the entry-point are made.  Very usual for viruses.
 ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

 14CF:0100 E90200        JMP     0105 ; Jump to 105h

 -u105
 14CF:0105 E81301        CALL    021B ; Call to address 21bh
 14CF:0108 E57B          IN      AX,7B; Give a look to this address (108h)
 14CF:010A 9C            PUSHF

 -u21b
 14CF:021B E80000        CALL    021E    ; Trace the call
 14CF:021E B91301        MOV     CX,0113 ; Length = 113h bytes
 14CF:0221 5E            POP     SI      ; Pop the delta offset into SI
 14CF:0222 81EE2102      SUB     SI,0221 ; SUBstract 221h from SI
 14CF:0226 8DBC0B01      LEA     DI,[SI+010B]; We read address SI+10bh
 14CF:022A 803551        XOR     BYTE PTR [DI],51 ; Calculate calue at
 14CF:022D 47            INC     DI               ; address 108h, what
 14CF:022E E2FA          LOOP    022A ; <Ä¿     leaves 'B4' at that address
 14CF:0230 C3            RET     ; <ÄÄÄ¿  ÀÄ Dencrypting
                                       ÀÄÄ Return to 108h

 -u108
 14CF:0108 B42A          MOV     AH,2A   ; Decrypted 108h
 14CF:010A CD21          INT     21
 14CF:010C 80FE07        CMP     DH,07


 ²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²
 ³³³³³    4  VIRUS:AC-839.COM infected by Arcv.Friends virus     ³³³³³
 ²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²

 ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 c  No checksum / recovery information (Anti-Vir.Dat) available.
 #  Found a code decryption routine or debugger trap.  This is common
    for viruses but also for some copy-protected software.
 E  Flexible Entry-point.  The code seems to be designed to be linked
    on any location within an executable file.  Common for viruses.
 ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

 Warning: this virus features two decryption routines...

 14CF:0100 E9FD01        JMP     0300  ; jmp to address 300h
 14CF:0103 CD20          INT     20

 -u300
 14CF:0300 E81403        CALL    0617  ; Call address 617h
 14CF:0303 E0EE          LOOPNZ  02F3  ; Remember instruction at 303h
 14CF:0305 0AF3          OR      DH,BL ; still encrypted
 14CF:0307 0818          OR      [BX+SI],BL
 14CF:0309 D0C1          ROL     CL,1

 -u617
 14CF:0617 E80400        CALL    061E  ; Another call... to 61eh...
 14CF:061A 0100          ADD     [BX+SI],AX
 14CF:061C DDFF          ESC     2F,DI

 -u61e
 14CF:061E 5B            POP     BX      ; POP BX out of the stack
 14CF:061F 81EB7816      SUB     BX,1678 ; SUBstract 1678h bytes
 14CF:0623 81C33012      ADD     BX,1230 ; We ADD to BX 1230h bytes
 14CF:0627 53            PUSH    BX      ; And save BX in the stack
 14CF:0628 5F            POP     DI      ; POP BX into DI
 14CF:0629 B94515        MOV     CX,1545 ; Get 1545h bytes into CX
 14CF:062C 81E93112      SUB     CX,1231 ; SUBstract 1231h to CX
 14CF:0630 80B5310108    XOR     BYTE PTR [DI+0131],08
                                         ; After running the xor
                                         ; we're left with [303h]
                                         ; being e8 ee (call df4h)
 14CF:0635 47            INC     DI      ; INCrease DI in 1
 14CF:0636 B20F          MOV     DL,0F   ; MOVe 0fh to dl
 14CF:0638 E2F6          LOOP    0630    ; Decrypt a block
 14CF:063A 90            NOP             ; at address 303h
 14CF:063B 90            NOP
 14CF:063C 90            NOP
 14CF:063D 90            NOP
 14CF:063E C3            RET             ; Return to 303h...
 [...]
 14CF:0303 E8E602        CALL    05EC    ; CALL to 5ech

 -u5ec
 14CF:05EC E80000        CALL    05EF    ; Second decrypting routine
 14CF:05EF 5E            POP     SI      ; Restore SI
 14CF:05F0 81EE1E04      SUB     SI,041E ; SUBstract 41eh from SI
 14CF:05F4 8DBC3501      LEA     DI,[SI+0135] ; Let's take address SI+135h
 14CF:05F8 B9E602        MOV     CX,02E6 ; CX=length to be decrypted.
 14CF:05FB 8A05          MOV     AL,[DI] ; Get [DI] in AL
 14CF:05FD 8AE0          MOV     AH,AL   ; Get AL in AH
 14CF:05FF 51            PUSH    CX      ; Save it ont top of the stack
 14CF:0600 B104          MOV     CL,04   ; Let CL be 4
 14CF:0602 D2EC          SHR     AH,CL   ; Shift AH CL-times (4)
 14CF:0604 D2E0          SHL     AL,CL   ; Same on AH but the other way
 14CF:0606 0AC4          OR      AL,AH   ; Store AH next to AL
 14CF:0608 8805          MOV     [DI],AL ; Store AL at [DI]
 14CF:060A 47            INC     DI      ; INCrease DI in 1
 14CF:060B 59            POP     CX      ; Restore the no. of bytes to CX
 14CF:060C E2ED          LOOP    05FB    ; Decrypting...
 14CF:060E C3            RET             ; Return to 306h, decrypted by now

 -u
 14CF:0306 BF0001        MOV     DI,0100
 14CF:0309 8D9C8003      LEA     BX,[SI+0380]
 14CF:030D B90200        MOV     CX,0002
 14CF:0310 87F3          XCHG    SI,BX
 14CF:0312 FC            CLD
 14CF:0313 F2            REPNZ
 14CF:0314 A5            MOVSW
 14CF:0315 87F3          XCHG    SI,BX
 14CF:0317 C684C20500    MOV     BYTE PTR [SI+05C2],00
 14CF:031C C684780500    MOV     BYTE PTR [SI+0578],00
 14CF:0321 B90500        MOV     CX,0005
 14CF:0324 8A947004      MOV     DL,[SI+0470]


 ²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²
 ³³³³³   5  VIRUS:AC-916.COM infected by Arcv.Joanna {1} virus   ³³³³³
 ²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²

 ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 c  No checksum / recovery information (Anti-Vir.Dat) available.
 F  Suspicious file access.  Might be able to infect a file.
 A  Suspicious Memory Allocation.  The program uses a non-standard
    way to search for, and/or allocate memory.
 #  Found a code decryption routine or debugger trap.  This is common
    for viruses but also for some copy-protected software.
 L  The program traps the loading of software.  Might be a
    virus that intercepts program load to infect the software.
 M  Memory resident code.  The program might stay resident in memory.
 U  Undocumented interrupt/DOS call.  The program might be just tricky
    but can also be a virus using a non-standard way to detect itself.
 B  Back to entry point.  Contains code to re-start the program after
    modifications at the entry-point are made.  Very usual for viruses.
 T  Incorrect timestamp.  Some viruses use this to mark infected files.
 ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

 -u
 14CF:0100 E90200        JMP     0105      ; Jump to address 105h
 14CF:0103 CD20          INT     20
 14CF:0105 BE1601        MOV     SI,0116   ; 116h = start decrypting.
 14CF:0108 B9BF01        MOV     CX,01BF   ; Size = 1bfh bytes
 14CF:010B 2E            CS:
 14CF:010C 81040B28      ADD     WORD PTR [SI],280B; ADD 280bh to SI
 14CF:0110 83C602        ADD     SI,+02            ; Now ADD 2
 14CF:0113 49            DEC     CX                ; SUBstract 1 from CX,
                                                   ; which will decrypt it
 14CF:0114 75F5          JNZ     010B              ; Until CX=0

 When CX comes  to 0 bytes, the virus  will be decrypted. Here you have it
 from 116h, encrypted, with CX=1bfh

 -u116
 14CF:0116 DDD8          FSTP    ST(0)
 14CF:0118 F5            CMC
 14CF:0119 2F            DAS
 14CF:011A 22F1          AND     DH,CL
 14CF:011C F662E5        MUL     BYTE PTR [BP+SI-1B]
 14CF:011F F6FB          IDIV    BL
 14CF:0121 E514          IN      AX,14
 14CF:0123 E6FC          OUT     FC,AL
 14CF:0125 8FFA          POP     DX
 14CF:0127 D6            DB      D6
 14CF:0128 C2EB75        RET     75EB

 And now decrypted, with 0 in CX... its much more legible, huh? ;-)

 -u116
 14CF:0116 E80000        CALL    0119
 14CF:0119 58            POP     AX
 14CF:011A 2D1901        SUB     AX,0119
 14CF:011D 8BF0          MOV     SI,AX
 14CF:011F 1E            PUSH    DS
 14CF:0120 06            PUSH    ES
 14CF:0121 0E            PUSH    CS
 14CF:0122 1F            POP     DS
 14CF:0123 0E            PUSH    CS
 14CF:0124 07            POP     ES
 14CF:0125 B805FF        MOV     AX,FF05
 14CF:0128 CD13          INT     13


 ²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²
 ³³³³³    6  VIRUS:ANTIMIT.COM infected by Anti-Mit virus        ³³³³³
 ²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²

 ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 c  No checksum / recovery information (Anti-Vir.Dat) available.
 F  Suspicious file access.  Might be able to infect a file.
 S  Contains a routine to search for executable (.COM or .EXE) files.
 #  Found a code decryption routine or debugger trap.  This is common
    for viruses but also for some copy-protected software.
 D  Disk write access.  The program writes to disk without using DOS.
 T  Incorrect timestamp.  Some viruses use this to mark infected files.
 J  Suspicious jump construct.  Entry point via chained or indirect
    jumps.  This is unusual for normal software but common for viruses.
 B  Back to entry point.  Contains code to re-start the program after
    modifications at the entry-point are made.  Very usual for viruses.
 ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

 14CF:0100 E80500        CALL    0108      ; CALL to address 108h

 -u108
 14CF:0108 BE2A01        MOV     SI,012A   ; Let's get 12ah in SI
 14CF:010B 8A260701      MOV     AH,[0107] ; Get [107h] into AH
 14CF:010F EB12          JMP     0123      ; Address 123h

 -u123
 14CF:0123 8BFE          MOV     DI,SI     ; Copy SI into DI
 14CF:0125 B94F01        MOV     CX,014F   ; CX = 14fh bytes
 14CF:0128 EBE8          JMP     0112      ; Jump to 112h

 -u112
 14CF:0112 AC            LODSB             ; LOaD a String of Bytes
 14CF:0113 32C4          XOR     AL,AH     ; Store AH next to AL
 14CF:0115 AA            STOSB             ; STOre a String of Bytes
 14CF:0116 E2FA          LOOP    0112      ; Decrypting...

 Dump from 100h, after running over loop 112h, therefore decrypted:

 -d100
 14CF:0100 E8 05 00 90 EB 4D 90 1B-BE 2A 01 8A 26 07 01 EB .....M...*..&...
 14CF:0110 12 90 AC 32 C4 AA E2 FA-B4 19 CD 21 8A F0 B4 0E ...2.......!....
 14CF:0120 CD 21 C3 8B FE B9 4F 01-EB E8 4D 49 54 20 53 75 .!....O...MIT Su
 14CF:0130 78 21 20 24 11 02 2A 2E-43 4F 4D 00 5B 41 6E 74 x! $..*.COM.[Ant
 14CF:0140 69 2D 4D 49 54 5D 00 46-8C 72 73 D8 53 74 72 8C i-MIT].F.rs.Str.

 For you the curious, virus was like this when encrypted:

 -d100
 14CF:0100 E8 05 00 90 EB 4D 90 1B-BE 2A 01 8A 26 07 01 EB .....M...*..&...
 14CF:0110 12 90 AC 32 C4 AA E2 FA-B4 19 CD 21 8A F0 B4 0E ...2.......!....
 14CF:0120 CD 21 C3 8B FE B9 4F 01-EB E8 56 52 4F 3B 48 6E .!....O...VRO;Hn
 14CF:0130 63 3A 3B 3F 0A 19 31 35-58 54 56 1B 40 5A 75 6F c:;?..15XTV.@Zuo
 14CF:0140 72 36 56 52 4F 46 1B 5D-97 69 68 C3 48 6F 69 97 r6VROF.].ih.Hoi.


 ²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²
 ³³³³³      7  VIRUS:ARARA.COM infected by Arara virus           ³³³³³
 ²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²

 ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 c  No checksum / recovery information (Anti-Vir.Dat) available.
 F  Suspicious file access.  Might be able to infect a file.
 #  Found a code decryption routine or debugger trap.  This is common
    for viruses but also for some copy-protected software.
 G  Garbage instructions.  Contains code that seems to have no purpose
    other than encryption or avoiding recognition by virus scanners.
 @  Encountered instructions which are not likely to be generated by
    an assembler, but by some code generator like a polymorphic virus.
 ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

 -u
 14CF:0100 E91500        JMP     0118    ; Jump to address 118h
 14CF:0103 9E            SAHF

 -u118
 14CF:0118 90            NOP
 14CF:0119 F8            CLC             ; CLear Carry flag
 14CF:011A BBC904        MOV     BX,04C9 ; Get 4c9h in BX
 14CF:011D 87CB          XCHG    CX,BX   ; XCHanGe BX for CX
 14CF:011F F8            CLC             ; CLear Carry flag
 14CF:0120 BE2B01        MOV     SI,012B ; Start of decryption
 14CF:0123 82048F        ADD     BYTE PTR [SI],8F ; ADD 8f bytes to
 14CF:0126 90            NOP                      ; address 12bh (59h)
 14CF:0127 F5            CMC             ; CoMplement Carry flag
 14CF:0128 46            INC     SI      ; INCrease by 1 SI
 14CF:0129 E2F8          LOOP    0123    ; Decrypting...
 14CF:012B*59*           POP     CX

 Virus was like this when encrypted...

 -d200
 14CF:0200 25 8B 2B F1 71 3E 92 7F-90 C9 2C 70 6F F4 64 70 %.+.q>....,po.dp
 14CF:0210 70 54 CF CB CA 29 71 C8-B1 3E 92 25 AF 3E 92 CA pT...)q..>.%.>..
 14CF:0220 29 71 B4 B1 2B 8F 6E 3E-92 7F 90 7F 78 C7 34 CC )q..+.n>....x.4.
 14CF:0230 B2 C3 B2 C3 B2 CE FC F7-4C 74 F7 51 FA F7 4C 74 ........Lt.Q..Lt

 And now, decrypted, it's this way:

 -d
 14CF:0200 B4 1A BA 80 00 CD 21 0E-1F 58 BB FF FE 83 F3 FF ......!..X......
 14CF:0210 FF E3 5E 5A 59 B8 00 57-40 CD 21 B4 3E CD 21 59 ..^ZY..W@.!.>.!Y
 14CF:0220 B8 00 43 40 BA 1E FD CD-21 0E 1F 0E 07 56 C3 5B ..C@....!....V.[
 14CF:0230 41 52 41 52 41 5D 8B 86-DB 03 86 E0 89 86 DB 03 ARARA]..........


 ²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²
 ³³³³³   8   VIRUS:ATOMANT.COM the ATOMANT.UNK1 virus or variant  ³³³³
 ²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²

 ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 c  No checksum / recovery information (Anti-Vir.Dat) available.
 A  Suspicious Memory Allocation.  The program uses a non-standard
    way to search for, and/or allocate memory.
 #  Found a code decryption routine or debugger trap.  This is common
    for viruses but also for some copy-protected software.
 E  Flexible Entry-point.  The code seems to be designed to be linked
    on any location within an executable file.  Common for viruses.
 L  The program traps the loading of software.  Might be a
    virus that intercepts program load to infect the software.
 U  Undocumented interrupt/DOS call.  The program might be just tricky
    but can also be a virus using a non-standard way to detect itself.
 Z  EXE/COM determination.  The program tries to check whether a file
    is a COM or EXE file.  Viruses need to do this to infect a program.
 O  Found code that can be used to overwrite/move a program in memory.
 B  Back to entry point.  Contains code to re-start the program after
    modifications at the entry-point are made.  Very usual for viruses.
 1  Found instructions which require a 80186 processor or above.
 ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

 14CF:0100 E99F10        JMP     11A2     ; Jump to 11a2h
 14CF:0103 0D0A4D        OR      AX,4D0A

 -u11a2
 14CF:11A2 55            PUSH    BP       ; Save BP
 14CF:11A3 E80000        CALL    11A6     ; Call next address
 14CF:11A6 5D            POP     BP       ; Restore BP (delta offset)
 14CF:11A7 51            PUSH    CX       ; Save CX
 14CF:11A8 50            PUSH    AX       ; Save AX
 14CF:11A9 2E            CS:
 14CF:11AA 8B46FA        MOV     AX,[BP-06] ; Get [BP-6] into AX
 14CF:11AD 8BF5          MOV     SI,BP      ; MOVe BP into SI
 14CF:11AF 83C618        ADD     SI,+18     ; ADD 18h to SI
 14CF:11B2 B94108        MOV     CX,0841    ; Number of bytes to decrypt
 14CF:11B5 2E            CS:
 14CF:11B6 3004          XOR     [SI],AL    ; Get AL in [SI]
 14CF:11B8 2E            CS:
 14CF:11B9 0024          ADD     [SI],AH    ; ADD AH to [SI]
 14CF:11BB 46            INC     SI         ; INCrease SI by 1
 14CF:11BC E2F7          LOOP    11B5       ; Dcrypt from 11beh
 14CF:11BE A5            MOVSW
 14CF:11BF 334F33        XOR     CX,[BX+33]

 Part of the decrypted text...

 14CF:1850 0D 0A 4D 43 20 48 61 6D-6D 65 72 20 72 61 70 2D ..MC Hammer rap-
 14CF:1860 73 7A 74 A0 72 20 82 73-20 50 45 50 53 49 20 93 szt.r .s PEPSI .
 14CF:1870 72 81 6C 74 2C 20 64 65-20 6D 6F 73 74 20 6B 69 r.lt, de most ki
 14CF:1880 63 73 65 72 82 6C 74 81-6B 20 61 20 50 45 50 53 cser.lt.k a PEPS

 How was it like when encrypted? Like this :-)

 14CF:1850 B2 B1 F2 C8 A7 CF E6 12-12 EA 19 A7 19 E6 17 D2 ................
 14CF:1860 18 01 1B 27 19 A7 09 18-A7 F7 CA F7 F8 CE A7 38 ...'...........8
 14CF:1870 19 06 13 1B D3 A7 EB EA-A7 12 14 18 1B A7 10 EE ................
 14CF:1880 E8 18 EA 19 09 13 1B 06-10 A7 E6 A7 F7 CA F7 F8 ................


 ²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²
 ³³³³³  9 VIRUS:AUS-369B.COM Found the AUSSIE.PARASITE.369 virus ³³³³³
 ²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²

 ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 c  No checksum / recovery information (Anti-Vir.Dat) available.
 F  Suspicious file access.  Might be able to infect a file.
 S  Contains a routine to search for executable (.COM or .EXE) files.
 #  Found a code decryption routine or debugger trap.  This is common
    for viruses but also for some copy-protected software.
 E  Flexible Entry-point.  The code seems to be designed to be linked
    on any location within an executable file.  Common for viruses.
 ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

 -u
 14CF:0100 E9D200        JMP     01D5      ; Jump to 1d5h

 -u1d5
 14CF:01D5 B9CD00        MOV     CX,00CD   ; No of bytes in CX
 14CF:01D8 BE2301        MOV     SI,0123   ; Address 123h in SI
 14CF:01DB 03360101      ADD     SI,[0101] ; ADD [101h] to SI
 14CF:01DF 803401        XOR     BYTE PTR [SI],01 ; MOVe 01 into [SI]
 14CF:01E2 46            INC     SI        ; INCrease SI by 1
 14CF:01E3 E2FA          LOOP    01DF      ; Decrypt from 1f6h...
 14CF:01E5 BE3402        MOV     SI,0234   ; Address 234h in SI
 14CF:01E8 03360101      ADD     SI,[0101] ; ADD [101h] to SI
 14CF:01EC B93C00        MOV     CX,003C   ; No of bytes to decrypt
 14CF:01EF 803401        XOR     BYTE PTR [SI],01 ; MOVe 01 into SI
 14CF:01F2 46            INC     SI        ; INCrease SI by 1
 14CF:01F3 E2FA          LOOP    01EF      ; Decrypt from 306h

 Decrypted text...

 -d280
 14CF:0280 89 D6 80 3C E3 75 3A EB-9D BA 0C 01 24 2A 2E 43 ...<.u:.....$*.C
 14CF:0290 4F 4D 00 5B 41 75 73 73-69 65 20 50 61 72 61 73 OM.[Aussie Paras
 14CF:02A0 69 74 65 20 76 49 52 55-53 20 20 76 2E 20 31 2E ite vIRUS  v. 1.
 14CF:02B0 31 5D 0D 5B 62 4C 41 4D-45 20 6F 54 48 45 52 53 1].[bLAME oTHERS
 14CF:02C0 5D B8 00 57 CD 21 51 52-B9 CD 00 BE 23 01 03 36 ]..W.!QR....#..6

 And encrypted...

 -d280
 14CF:0280 88 D7 81 3D E2 74 3B EA-9C BB 0D 00 25 2B 2F 42 ...=.t;.....%+/B
 14CF:0290 4E 4C 01 5A 40 74 72 72-68 64 21 51 60 73 60 72 NL.Z@trrhd!Q`s`r
 14CF:02A0 68 75 64 21 77 48 53 54-52 21 21 77 2F 21 30 2F hud!wHSTR!!w/!0/
 14CF:02B0 30 5C 0C 5A 63 4D 40 4C-44 21 6E 55 49 44 53 52 0\.ZcM@LD!nUIDSR
 14CF:02C0 5C B9 00 57 CD 21 51 52-B9 CD 00 BE 23 01 03 36 \..W.!QR....#..6


 ²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²
 ³³³³³    10 VIRUS:BETA0575.COM infected by Beta_Boys virus      ³³³³³
 ²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²

 ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 c  No checksum / recovery information (Anti-Vir.Dat) available.
 #  Found a code decryption routine or debugger trap.  This is common
    for viruses but also for some copy-protected software.
 E  Flexible Entry-point.  The code seems to be designed to be linked
    on any location within an executable file.  Common for viruses.
 L  The program traps the loading of software.  Might be a
    virus that intercepts program load to infect the software.
 T  Incorrect timestamp.  Some viruses use this to mark infected files.
 B  Back to entry point.  Contains code to re-start the program after
    modifications at the entry-point are made.  Very usual for viruses.
 ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

 -u100
 14CF:0100 E90000        JMP     0103         ; Jump to 103h, a call
 14CF:0103 E80100        CALL    0107         ; CALL address 107h

 -u107
 14CF:0107 5D            POP     BP           ; Restore BP (delta offset)
 14CF:0108 81ED0301      SUB     BP,0103      ; SUBstract 103h to BP
 14CF:010C 8D9E2001      LEA     BX,[BP+0120] ; [BP+0120] to BX
 14CF:0110 8D96A601      LEA     DX,[BP+01A6] ; [BP+01a6] to DX
 14CF:0114 3E            DS:
 14CF:0115 8A8E0301      MOV     CL,[BP+0103] ; Encryption key to CL
 14CF:0119 3BDA          CMP     BX,DX        ; Is BX=DX ?
 14CF:011B 7405          JZ      0122         ; If they are virus is
                                              ; decrypted
                                              ; If not, continue
 14CF:011D 300F          XOR     [BX],CL      ; Decrypt byte after byte
 14CF:011F 43            INC     BX           ; INCrease BX by 1
 14CF:0120 EBF7          JMP     0119         ; Jump to 119h to continue
 14CF:0122 90            NOP
 14CF:0123 9F            LAHF
 14CF:0124 8CAC139F      MOV     [SI+9F13],CS


 Blade Runner/29A
 Los Angeles, 2019
