Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Proteggere file e applicazioni Flash

Tecniche e prodotti per garantire la sicurezza dei nostri lavori in Flash
Tecniche e prodotti per garantire la sicurezza dei nostri lavori in Flash
Link copiato negli appunti

La sicurezza e la protezione sono sicuramente tra i temi che stanno più a cuore a tutti coloro che mettono la passione e l'impegno nella creazione di software con Flash. Se infatti Flash ha sempre garantito facilità d'uso e flessibilità, c'è un cosiddetto “tallone d'Achille" che non dovrebbe assolutamente essere preso sottogamba: la sicurezza, appunto. Infatti, a differenza di software scritti con altri linguaggi e tecnologie, è sempre stato piuttosto semplice prelevare dei contenuti senza autorizzazione, in modo tale da scomporli in qualche modo, per rubare quindi idee e, nei casi ancora peggiori, dati sensibili di utenti.

Le soluzioni provate sono state tante, altrettanti sono stati i tentativi da parte di utenti e gruppi vari di programmatori di testare e distruggere eventuali protezioni, a volte con scopi puramente didattici, a volte con scopi tutt'altro che amichevoli. Di conseguenza, purtroppo, la sicurezza di Flash è stata sempre causa di scelte avverse da parte di case produttrici. Si veda la Apple, che con l'introduzione dell'iPhone non ha voluto rendere disponibile l'uso di file Flash. L'origine di tutta questa problematica è presto spiegata: considerato il fatto che Adobe Flash non è l'unico software in circolazione a poter leggere senza problemi i file .swf (si veda ad esempio Gnash, programma mantenuto dal progetto GNU che permette la riproduzione di questi file senza problemi), è stato semplicissimo per molti programmatori scrivere dei software che, una volta ottenuti i file .swf, potessero “aprirli" e decompilarli senza problemi.

Il tutto non si esaurisce qui, ovviamente: nel corso del tempo sono stati sviluppati tool di vario genere per cercare di impedire l'accesso non autorizzato ai contenuti. Si vedano per esempio gli offuscatori, programmi creati con lo scopo di rendere incomprensibile il proprio codice. Se alcuni programmi, come vedremo, “mascherano" solo alcune sezioni del nostro prodotto, con altri andremo a modificare radicalmente la struttura stessa dell'organizzazione del codice sorgente e i file che compongono il progetto, in modo tale da evitare qualsiasi furto.

Ancora, alcune soluzioni hanno portato a “bloccare" il proprio software Flash in base al dominio sul quale viene eseguito: in questo modo, nel caso il nostro software venga eseguito specificatamente su un sito da noi già previsto, tutto fila liscio. Altrimenti l'esecuzione del nostro file viene bloccata immediatamente. Il termine tecnico per indicare questa funzionalità è “domain lock".

Non tutte le minacce (e le soluzioni), però, vengono dall'esterno: vedremo anche che molto spesso una buona “condotta" nella scrittura del codice e un uso di determinate tecniche (e a questo punto l'inventiva è l'unico vero limite che abbiamo) aiutano decisamente tanto nello sviluppo di un'applicazione sicura.

SWFLock, una soluzione semplice e online

Come prima “soluzione" dedicata alla sicurezza dei nostri progetti in Flash esaminiamo è un programma semplice, veloce da usare e soprattutto efficace. SWFLock non è, infatti, un software da scaricare, installare ed eseguire: tutta la procedura viene eseguita online. Il programma è ovviamente raggiungibile dal suo sito ufficiale, www.swflock.com. Analizziamolo nel dettaglio, dandogli in pasto un piccolo file Flash per vedere cosa succede.

Appena arrivati sul sito veniamo accolti da un'interfaccia utente molto spartana, semplice ma gradevole. Il sito propone una serie di passi da seguire, in modo tale da farci scegliere la tipologia di servizio che ci interessa. Da notare che il sito propone due versioni del proprio prodotto. La prima, gratuita, gestisce file fino a 5 MB di grandezza, lasciando un piccolo marchio (il cosiddetto watermark) nell'angolo in basso a destra del file stesso. Al di là di questi limiti, tuttavia, le features del programma rimangono pressoché intatte: è garantito l'offuscamento del codice ed anche l'utilissimo “domain lock". Oltre a queste due caratteristiche principali, inoltre, viene data la possibilità di creare un periodo di prova (il trial time) e la possibilità di proteggere con una password il proprio file.

Figura 1 - L'interfaccia di SWF Lock
screenshot

Passiamo adesso alla prova pratica. Per prima cosa, dalla home page, selezioniamo il tipo di servizio gratuito (Free Service). Una volta selezionato, ci viene chiesto di segnare tutte le features che vogliamo implementare nel nostro progetto una volta criptato. Oltre alle caratteristiche già riportate, c'è un'altra voce che appare: “Preloader". Si tratta della presenza di una barra di progresso che indica lo stato della successiva decodifica del file criptato, durante l'esecuzione da parte dell'utente finale.

