Mauro Graziani
Virus: un esperimento di transcodifica

Vi presentiamo un esperimento di transcodifica che nasce da una conversazione del sottoscritto con Francesco Varanini e dal suo libro di poesie.
La conversazione verteva sulla possibilità di realizzare un programma che, utilizzando le scarse possibilità audio di un normale PC, fosse in grado di creare una musica d'ambiente in qualche modo collegata a quello che l'utente stava facendo e andasse a sostituire l'audio normale del PC (i maledetti “rumorini”).
Ora, l'attività dell'utente viene vista dal PC come pressione di tasti (tastiera e mouse) e come movimento del mouse. Ho cominciato qualche esperimento con la tastiera basandomi sul fatto che, nel PC, l'alfabeto e le note musicali vengono codificate nello stesso modo.
Come sapete (o intuite), in digitale, tutto viene ridotto a una serie di numeri in base a un determinato codice. Ogni file, che contenga testo, immagini o suoni, è in realtà una serie numerica.
Per esempio, questo è l'inizio di un file di puro testo (.txt). A sinistra vedete i numeri (in esadecimale perché il computer ha 16 dita, non 10) e a destra la loro trasposizione in lettere

42 72 75 63 65 20 53 74 65 72 6C 69 6E 67 0D 0A 0D 0A 62 72 Bruce Sterling....br
75 63 65 73 40 77 65 6C 6C 2E 73 66 2E 63 61 2E 75 73 0D 0A uces@well.sf.ca.us..
0D 0A 0D 0A 0D 0A 4C 69 74 65 72 61 72 79 20 46 72 65 65 77 ......Literary Freew
61 72 65 20 2D 2D 20 4E 6F 74 20 66 6F 72 20 43 6F 6D 6D 65 are -- Not for Comme
72 63 69 61 6C 20 55 73 65 0D 0A 0D 0A 46 72 6F 6D 20 54 48 rcial Use....From TH

Nella trasposizione, i punti corrispondono a caratteri di controllo non stampabili. Per es., la combinazione 0D – 0A (13 – 10 in decimale) significa ritorno carrello (0D) e giù di una riga (0A), cioè caporiga.
Se il formato è standardizzato, all'inizio del files viene inserito un header che fornisce informazioni sul contenuto. Questo è l'inizio di una immagine jpg identificabile dalle lettere JFIF. Segue, poi, il programma con cui è stato realizzato (Photoshop 3.0.8) e una serie di dati (non riportati qui) sulla risoluzione, le dimensioni, eccetera.

FF D8 FF E0 00 10 4A 46 49 46 00 01 02 01 00 48 00 48 00 00 ......JFIF.....H.H..
FF ED 0D AE 50 68 6F 74 6F 73 68 6F 70 20 33 2E 30 00 38 42 ....Photoshop 3.0.8B
49 4D 03 ED 0A 52 65 73 6F 6C 75 74 69 6F 6E 00 00 00 00 10 IM...Resolution.....

Viene spontaneo un breve appunto per quelli che sono convinti di non lasciare tracce. Praticamente tutto quello che si fa con un computer è tracciabile. Dentro ogni documento Word in formato .doc c'è il nome del programma, la versione e il numero di serie. Da un file .doc, è facilissimo sapere se chi l'ha scritto ha usato un originale o una copia. Siate paranoici.

Tornando a noi, l'alfabeto inglese, le cifre, i simboli di punteggiatura, lo spazio e vari caratteri di controllo (es. caporiga, escape, tabulatore) vengono codificati secondo lo standard ASCII con numeri che vanno da 0 a 127. Notare che le lettere maiuscole e minuscole hanno codici diversi (i curiosi troveranno il codice in appendice).
L'origine del codice ASCII è americana (American Standard Code for Information Interchange), quindi, con la consueta lungimiranza e sensibilità per tutto ciò che non è americano, esso non contiene lettere accentate o con altri simboli, salvo poi redimersi, nemmeno tanto in fretta, quando si videro opportunità di mercato anche all'estero. A questo punto venne coniato un ASCII esteso di 256 caratteri che aggiungeva i cosiddetti “caratteri speciali” delle lingue europee.
Ora passiamo alla musica. Lo standard di codifica delle note è il protocollo MIDI in cui ai tasti del pianoforte vengono attribuiti numeri da 1 a 127, con qualche nota in più perché il piano ha 88 tasti (circa 7 ottave e mezza), il che significa soltanto che il MIDI arriva un po' più in basso e un po' più in alto rispetto al piano. Il numero 60 (decimale) corrisponde al DO centrale.
Dato che l'estensione del pianoforte racchiude quella dell'intera orchestra, con il MIDI è possibile codificare una nota emessa da un qualsiasi strumento.

