Zoom Icon

Understand for Java

From UIC

Understand for Java

Contents


Infos
Author: Johan Padan
Email: Email
Website: Home page
Date: 04/06/2005 (dd/mm/yyyy)
Level: Half brain is enough
Language: Italian Image:Flag_Italian.gif
Comments:



Introduzione

Stavo cercando in internet un ambiente di sviluppo per Java ed ho trovato questo "undestand for java" che con quello che costa ho subito pensato potesse fare tutto lui al mio posto. Speriamo che il costo sia direttamente proporzionale alle effettive capacità di questo IDE.


Tools & Files


URL o FTP del programma


Essay

Il programma è in versione trial per 15 giorni e si riceve un e-mail con il relativo codice di attivazione. Aprendolo con Peid vedo che è scritto in Visual C++ 6 e non è packed. Faccio partire il programma e nella sezione dedicata alla registrazione del prodotto si vede che per il codice di attivazione definitivo verrà mandato un key file. Appartengo ancora a pieno titolo alla categoria "aspiranti newbies" è meglio che cerchi una strada più semplice provando a rendere illimitata la versione trial.

Apro il programma con OllyDbg e metto dei breakpoint sulle classiche API GetLocalTime, GetTickCount e GetSystemTime per vedere che cosa posso ricavarne ma il sistema si blocca e non riesco a debuggare; riesco a proseguire solo attivando il plug-in IsDebuggerPresent: Hide.

E' strano vado a controllare ma non c'è nessuna chiamata all'API di Windows IsDebuggerPresent peraltro per continuare il lavoro devo continuamente attivare quest'opzione. Dall'analisi delle precedenti chiamate alle API non riesco a ricavare niente (ovviamente per le mie misere conoscenze nell'arte del reverse engineering).

Proviamo a cercare in All referenced text string e trovo "evaluatione has expired". In prossimità di questo codice trovo "Licensing", "If you need more time for evaluation..." . L'unica mia possibilità è quella di mettere un breakpoint all'inizio di questa procedura e siccome il programma non è ancora scaduto segnarmi i je/jne che esegue/non esegue fino all'avvio del programma e trasformare i salti condizionali in jmp mentre dove non esegue nessun salto condizionale noppare e lasciare fluire il programma (ho letto su un tute della Uic che questa tecnica è quella del boscaiolo; non credo ci sia nulla da aggiungere :)

Per cui dall'istruzione:



005A6B2B JNZ TAKEN //trasformato in JMP
005A6C88 JE TAKEN //trasformato in JMP
005A6D04 JE NOT TAKEN //trasformato in NOP
005A6D2B JE NOT TAKEN //trasformato in NOP
005A6DA2 JE NOT TAKEN //trasformato in NOP
005A6DEE JE TAKEN //trasformato in JMP
006EB232 JNZ TAKEN //trasformato in JMP
006EB24C JE NOT TAKEN// noppato
006EB25A JE NOT TAKEN //noppato
006EB269 JE TAKEN //trasformato in JMP

A questo punto il programma funziona anche se continua ad apparire la nag screen con scritto "expired"; metto un bpx su EnableWindow e mi trovo all'interno della routine che gestine la nag screen. Mi porto all'inizio della procedura e con tre salti (come a damone) la elimino.


007253CF JMP
00725751 JMP
00725798 JMP

Faccio un paio di verifiche spostando l'orologio di sistema e tutto funziona. "Chiedo venia " a tutti gli informatici.

Mostrare un'immagine


Note Finali

In primis un ringraziamento al Magnifico Rettore senza il suo sito non avrei potuto imparare niente (non so se dopo aver letto il tute sia il caso di creare una sotto sezione newBies), un grazie a tutti coloro che pubblicano i tute sulla Uic e sono disposti a condividere le loro conoscenze con gli aspiranti reverser ed infine un bacio a N. moglie perfetta e impareggiabile amante.

Johan Padan


Disclaimer

I documenti qui pubblicati sono da considerarsi pubblici e liberamente distribuibili, a patto che se ne citi la fonte di provenienza. Tutti i documenti presenti su queste pagine sono stati scritti esclusivamente a scopo di ricerca, nessuna di queste analisi è stata fatta per fini commerciali, o dietro alcun tipo di compenso. I documenti pubblicati presentano delle analisi puramente teoriche della struttura di un programma, in nessun caso il software è stato realmente disassemblato o modificato; ogni corrispondenza presente tra i documenti pubblicati e le istruzioni del software oggetto dell'analisi, è da ritenersi puramente casuale. Tutti i documenti vengono inviati in forma anonima ed automaticamente pubblicati, i diritti di tali opere appartengono esclusivamente al firmatario del documento (se presente), in nessun caso il gestore di questo sito, o del server su cui risiede, può essere ritenuto responsabile dei contenuti qui presenti, oltretutto il gestore del sito non è in grado di risalire all'identità del mittente dei documenti. Tutti i documenti ed i file di questo sito non presentano alcun tipo di garanzia, pertanto ne è sconsigliata a tutti la lettura o l'esecuzione, lo staff non si assume alcuna responsabilità per quanto riguarda l'uso improprio di tali documenti e/o file, è doveroso aggiungere che ogni riferimento a fatti cose o persone è da considerarsi PURAMENTE casuale. Tutti coloro che potrebbero ritenersi moralmente offesi dai contenuti di queste pagine, sono tenuti ad uscire immediatamente da questo sito.

Vogliamo inoltre ricordare che il Reverse Engineering è uno strumento tecnologico di grande potenza ed importanza, senza di esso non sarebbe possibile creare antivirus, scoprire funzioni malevoli e non dichiarate all'interno di un programma di pubblico utilizzo. Non sarebbe possibile scoprire, in assenza di un sistema sicuro per il controllo dell'integrità, se il "tal" programma è realmente quello che l'utente ha scelto di installare ed eseguire, né sarebbe possibile continuare lo sviluppo di quei programmi (o l'utilizzo di quelle periferiche) ritenuti obsoleti e non più supportati dalle fonti ufficiali.