Lo step successivo è l'upload del file. Ricordate che nella versione gratuita il limite di grandezza è di 5 megabyte, per cui non si potrà andare oltre. Automaticamente, quindi, partirà il procedimento di elaborazione del file.

Figura 2 - Elaborazione del file
screenshot

Infine, una volta terminata questa fase, il programma ci restituirà il link del nostro prodotto adesso offuscato, attivando l'ultimo pulsante corrispondente all'ultimo step: “Download New File". L'output che riceverete sarà di qualità e vi darà una sicurezza in più rispetto a prima. La procedura è terminata e adesso potete caricare il vostro file dove volete. Questa che abbiamo visto è senza dubbio una delle risorse migliori, ma ce ne sono anche altre, anche gratuite (anche se il prezzo di 4.99$ non è poi così eccessivo): un esempio di alternativa gratuita la troviamo sul blog personale di Bruce-lab e si chiama SWF Cry.

Figura 3 - Il file pronto per il download
screenshot

Anche questa soluzione è tutta online, dall'aspetto forse un po' spartano ma non per questo meno efficace. Permette di offuscare package, classi o anche singole funzioni e variabili. Sul sito in questione, comunque, è possibile trovare un tutorial approfondito che spiega passo per passo come seguire la procedura in maniera corretta e senza intoppi. Unica nota: la versione presentata è ancora molto “embrionale" e potrebbe dare alcuni problemi in termini di utilizzazione del prodotto finale. Per questo motivo è bene sempre avere a portata di mano delle copie di backup.

Passiamo avanti, esaminando un altro ottimo programma: ToKaos.

ToKaos: un offuscatore di codice

ToKaos, un programma tutto italiano ma famoso a livello internazionale, parte dal presupposto che avere il codice Actionscript offuscato, anziché avere il proprio file swf/swc offuscato, porti ad un risultato decisamente migliore. Cosa vuol dire tutto questo? Semplicemente, ToKaos si pone “un passo" prima rispetto agli altri: anziché mascherare e confondere il file swf che otteniamo in output dopo la compilazione, il programma permette di offuscare tutti i file sorgenti, o quelli che ci interessano, per poi a quel punto compilarli comunque senza problemi. Un procedimento dunque che si pone prima della compilazione e non dopo. Tra le caratteristiche principali, il programma offre innanzitutto l'offuscamento di package, classi, funzioni (potendo selezionare sia il nome della funzione che i parametri passati in input).

Le tecniche di mascheramento del programma, inoltre, non finiscono qui: ToKaos si occupa infatti di “mischiare" in maniera intelligente il codice tramite alcuni algoritmi, cambiando la struttura dei package, rimuovendo i commenti ed “esplodendo" i file di include (ovvero posizionando il codice altrove), oltre a lavorare anche duramente sulle stringhe. Un'altra caratteristica senza dubbio peculiare del programma è la grande possibilità di scelta: in base al progetto che daremo in input, infatti, verranno effettuate consequenzialmente delle ottimizzazioni legate alla tipologia stessa. Successivamente, alla fine del processo, verrà creata automaticamente una nuova cartella con tutti i file offuscati dal programma.

Prima di passare alla pratica, per avere le idee più chiare, è particolarmente interessante l'esempio riportato sul sito del programma: in questo caso sono stati presi in esame i file del progetto “Yahoo Astra", uno slider con funzionalità legate ai colori. Viene mostrata la procedura step-by-step, partendo dall'offuscamento dei package fino ad arrivare al codice vero e proprio, passando per l'encryption delle varie classi.

Scaricare il programma è molto semplice: basta andare sul sito ufficiale e dalla tabella presente sulla pagina si può scegliere la versione da prendere. Al momento in cui questo articolo viene scritto, la versione più recente è la 1.3.5. In questo caso la versione disponibile è una trial di quindici giorni: quella completa ha un costo di 120€.

Una volta installato tutto seguendo la procedura guidata, utilizzare ToKaos è semplice ed intuitivo. Basta cliccare su “Open" nel menu “File" per scegliere la tipologia di progetto da offuscare: si potrà scegliere tra un'applicazione creata con il Flex Framework, un file creato con Flash CS (in formato .fla) oppure tra altre tipologie di progetti Actionscript. Una volta scelto il tipo di progetto ci si apre un prospetto con varie opzioni da selezionare: una scheda interamente dedicata alle opzioni “generiche" (scelta di cosa offuscare, tipo di algoritmo usato per criptare), una contenente i vari identificatori riservati ed una per includere eventuali librerie, qualora il nostro progetto ne avesse necessità.

Figura 4 - La schermata del risultato dell'offuscamento
screenshot

A questo punto si può cliccare sul pulsante “Analyze" per far analizzare l'operazione di offuscamento al programma. Una sorta di preparazione al lavoro da effettuare successivamente. A questo punto ci viene chiesto di scegliere con precisione i file da includere nel processo e quelli da far rimanere fuori. Ora si può cliccare sul pulsante “Encrypt", per avviare il processo vero e proprio.

Una volta che il programma terminerà la procedura ci verrà mostrata una schermata con tutti i risultati, come qui di seguito.