A questo punto è chiaro che, trattandosi sempre di stream numerici, un qualsiasi file potrebbe, in linea teorica, essere utilizzato da qualsiasi programma. Dico in linea teorica perché, dato che, come abbiamo già detto, i formati standard sono dotati di un header, il programma lo cerca e non trovandolo, blocca il caricamento, a meno che non ci sia la possibilità di dirgli di procedere in ogni caso e specificare qualce insieme di caratteri usare. Ovviamente in questo caso il risultato è casuale. Qui vedete una piccola parte di una immagine così come appare quando viene caricata come testo in in questo word processor (Open Office)

i…„*.#²#ö#ΔÞð#¤#’o¦¾ñó##3+�ËYNt‡´¨6?Ê•#‹!ù]YE½›~j’3ý,™1áS2eJ?—#Q3#ù) Ét5ÂƇÒP#’|©#Ý#�#`¾­j»å±ÆN:##"G"K.öè‡s#úµSƒ#N,N1×" MüP#»Ú¨="{ÏËÄúc“¾h‹.\gH#hö¹i#Í#feëÝ\­irvñÑâ¿#Åy�U7=ë®C‘‡s@²###”–‰#/¶ Û«Ý¿Û¬ïÅð’c3]ñ%!{ö8Ü¿^êñÿ#öçÓX#ˆ›’æ#!‡%®g•Iºx•V">„·… Ú¶í¿-�‰Ëçá#)##ÆÖ’áU¼·²0Ýo²hjùm®§¯,bÝOO}EÎK"Øý®¾G²�y~8¨¶Lzôñ¦Ä¸#¹¾‚\ Eãb‹'Î-y#�Ê�:y`¯ø«&U[5¯*À†I$#¦5btúë#Íÿ#¸##ÁÁlÉuܲ<¨ÛE´º0)zóÜÿ#Xú— ˜Ü®TGkª3Dƒüf«ÎG.#îÉÄ„#â¹i#Â1L#¼j=Êæz“5¼ü‰?##úa$º¤vë´ÙW§Ê¸*¬1s²Ä#KF¦�t[�ä [Ãk3-èÚL—²?%µN–ÇÇ°#׬­C´¥Þí6dàèoäD ÷¡-ZLJê‚“¦¨X¨C6ù¬:#G]|T“q˜Qb´g,Æû·oiB�sn-ýÚYa‘ȓ ��/çä» ;6)µ?#6#Ñ8¼XÆ—bÌ##Ó©5eôdn»Ù E?##3ã®b#FÝîQÞÝ##iØó¸¾!±aÝ(amÉ#´Ä÷‹ª¨©ðÇ#N©#qB–ñì¦=#gˆ†§Tä6¾�—´l�Jû~Í… 9>„¨u#bI4pùX#NG—mNňk×ÄÄ×#óqÚ4ć##Y|Ù’úwíñS͉6J�Þt�µ¹W7°é©§qxG™‹® 3Þú7–#Xý!©¸Æ#¨‰Æ¾ä@9#ÿ#ÌÎÅ

