Come sono riuscito a crackare un programma scritto in Java

Molti pensano che crackare un programma sia un’operazione che solo grandi esperti informatici sono in grado di fare. Si sbagliano. Sì, io ho una infarinatura del linguaggio C, ma non sono certamente un esperto. Anzi, quando per esigenze personali devo creare un programma è una continua ricerca su internet, dato che non ricordo molte istruzioni. Non ho nemmeno mai provato a programmare in Java. Che ci crediate o no, una volta compresa la logica di un linguaggio di programmazione, si è in grado di fare qualcosa con molti linguaggi. Essi si somigliano, bisogna però conoscerne gli utilizzi, le potenzialità, le funzioni e la sintassi.

Perché crackare un programma?

Ho sempre cercato di capire come funzionano le cose. Il cracking mi è sempre interessato per due motivi. Il primo perché ho sempre voluto capire come facessero i cracker professionisti a fare quello che fanno. Sono sempre dipinti dai film come personaggi interessanti, dunque la curiosità è legittima. Il secondo è perché compiere tale operazione ti permette di capire meglio come funziona la sinergia tra hardware e software, cose che prima di aver studiato qualcosa di informatica mi pareva magia. Dunque quando un mio amico quasi per scherzo mi ha lanciato la sfida, ho deciso di coglierla e mi sono messo al lavoro.

Ma crackare è legale?

Mi sono informato bene a riguardo e purtroppo si fa troppa confusione. In Europa non è illegale crackare a determinate condizioni. Se si prova a crackare per imparare e quindi per non usare poi il software per scopi personali o di lucro è legittimo. Dunque una volta terminata la crack va cancellato tutto. Così io ho fatto e se volete tentare la stessa cosa vi consiglio di fare lo stesso. Ovviamente poi non va condivisa la crack, dunque in quest’articolo ometterò ogni informazione che possano ricondurre al software che ho studiato.

Perché Java?

Nel mio caso è stata la fortuna a stabilire un programma in Java. Infatti il software indicatomi dal mio amico era scritto con questo linguaggio. Devo precisare che la crack di questo software molto costoso in rete non esiste, dunque non ho potuto “imbrogliare” studiando quelle altrui. Va considerato che studiare un programma compilato in java è più semplice. Questo perché la compilazione non fornisce un file scritto in linguaggio macchina. Viene invece prodotto un archivio .jar di file .class che vengono poi virtualizzati ed eseguiti da un terzo software. Dunque abbiamo un output intermedio tra linguaggio macchina e di programmazione. Questo rende più semplice la “reverse engineering” nella decompilazione.

Schema del funzionamento di Java
Schema del funzionamento di Java

Primo passo: cosa devo bypassare?

Per prima cosa bisogna comprendere cosa limita il mio software. Nel mio caso avevo una versione Trial che poteva essere attivata. Una crack “raffinata” andrebbe a cercare un modo per compiere l’attivazione, ma siccome bisogna studiare in che modo è stata protetta e crittografata io ho preferito un’altro modo. L’elemento limitante della mia versione Trial era la produzione di un watermark. La rimozione del suddetto avrebbe prodotto gli effetti da me desiderati. Se magari invece il software avesse avuto una limitazione di tempo, avrei lavorato su quello.

Un watermark su una immagine
Un watermark su una immagine

Secondo passo: decompilazione

Per capire meglio il codice e dove andare a mettere le mani, è buona idea decompilare l’archivio .jar. Per fare ciò si possono usare software dedicati. Io invece per risparmiare tempo ho preferito usare un servizio online.

Terzo passo: ricercare la parte di codice interessante

Una volta ottenuti i file decompilati, bisogna andare a cercare il codice “interessante”. Dunque ho aperto i file e ho cercato la scritta “watermark”. Per leggere meglio questi file ho fatto uso del programma codeblocks. Ecco cosa ho trovato:

La scritta "watermark" nel codice decompilato del programma da crackare
La scritta “watermark” nel codice decompilato del programma da crackare

Quarto passo: esaminare quella parte di codice