Figura 5 - Il file pronto per il download
screenshot

Anche questo, quindi, è un prodotto decisamente valido, forse leggermente più “in alto" per quello che è il prezzo di vendita: un prezzo di vendita però sicuramente proporzionato e valido per quelle che sono le features presentate. Dopo aver visto questo programma possiamo fare un passo avanti, dando un'occhiata a quelle che sono le tecniche più consigliate per quanto riguarda la programmazione del nostro progetto.

Programmare per la sicurezza

Come già specificato precedentemente, a volte un lavoro di protezione, per evitare intromissioni nel nostro codice, possiamo farlo noi. Ovviamente, un argomento come questo è molto vasto, data l'infinita possibilità di scelta di situazioni che possiamo ritrovarci davanti mentre creiamo il nostro prodotto. Innanzitutto, un consiglio molto importante è quello di regolarsi in base alla tipologia di prodotto che dobbiamo realizzare. D'altronde, nel caso di un gioco non avremo le stesse necessità di un programma che magari ha a che fare con il movimento di denaro: sono casi diversi che coinvolgono problematiche e aspetti diversi.

Supponiamo, ad esempio, di avere a che fare con un gioco di corse: in questo caso per evitare che un giocatore particolarmente “esperto" possa modificare i valori di gioco per barare e vincere la corsa, dovremmo sistemare in giro per la pista dei “checkpoint" che il giocatore dovrà obbligatoriamente passare. Se uno di questi dovesse mancare all'appello, allora il programma capirà automaticamente che il giocatore ha tagliato, creando un'irregolarità.

Un ragionamento simile, ma non uguale, si potrebbe applicare al progressivo aumentare del punteggio in un quaslasi gioco. Modificando determinati valori, infatti, un giocatore potrebbe arrivare a modificare il punteggio. Fare dei controlli per evitare degli aumenti “esagerati", quindi rimanendo in un certo range di modifiche, sicuramente aiuta e rende il gioco più sicuro.

Tornando a noi, però, non abbiamo sempre a che fare con dei giochi. Soprattutto per quanto riguarda la realtà italiana, la stragrande maggioranza del software che viene prodotto è di tutt'altro tipo. Software finanziari, gestionali... molto spesso si ha a che fare con il denaro. C'è, quindi, un grande bisogno di sicurezza nelle transazioni, ed anche nel mantenimento dei dati. Un'idea sicuramente valida potrebbe essere, nel caso ne valga la pena, la possibilità di duplicazione dei dati con una verifica (teoricamente) costante: nel caso qualcuno vada a modificare il valore attuale da una parte, dall'altra si avrà una differenza e quindi si potrà rilevare meglio l'irregolarità.

Molto importante, inoltre, è gestire il menù contestuale in modo tale che non permetta il controllo da parte dell'utente: magari un fotogramma avanti rispetto a quello attuale (nel caso di un progetto realizzato con Adobe Flash) potrebbe esserci un'area riservata di un sito, il che non è assolutamente una soluzione corretta. Questo discorso specifico però lascia il tempo che trova: fortunatamente oggi si usano standard molto più sicuri per gestire i siti web, che vedono sempre meno l'uso del Flash.

Un'altra cosa da tenere sicuramente a mente è legata ai tempi del gioco. In molti conoscono giochi come Farmville o Music Challenge su Facebook. Alcune persone sono riuscite, con l'aiuto di alcuni programmi, a modificare il tempo di gioco in modo tale da rallentare tutte le routine ed ottenere più punti. Si dovrebbe quindi controllare il tempo impiegato per ogni azione “saliente" per riuscire a capire se l'utente sta facendo le cose regolarmente oppure no. Qui andiamo ad utilizzare nel codice dei controlli che comunque utilizzano, in certi casi, un gran numero di risorse. Occorre valutare con attenzione, quindi, se è il caso di implementarli oppure no.

Prima di concludere, dobbiamo ricordare qualcosa di molto importante: nessun file SWF sarà mai totalmente al sicuro, ma perlomeno si può fare qualcosa per evitare di esporre troppo il nostro codice ad occhi e tastiere troppo indiscrete. Internet, come grande rete di connessione tra centinaia di milioni di persone, è sicuramente piena di pericoli. In egual modo, però, gli strumenti che vengono messi a disposizione degli sviluppatori sono molti. Ecco altre alternative che possono essere sicuramente prese in considerazione.

Amayeta SWF Encrypt è un comodo programma di offuscamento dei propri file SWF arrivato alla versione 6.0, che conta tra le proprie features una vasta compatibilità con i vari tipi di progetti ed una disponibilità multipiattaforma (sia per Windows che per Mac OS).

Actionscript 3 Obfuscator di ShapedByRegret è uno script in Python che ha l'obiettivo di rendere i propri file .as (si parla di Actionscript quindi, non più degli SWF finali) illeggibili. È una soluzione piuttosto semplice rispetto alle altre qui presentate e di conseguenza è anche molto più facile da utilizzare.

Ti consigliamo anche