Direi che come esempio è sufficiente (gli eventuali blob neri sono caratteri che l'HTML non riesce a interpretare).
Forse sarete sorpresi dal fatto che sembrano esserci molti più segni strani che lettere normali. La cosa dipende solo dal fatto che le lettere sono 26 maiuscole + 26 minuscole = 52 su un totale di 256 simboli, circa 1 su 5.
Testo come immagineNaturalmente si può fare anche l'inverso. Nell'immagine a fianco vedete un testo in italiano interpretato come immagine a scala di grigi in cui 0 è nero e 255 è bianco. L'immagine è generalmente scura perché le lettere hanno numeri bassi. Quelle accentate e i caratteri speciali, che hanno numeri alti, sono pochi e corrispondono ai puntini più chiari.
Caricando questa immagine in un editor esadecimale o in un programma di testo che ve lo lasci aprire senza lamentarsi del fatto che non è un txt, si può leggere il testo, sebbene con qualche limitazione. I formati grafici, infatti, non si limitano a riportare il valore dei pixel. Alcuni, come JPG, PNG e GIF, comprimono i dati e quindi il testo va perso.
Quello usato per questa figura, BMP, può non comprimere, ma ordina le righe in un modo particolare, per cui l'inizio del testo risulta essere alla fine del file. Inoltre le righe vengono disposte a blocchi, per cui anche il testo è spezzato in blocchi, però resta perfettamente leggibile e ricostruibile sapendo le regole. L'unico formato che, in certe condizioni, lascia il testo esattamente come era è il TIFF, che nei documenti HTML non si usa perché molti browser non lo decodificano.

Da questi esempi appare chiaro che non esiste alcun legame concettuale fra la codifica di immagini e testo. Il motivo della coincidenza numerica è solo tecnico. Le estensioni 0-127 e 0-255, infatti, corrispondono a un byte con segno e senza.
La stessa cosa vale per la transcodifica testo <-> musica. Anche le note possono essere interpretate come caratteri alfanumerici e viceversa, con risultati parimenti casuali. In questo esempio potete ascoltare la frase "Nel mezzo del cammin di nostra vita" interpretata come una veloce serie di note secondo l'assegnamento del protocollo MIDI (con buona pace del Sommo Poeta).
La durata delle note è stata decisa dal sottoscritto perché il MIDI non la codifica direttamente. Esso, infatti, è nato solo per collegare al computer una tastiera musicale che viene trattata come la tastiera alfanumerica in modo del tutto asincrono. Per ogni tasto premuto e rilasciato, infatti, il computer riceve un apposito segnale che indica che quel tasto è stato premuto o rilasciato in quell'istante. Se, in quel momento, è attivo un programma che intercetta tale segnale, può suonare una nota con la scheda audio oppure salvare dei dati, aggiungendo un dato temporale, per poi ripetere l'esecuzione. La durata di ogni nota è determinata dalla differenza fra l'istante di rilascio e quello di pressione del tasto.

A questo punto, su invito di Francesco, ho provato ad applicare questo sistema a una delle sue "poesie aziendali" di recente uscita ed esattamente a "Virus", che trovate in appendice.
In questa poesia, alcune frasi, di contenuto informatico, sono costantemente ripetute, il che aiuta a superare il problema della mancanza di senso prodotta dalla transcodifica. È noto, infatti, che, anche una cosa priva di senso, se costantemente ripetuta, acquista un minimo senso. È un effetto utilizzato spesso sia in campo artistico che in politica.
Questo brano, in fondo, è musica a programma che vorrebbe riprodurre la seguente situazione, che illustra anche il funzionamento di un sistema windows:
  1. All'inizio, alcuni individui scrivono, con furore impiegatizio, cioè calma piatta, delle frasi tratte dalla poesia di Francesco. Il verso più utilizzato è l'ossessivo, potente mantra "C:\WINDOWS\SYSTEM", radice di tutti i mali. Il verso è interconnesso, come se più persone lo scrivessero a velocità diverse.
  2. A fronte di questa invocazione, appare il Virus, il cui primo effetto è quello di intercettare le note che vengono eseguite e crearne delle copie timbricamente distorte. Il Virus è piccolo, ma ben scritto e quindi efficiente per cui si nota un notevole incremento di attività del sistema.
  3. Il Virus si riproduce rapidamente: ogni nota viene ripresa, moltiplicata e distorta fino a creare un flusso sonoro continuo. A questo punto il sistema è ormai fuori controllo. Siamo al punto in cui il cliente chiama disperato il consulente ottendo la classica risposta "Ho capito, hai un virus. Domani passo. Stai tranquillo, non può fare più danni di te".

Potete ascoltare il brano in streaming cliccando qui oppure scaricarlo cliccando qui con il tasto destro (MP3 7 Mb). Dura circa 8 minuti. Non preoccupatevi: vi arriva solo il risultato audio NON IL VIRUS.

Back

Appendici

Virus (la poesia di F. Varanini)

La poesia sta in Francesco Varanini, L'irresistibile ascesa del Direttore Marketing cresciuto alla scuola del largo consumo, Guerini e Associati, 2003.

V I R U S A L E R T

Our viruschecker found
The virus(es) in your email
Please check your system for viruses
or ask your system administrator
to do so

W32.Badtrans.B@mm
in: KERNEL32 EXE
C:\WINDOWS\SYSTEM
Unknown0495.data
Unknown05a3.data

Trovato!
è una bestiola raffinata e pericolosetta
butta giù l'antivirus attivo
a volte allega alle email un documento
di testo o word, pescato a caso
a parte questo
cerca di connettersi a un sito per
scaricare un noto trojan,

W32.Badtrans.B@mm
in: KERNEL32 EXE
C:\WINDOWS\SYSTEM
Unknown0495.data
Unknown05a3.data

Qui trovate le info sul virus e un link
per scaricare un tool di rimozione.
se lo avete beccato senza aver aperto l'allegato
allora dovrete anche
aggiornare Outlook (anche Express)
con la patch Microsoft

W32.Badtrans.B@mm
in: KERNEL32 EXE
C:\WINDOWS\SYSTEM
Unknown0495.data
Unknown05a3.data

Puoi leggere tranquillamente questo messaggio
ora sono pulito e disinfettato.
indovina chi è stato a infettare mezzo mondo?
comunque, il virus piazza due file .exe come segue
c:\windows\\temp\decrypt-password(1).exe
c:\windows\taskbar.exe

W32.Badtrans.B@mm
in: KERNEL32 EXE
C:\WINDOWS\SYSTEM
Unknown0495.data
Unknown05a3.data

Tutto quello che sappiamo è
che questo virus ha cominciato a circolare
è un nuovo virus ed estremamente pericoloso
per favore ricopiate queste informazione ed inviatela
prendete tutte le precauzioni possibili
informatene il maggior numero di persone possibile.

W32.Badtrans.B@mm
in: KERNEL32 EXE
C:\WINDOWS\SYSTEM
Unknown0495.data
Unknown05a3.data

I received a message like this once,
faccio tutto quello che devo fare
e resto col timore di non aver fatto abbastanza
oppure che si tratti
di un Infinite Jest, una enorme
presa in giro.


Il codice ASCII

       Oct   Dec   Hex   Char           Oct   Dec   Hex   Char
       ------------------------------------------------------------
       000   0     00    NUL '\0'       100   64    40    @
       001   1     01    SOH            101   65    41    A
       002   2     02    STX            102   66    42    B
       003   3     03    ETX            103   67    43    C
       004   4     04    EOT            104   68    44    D
       005   5     05    ENQ            105   69    45    E
       006   6     06    ACK            106   70    46    F
       007   7     07    BEL '\a'       107   71    47    G
       010   8     08    BS  '\b'       110   72    48    H
       011   9     09    HT  '\t'       111   73    49    I
       012   10    0A    LF  '\n'       112   74    4A    J
       013   11    0B    VT  '\v'       113   75    4B    K
       014   12    0C    FF  '\f'       114   76    4C    L
       015   13    0D    CR  '\r'       115   77    4D    M
       016   14    0E    SO             116   78    4E    N
       017   15    0F    SI             117   79    4F    O
       020   16    10    DLE            120   80    50    P
       021   17    11    DC1            121   81    51    Q
       022   18    12    DC2            122   82    52    R
       023   19    13    DC3            123   83    53    S
       024   20    14    DC4            124   84    54    T
       025   21    15    NAK            125   85    55    U
       026   22    16    SYN            126   86    56    V
       027   23    17    ETB            127   87    57    W
       030   24    18    CAN            130   88    58    X
       031   25    19    EM             131   89    59    Y
       032   26    1A    SUB            132   90    5A    Z
       033   27    1B    ESC            133   91    5B    [
       034   28    1C    FS             134   92    5C    \
       035   29    1D    GS             135   93    5D    ]
       036   30    1E    RS             136   94    5E    ^
       037   31    1F    US             137   95    5F    _
       040   32    20    SPACE          140   96    60    ‘
       041   33    21    !              141   97    61    a
       042   34    22    "              142   98    62    b
       043   35    23    #              143   99    63    c
       044   36    24    $              144   100   64    d
       045   37    25    %              145   101   65    e
       046   38    26    &              146   102   66    f
       047   39    27    '              147   103   67    g
       050   40    28    (              150   104   68    h
       051   41    29    )              151   105   69    i
       052   42    2A    *              152   106   6A    j
       053   43    2B    +              153   107   6B    k

       054   44    2C    ,              154   108   6C    l
       055   45    2D    -              155   109   6D    m
       056   46    2E    .              156   110   6E    n
       057   47    2F    /              157   111   6F    o
       060   48    30    0              160   112   70    p
       061   49    31    1              161   113   71    q
       062   50    32    2              162   114   72    r
       063   51    33    3              163   115   73    s
       064   52    34    4              164   116   74    t
       065   53    35    5              165   117   75    u
       066   54    36    6              166   118   76    v
       067   55    37    7              167   119   77    w
       070   56    38    8              170   120   78    x
       071   57    39    9              171   121   79    y
       072   58    3A    :              172   122   7A    z
       073   59    3B    ;              173   123   7B    {
       074   60    3C    <              174   124   7C    |
       075   61    3D    =              175   125   7D    }
       076   62    3E    >              176   126   7E    ~
       077   63    3F    ?              177   127   7F    DEL

Back