Apycom Cracking

Data

by epokh

�

10/12/2004

UIC's Home Page

Published by Quequero

Invece, essendo povero, ho soltanto sogni;

E i miei sogni ho steso sotto i tuoi piedi;

Grazie epo ottimo lavoro

Cammina leggera, perchè cammini sui miei sogni.

William Butler Yeats

....

 
E-mail: [email protected]

....

Difficolt�

( )NewBies (X)Intermedio ( )Avanzato ( )Master

�
�

Introduzione

In questo tutorial esaminiamo il sistema di protezione di un insieme di applet, chiamate Apycom Java Menus and Buttons, sviluppate appunto dalla Apycom.

Tools usati


IntelliJ Idea 4.5 e DjDecompiler
#

URL o FTP del programma

Le Apycom Applet Menu si possono trovare facilmente con Google.
L'applet esaminata è apImageMenu
L'applet "modificata" è CrackMenu

Notizie sul programma

Le Apycom Applet Menu sono applet che implementano menu di vari tipi e si possono usare in un sito web per la navigazione.

Essay

Le applet sono contenute in un file di installazione, quindi dopo aver installato il pacchetto apriamo il file index.html per vedere la documentazione. Le applet fornite dalla Apycom sono 18, tutte uguali nelle funzionalità ma diverse per nell'interfaccia. Purtroppo tutte queste belle applet ci vengono fornite in prova di valutazione per 30 giorni durante i quali saremo costretti a vedere sporadicamente il banner Trial Version con l'indirizzo web della Apycom.
La apycom precisa il contratto di prova: le applet devono essere provate per 30 giorni solo in locale, se dopo i 30 giorni l'utente non acquista la licenza ma usa in un sito pubblico le applet il contratto è invalidato.
Alcune domande sorgono spontanee:
1. Come fa la Apycom a sapere quando ho iniziato ad usare le applet?
2. Come fa la Apycom a controllare sul web quali applet hanno la licenza e quali non? (con dei web-spider? immagino di no!)
Una volta acquistata la licenza, all'utente viene fornito un codice da inserire nei parametri dell'applet per eliminare il fastidioso banner di Trial Version.

Intenzionati ad eliminare questo limite ed un altro che scopriremo dopo, scegliamo un applet a caso fra le 18: apImageMenu. La cartella relativa all'applet si trova nella cartella di installazione del pacchetto e si chiama image-web-buttons. I file che interessano a noi sono il bytecode dell'applet apImageMenu.class e le risorse usate dall'applet che si trovano nella cartella pix. I parametri di cui l'applet ha bisogno sono descritti nella relativa pagina di esempio e sono quelli in tabella:

<applet code=apImageMenu.class Width=130 Height=135>
<a href=http://www.apycom.com>Apycom Java Applets</a>
<param name="Copyright" value="Apycom.com"> <- Il copyright dell'applet
<param name="alignText" value="left">
<param name="backPic" value="pix/back70.gif">
<param name="defaultImage" value="_,pix/itemsel.gif">
<param name="backColor" value="ffffff">
<param name="backHighColor" value="ffffff">
<param name="fontColor" value="000000">
<param name="fontHighColor" value="000000">
<param name="status" value="link">
<param name="font" value="Arial,10,1">
<param name="menuItems" value=" <- La lista dei link bottoni con le icone
{ Hack Home,http://www.hackerjournal.it,_self,_,pix/item11.gif}
{ Voce1,index.html,_self,_,pix/item21.gif}
{ Voce2,index.html,_self}
{ Parametri,params.html,_self}
{ Esempi,ex1.html,_self}
{ Contattami,mailto:[email protected],_self,_,pix/item31.gif}">
</applet>

I parametri da passare sono di tre tipi:

1. informazioni sul copyright nel parametro chiamato "Copyright"
2. informazioni per la presentazione: colori per lo sfondo, per i caratteri, il tipo di font ecc.
3. informazion per le voci del menu nel parametro chiamato "menuItems"
Un limite ulteriore dell'applet che non ci piace è quello sul copyright, se infatti nel valore del parametro inseriamo un valore diverso da Apycom.com l'applet risponde con un incorrect copyright:
 

Il nostro lavoro di reversing inizia con la decompilazione della applet apImageMenu.class con il fido DjDecompiler. Poi con IntelliJIdea costruiamo un nuovo progetto di tipo Applet in cui aggiungiamo il sorgente apImageMenu.java e la cartella delle risorse pix. L'esecuzione dell'applet da parte dell'ambiente richiede la definizione dei parametri nel menu Run->Edit Configurations, in questo modo non è necessaria la pagina HTML per lanciare l'applet e possiamo modificare velocemente i parametri. Ricompiliamo l'applet per accertarci che il tutto funzioni: i warning che ci vengono segnalati sono relativi all'uso di metodo e componenti deprecati dalle nuove versioni di Java.

Ora esaminiamo il sorgente: la classe apImageMenu eredita dalla classe Applet come ci si aspettava ed implementa l'interfaccia Runnable per gestire il multithreading.Gli identificatori dei metodi e degli attributi hanno nomi strani in modo da ostacolare il reversing e generare confusione, ma noi non ci lasciamo certo intimorire. Il diagramma UML mostra in modo semplice le relazioni descritte:

L'ambiente JIdea ci fornisce una descrizione analitica della classe con la possibilità di selezionare il livello di dettaglio: per adesso selezionamo solo i metodi di apImageMenu senza gli attributi e i metodi ereditati dalle altre classi ma non implementati. Alcuni metodi hanno nomi strani ma quelli noti sono:

I metodi della classe Applet:
1.public void start(): chiamato per riavviare un applet dopo che è stata fermata oppure ogni volta che viene visualizzata la pagina che contiene l'applet.
2.public void stop(): chiamato quando il browser lascia la pagina che contiene l'applet.

3.public void paint(Graphics g): chiamato ogni volta che l'applet deve visualizzare il suo output
I
Il metodo dell'interfaccia Runnable public void run(): lancia il lavoro del Thread chiamato III.
Il primo passo è individuare il metodo nel quale apImageMenu recupera i parametri passatigli dal browser: la classe Applet fornisce allo scopo il metodo public String getParameter(String name). Troviamo le occorrenze della chiamata a getParameter nel sorgente e vediamo che tutte le chiamate vengono effettuate nel metodo public void IIll():
Il primo parametro che viene controllato è quello del copyright, un bel commento alle due righe e il controllo non viene più effettuato:
Il metodo che visualizza il messaggio di errore "Incorrect Copyright" è public synchronized void IlI1().
Il modificatore synchronized indica la mutua esclusione nella chiamata di questo metodo da parte di più thread concorrenti, questo per garantire una corretta sincronizzazione dei thread.
Questo metodo è chiamato da public void IIll() dopo il recupero dei parametri e controlla la variabile llll di tipo bool che segnala se il copyright è corretto oppure no. Poichè noi abbiamo posto che llll=true in ogni caso il messaggio non verrà visualizzato.
Ora il nostro obiettivo è quello di trovare il metodo in cui viene effettuato il controllo sul seriale, ovvero dobbiamo trovare una chiamata del tipo getParameter("key") in cui key è il nome del parametro in cui si deve inserire il seriale una volta acquisita la licenza.
Problema: nel sorgente della classe la chiamata non c'è!! Come è possibile?
I programmatori della Apycom hanno usato un modo alternativo per leggere il valore del parametro. Tuttavia la scritta TRIAL VERSION da qualche parte deve pur stare per essere visualizzata. Però magari per ingannarci potrebbe essere cifrata in qualche modo. Per questo motivo ci mettiamo a cercare tutte le string o le costanti string che ci sono nel sorgente con l'apposita funzione di IntelliJ e alla fine troviamo una stringa interessante:
L'oggetto IlI di tipo Graphics disegna:
a) un rettangolo pieno colorato di bianco
b) due stringhe di colore nero che chiamo x= "UTLBN#WGUTKRO" ed y="xyz/cszern0fpo" tramite il metodo drawString(String s,int x,int y) .
La lunghezza delle due stringhe è abbastanza eloquente: lunghezza(x)=lunghezza(TRIAL VERSION) e lunghezza(y)=lunghezza(www.apycom.com).
Abbiamo trovato quindi la parte di codice che disegna il banner TRIAL VERSION.
Le stringhe vengono decifrate dal metodo String I(String s) della classe:
La verifica si può fare impostando un breakpoint su return new String(ac) e verificando il valore della stringa ac:
che è proprio quello cercato!
Per eliminare il controllo sul seriale basta commentare le righe relative al disegno del banner e cioè:
In fine ricompiliamo il tutto ed avremo la nostra applet completamente funzionante!
I programmatori della Apycom, per risparmiare tempo, hanno "protetto" tutte le altre applet allo stesso modo! :-(
Allenatevi quindi anche con le altre per fare un pò di pratica.
���������������������������������������������������������������������������������������������������������������� ..::EPOKH::..

Note finali

Un consiglio: le modifiche apportate al codice sorgente reversato dovrebbero essere minime e meno invasive possibili, altrimenti si rischia di compromettere il funzionamento dell'applicazione.

Un osservazione: comprendere il funzionamento di un applicazione solo ed esclusivamente dal codice sorgente non commentato è difficile. Questa è la difficoltà che contraddistingue il reversing in Java.

Disclaimer

Vorrei ricordare che il software va comprato e� non rubato, dovete registrare il vostro prodotto dopo il periodo di valutazione. Non mi ritengo responsabile per eventuali danni causati al vostro computer determinati dall'uso improprio di questo tutorial. Questo documento � stato scritto per invogliare il consumatore a registrare legalmente i propri programmi, e non a fargli fare uso dei tantissimi file crack presenti in rete, infatti tale documento aiuta a comprendere lo sforzo che ogni sviluppatore ha dovuto portare avanti per fornire ai rispettivi consumatori i migliori prodotti possibili.

Reversiamo al solo scopo informativo e per migliorare la nostra conoscenza del linguaggio Assembly.