Zoom Icon

Animagic GIF 1.02

From UIC

Animagic GIF v1.02

Contents


Infos
Author: Pincopall
Email: Pincopall90@hotmail.com
Website: http://pincopall.altervista.org
Date: 30/07/2000 (dd/mm/yyyy)
Level: Very Easy, if you can read this, you can do it
Language: Italian Image:Flag_Italian.gif
Comments: Que: Bravo Pincopall, la protezione non era troppo difficile, ma il tute è adatto ai newbies, mi raccomando però...Cimentatevi sempre con qualcosa che pensate di NON saper crackare!



Introduzione

Il programma in questione permette la creazione di GIF animate (e sta cosa mi sa che la si capiva anche un po' dal titolo no? ;-) da usare poi come meglio si crede (pagine html, sfondo per Windows, ecc...)

Questa è una versione trial, come ho già detto sopra il cui utilizzo scade dopo trenta giorni. Proviamo dunque a farne diventare eterno l'utilizzo!!


Tools


Link e Riferimenti

http://www.rtlsoft.com/animagic


Essay


Ok guys let's go!!

Dunque lanciamo il programma e subito salta fuori una Message Box che ci informa che questa è una versione trial, che la stiamo usando da un tot di giorni sui 30 previsti, e che ci mprega di registrare il programma anche on-line. Dunque questo è il nostro primo obiettivo: l'eliminazione della protezione a tempo.

Dunque apriamo WDasm (lo so che è meglio IDA , ma ora non ce l'ho sottomano) e cerchiamo con "Find Text" il valore esadecimale 0000001E (corrispondente a 30 in numeri decimali) e segnamoci gli indirizzi nei quali 0000001E viene confrontato con qualcosa. Ci saranno tre di questi compare: uno a 0041D3E2, uno a 0041D403 ed uno a 0040F386:


0041D3C1 53 push ebx
0041D3C2 E886010000 call 0041D54D
0041D3C7 59 pop ecx
0041D3C8 A28D334700 mov byte ptr [0047338D], al
0041D3CD 53 push ebx
0041D3CE E884020000 call 0041D657 <-- determina il valore di eax
0041D3D3 59 pop ecx
0041D3D4 A394334700 mov dword ptr [00473394], eax <-- sposta il contenuto di eax
0041D3D9 803D8D33470000 cmp byte ptr [0047338D], 00
0041D3E0 7509 jne 0041D3EB
0041D3E2 833D943347001E cmp dword ptr [00473394], 0000001E <-- confronta il valore con 30
0041D3E9 7E04 jle 0041D3EF <-- e salta se minore o uguale

Dunque, in 0041D3E2 confronta 0000001E con il numero dei giorni da cui noi stiamo usando il programma, voi direte "Oh Pinco e come fai a sapere che in 00473394 ci stà proprio il numero dei giorni ?!?" e io vi risponderò: "Basta aprire SoftIce e guardare cosa è contenuto in 00473394, e così vi accorgerete che lì dentro c'è proprio quello", inoltre come vedete se il numero dei giorni è minore di 30 salta la funzione subito sotto che ci porterà a :

0041D3EF BA01000000 mov edx, 00000001

Referenced by a (U)nconditional or (C)onditional Jump at Address:
0041D3ED(U)
|
0041D3F4 88158F334700 mov byte ptr [0047338F], dl
0041D3FA 803D8D33470000 cmp byte ptr [0047338D], 00
0041D401 7509 jne 0041D40C
0041D403 833D943347001E cmp dword ptr [00473394], 0000001E <-- confronta il numero di gg con 30
0041D40A 7F04 jg 0041D410 <-- e salta se è maggiore


Come vedete se il velore dei giorni sarà maggiore di trenta c'è un bel jg (lump if greater) che ci porterà al messaggio di errore.
Dunque, ci sono vari modi per eliminare questa protezione a tempo, io ho scelto quello che per me è il più elegante, ovvero andare a modificare la call all'indirizzo 0041D3CE che determina il valore di eax, ovvero dei giorni di uso, infatti vedete che il contenuto di 00473394 non è nient'altro che il vontenuto di eax per merito di quel mov a 0041D3D4.
Andiamola dunque ad esaminare:

Jump at Address : 0041D3ED(U)
|
0041D712 85FF test edi, edi
0041D714 7507 jne 0041D71D <---- salta se edi è diverso da edi
0041D716 B80F270000 mov eax, 0000270F <---- da un valore ad eax
0041D71B EB2E jmp 0041D74B <---- salta alla fine della call


questa è dunque la parte che ci interessa, infatti il salto incondizionato ci porta direttamente alla conclusione della call, dunque questa è la parte che ci interessa essendo l'ultima in cui viene toccato eax, a questa parte ci si arriva per forza poiché qui ci portano, come potete vedere, due salti incondizionati, per arrivare però a quel mov e di seguito a quel jmpo, bisogna togliere di mezzo quel jne 0041D71D, e per farlo, che cosa meglio di un bel nop? andiamo dunque a cambiare con l'editor esadecimale quel 7505 con un bel 9090.
Ora dunque dobbiamo mettere in eax un valore che riamrrà fisso e che quindi ci farà diventare eterna la versione trial, dunque andiamo di nuovo nel nostro editor esadecimale e cambiamo quel B80F270000 con un bel B800000000 (se volete che il programma pensi che lo stiate usando da zero giorni, ovvero per la prima volta) oppure con un bel B801000000 se volete che pensi di essere usato da un giorno e così via, ovviamente tale numero deve essere minore o uguale a 0000001E.
Ok, il primo passo l'abbiamo fatto, abbiamo tolto la protrezione a tempo e il programma, se abbiamo messo zero giorni di utilizzo, ci darà anche il ben arrivati, altrimenti ci dirà che lo stiamo usando da un tot di giorni (che rimarrà fisso) sui trenta previsti.

Noi però vogliamo di più!! Vogliamo anche la registrazione vero?

Bene, una volta entrati nel programma andiamo su Help e clikkiamo su "Enter name and password", dunque inseriamo il nostro nome: "Pincopall", la nostra compagnia: "Pincoz s.p.a." ed il nostro serial "11223344", clikkiamo ed ovviamente compare la beggar off che ci dice che la password non è valida e che per questo la registrazione non può avvenire.
Bene, ora riapriamo WDasm e cerchiamo sia il messaggio di errore della beggar off che il messaggio che ci apparirebbe se il codice da noi immesso fosse giusto, ed infatti in "String Data Reference" dal menù Refs troviamo un bel " Thank you for registering " nonché un bel " Registration failed: invalid password ".
Okkei dunque clikkiamo due volte su quest'ultimo ovvero sul messaggio della beggar off, e vediamo questo:

Jump at Address : 004202B0(C) <-- Dunque è questo il salto che ci interessa
andare a trovare (speriamo sia in casa!;-)
00420322 8B06 mov eax, dword ptr [esi]
00420324 6A00 push 00000000
00420326 6A00 push 00000000

Possible StringData Ref from Data Obj ->"Registration failed: Invalid Password"
|
00420328 68B3944600 push 004694B3
0042032D FF700C push [eax+0C]
00420330 FF7068 push [eax+68]
00420333 E8F2330200 call 0044372A
00420338 83C414 add esp, 00000014

Okkei allora eccoci a tale saltino:

0042029D 56 push esi
0042029E E8AAD2FFFF call 0041D54D
004202A3 59 pop ecx
004202A4 A28D334700 mov byte ptr [0047338D], al <-- muove il contenuto di al
004202A9 803D8D33470000 cmp byte ptr [0047338D], 00 <-- e lo confronta con 0
004202B0 7470 je 00420322 <-- salta se al=00
004202B2 C6059033470000 mov byte ptr [00473390], 00
004202B9 681C304700 push 0047301C
004202BE 687D314700 push 0047317D

Allora, come vedete si tratta di un jump if equal che se salta, quindi se il primo byte di 004733BD, che poi non è altro che il contenuto di al, è uguale a zero, ci manda al messaggio di errore. Dunque, qui potremmo fare in due modi, o noppando quel bel saltuzzo lì sostituendo quel 7470 con un bel 9090, oppure potremmo sostituiree il valore di al che viene determinato da quella call a 0042029E con un valore fisso ovviamente diverso da zero, il ragionamento che va fatto qui è uguale a quello di prima che riguardava la protezione a tempo.
Se infatti tale salto non viene eseguito ecco che arriviamo di filata al messaggio di ringraziamento.

Ok, dunque ora siamo anche registrati, se però avviamo il proggy, vediamo che nonostante ora ci prenda qualsiasi seriale e ci consideri registrati, ci viene sempre mostrata la Message Box che ci dice da quanti giorni stiamo usufruendo gratuitamente del programma.
E a noi questa Message Box da fastidio vero?

Bene: ( per quelli che hanno risposto "no") : tenetevelo così.

Bene: ( per quelli che hanno risposto "si") : continuate a seguire 'sto tute. =)

Allora, andiamo a cercare la call che ci fa apparire tale Message Box all'inizio del programma, il codice che dovrei riportare qui lo ho già riportato sopra, la call in questione è infatti la chiamata a 0041D54D che si trova all'indirizzo 0041D3C2, per non farapparire più tale message box ci basta solo noppare la chiamata, ci apparirà ora, una volta noppata la call, all'inizio del programma una nuovaMessage Box che ci informerà che questo programma è registrato a nome di "Pincopall" della "Pincoz s.p.a." e sotto vedremo che ci chiederà : " Volete che io non appaia più all'inizio del programma ? ", bene qui potete ovviamente fare quello che volete, però secondo me è bello vedere che un programma si ritiene registrato e si vanta di esserlo ;-)

Bene, con questo abbiamo finito, ora abbiamo eliminato la protezione a tempo, ci siamo registrati ed abbiamo fatto si che il programma ci dicesse di essere registrato.

Alla prossima, ciauzzzzzzz

Pincopall


Note Finali

Spero di essere stato chiaro, comunque se ci sono dei problemi la mia e-mail la conoscete. Per concludere voglio salutare tutti i componenti della UIC e della ML nonché del canale #crack-it. Ringrazio in particolar modo _ph0b0s_ (che in questi giorni mi sopporta sul canale hihihi), e AndreaGeddon (che dà una mano a ph0b0s ;-)).

Un saluto mui spieciale va anke a Bebos, Nio (Forza ragazzi che il progetto andrà in porto !! ) e Desideria.


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.