Ora che ho un indizio importante mi sono messo a studiare quella parte di codice per capire come venisse impresso il watermark. Esattamente la riga superiore si legge:

DatatypeConverter.parseBase64Binary(".......")

All’interno delle parentesi c’era una stringa lunghissima, il che mi ha fatto pensare: “non sarà mica un codice che tradotto mi restituisce una immagine vettoriale identica al watermark?” dunque ho cercato un convertitore online di Base64, trovando questo, ho incollato la stringa e… voilà! Come pensavo!

Quinto passo: Sostituire la stringa

Per la mia inesperienza come primo tentativo ho provato a sostituire la stringa con l’immagine di un pixel bianco usando il classico blocco note. Ho aperto il file .class (non quello decompilato!) corrispondente col blocco note e sostituito la stringa. Ovviamente non ha funzionato. Così ho scoperto che serviva un preciso programma per modificare quel file .class. Ho trovato così dirtyJOE, un programma atto a questo scopo. Così ho aperto il file in questo programma e modificato la stringa corrispondente.

Schermata per modificare la stringa in dirtyJOE
Schermata per modificare la stringa in dirtyJOE

Sesto passo: sostituire il nuovo file .class nell’archivio .jar

Questa può sembrare una operazione banale ma invece si è rilevata la più ostica. L’archivio .jar, all’interno del quale si trovano i file .class, io lo apro e decomprimo con winrar, software che già utilizzo per archivi .zip e .rar. Il problema però è che all’interno dell’archivio ci sono più file con lo stesso nome, uno maiuscolo e uno minuscolo , come ad esempio A.class e a.class. Su Windows i nomi dei file vengono “visti” senza distinzioni di maiuscole e minuscole, dunque se vado a sostituire il file a.class mi viene sovrascritto sia a.class che A.class. Questo porta alla corruzione dell’archivio e il programma non funzionerebbe più. Allora ho pensato: “su Linux i nomi con maiuscole e minuscole vengono “visti” come nomi diversi, devo fare la sostituzione in ambiente Linux”. Così ho fatto una macchina virtuale con VirtualBox installando Linux Ubuntu. Ci ho portato l’archivio e il file da sostituire ed ho compiuto la sostituzione. Riportato tutto su Windows ho verificato ed ha funzionato!

File .class con lo stesso nome in minuscolo e maiuscolo
File .class con lo stesso nome in minuscolo e maiuscolo

Conclusioni

Ho imparato tanto da questa sfida e sono contento e abbastanza stupito per esserci riuscito. Un cracker esperto probabilmente si metterebbe a ridere vedendo il metodo improvvisato che ho usato, però il tutto ha funzionato. Se qualcuno sa come migliorare la procedura o dare altri consigli aspetto un vostro commento!

 

Edoardo Coen

Sono uno sviluppatore Web. Mi appassiona l'informatica e la tecnologia. Mi piace sperimentare e rendere partecipi gli altri dei miei progetti, dunque ho realizzato questo sito. Spero che in qualche modo ciò che condivido possa essere di aiuto a qualcuno. Approfondisci

Questo articolo ha 5 commenti

  1. Samantha

    Come avresti lavorato su una versione trial a tempo limitato?

    1. Edoardo Coen

      Ciao! Dipende! Sarei andato a cercare nel file decompilato qualche scritta che compare nel massaggio di avviso il quale ti dice che ti rimanono pochi giorni! Ci sono poi programmi che prendono come riferimento la data di installazione sul pc, dunque per eludere il sistema è possibile portare la data del computer 10 anni avanti, installare e tornare alla data odierna, così da avere un trial per 10 anni! Questo sistema potrebbe non funzionare se già hai installato in precedenza lo stesso programma, perchè vengono registrati dei valori nel registro di memoria, dovresti individuare prima questi valori e poi cancellarli a mano (si, l’ho fatto!)

      1. Jonathan

        Per l autore del post:
        Complimenti, l arte di arrangiarsi non è da tutti!
        Mentre per Edoardo: Grande ottima deduzione!
        Non ci avevo ancora pensato

  2. Salvatore

    Grazie sei un mito

Lascia un commento

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.