Zoom Icon

Opera 3 60

From UIC

Opera 3.60 Cracking

Contents


Opera 3 60
Author: phobos
Email: phobos333 -at- email -dot- it
Website: P.H.R.E.W (Actually Offline)
Date: 01/06/2006 (dd/mm/yyyy)
Level: Working brain required
Language: Italian Flag Italian.gif
Comments: Un tutorial sul come crackare Opera 3.60



Introduzione

Eccoci di nuovo qui... state tutti bene? Spero di si... Questo tute nasce dalla necessita' di utilizzare un browser affidabile per internet... in una fredda serata invernale, stanco dei continui crash del Netscape Navigator, prevenuto in partenza nell'utilizzo del Micro$oft Explorer... ho scoperto un browser di modeste dimensioni, potente, stabile, intuitivo... Che altro dire... Andiamo a vedere di che si tratta...


Tools

Piccola nota: questo tute e' stato scritto nel lontano 2000, alcuni di questi tool non sono piu' disponibili, quindi linkero' quelli reperibili attualmente.

Qualche minuto di tempo... Se fumate...le vostre sigarette preferite :-)



Notizie sul Programma


Proprio come detto prima, Opera sta diventando il browser piu' usato da chi su Internet oramai ci 'sguazza'. Non ci credete? Chiedete a Quequero, a TiN_MaN o a chi reputate piu' all'altezza di voi o di me.... ;-) Si tratta di un browser veloce, intuitivo, facilmente programmabile, stabile, e cosa piu' importante di piccole dimensioni... vi chiederete a questo punto, 'che me ne sbatto se e' piccolo, ho un HD da 47 Giga, volendo ci posso caricare su anche phobos!!!'... piano... piano... innanzitutto, non so se vi conviene 'installarmi' sul vostro HD (sono piu' rompipalle di un virus :-)) e poi, per citare una frase fatta: "... We'll never damage Xxxxxxxxx interests enough to compensate for this moronic situation... where you have to wait three minutes to get on screen a wordprocessor that older OS (and even old DOS) kick up in 5 seconds..." che vuol dire? Vuol dire che oggi con computers che hanno potenza di calcolo centinaia di volte superiore a quelli di qualche anno fa (i286, i386) si deve aspettare molto di piu' a fare cose che con quei computer molto meno potenti erano quasi 'immediate'... Le memorie scendono di costo, i processori sono in saldo, gli HD hanno raggiunto dimensioni da fantascienza rispetto a quando interi programmi stavano su un floppy da 740 Kbyte... di conseguenza, i programmi sono diventati smisuratamente grandi, per 'sfruttare a pieno' queste risorse 'a buon mercato'... Non franintendetemi, non sono un nostalgico rincoglionito dei vecchi 386 o del vecchio WP...e' solo che, perche' devo utililizzare un programma di 400 Megabyte, quando ce n'e' uno di 5 che fa le stesse cose, magari meglio? E soprattutto (vista la 'leggerezza' del programma) piu' velocemente? E' il caso di Opera. Non dico altro...

Il programma in esame e' un Internet browser (lo abbiamo gia' detto? ;-)). Il meccanismo di protezione e' di tipo 'cinderella', scade cioe' dopo trenta giorni, trascorsi i quali, se non si registra il programma, non e' possibile visitare altri siti all'infuori di quello di Opera, dove si deve andare a registrare il software. Durante il primo avvio del programma, subito dopo l'installazione, ci appare una 'Nag screen' in cui si possono scegliere delle opzioni, tra cui registrare il programma o valutarlo. Ai successivi riavvii, la nag cambia, e oltre a darci la possibilita' di registrare il programma, ci informa anche di quanti giorni sono rimasti prima dello scadere del periodo shareware... CHE STRESS 'STI CONTI ALLA ROVESCIA!!!! Ora lo ammazziamo!!


Essay


Innanzitutto, spostiamo la data del sistema operativo qualche mese avanti nel tempo e vediamo come si comporta il programma... Ok... scaduto...

- Digressione -

Quando per la prima volta effettuai questa procedura, tutti pulsanti ad icona del programma furono sostituiti da delle specie di reticoli a crocette, con il risultato che non erano piu' visibili le loro funzioni... cosa molto fastidiosa, risolsi egregiamente il problema, disinstallando e reinstallando il programma... che rimase sempre scaduto, ma le icone tornarono nuovamente visibili. Se vi accingete a craccarlo prima dello scadere del tempo, questa procedura non e' necessaria... come dite? Dovevo dirvelo prima di settare la data avanti? Ooopss!! ;-p Ve l'ho detto che sono piu' rompipalle di un virus!!! :-)

- Fine Digressione -

Provando ad avviarlo comunque, cliccando sull'icona bianca a sinistra della barra di stato che ci avverte che il prog. e' scaduto, si entra nel programma. Proviamo a visitare un sito, immettiamo un url qualunque... Il programma ci avverte con una nag che e' scaduto ('This evaluation version has expired.') e che si puo' solo andare sul suo sito... Le informazioni in nostro possesso sono sufficienti per il nostro 'attacco'...

Disassembliamo il programma con il wdasm, e cerchiamo (con il 'Find text') la parola: 'expired', arriviamo in questo punto del codice:


:00405E60 push esi
:00405E61 mov esi, ecx
:00405E63 mov ecx, dword ptr [0051171C]
:00405E69 call 00460F57
:00405E6E test eax, eax
&#58;00405E70 je 00405E84 <--- Nota
&#58;00405E72 mov eax, dword ptr [esi]
&#58;00405E74 mov ecx, esi
&#58;00405E76 call [eax+54]
&#58;00405E79 test eax, eax
&#58;00405E7B jne 00405E84 <--- Nota

° Possible Reference to String Resource ID=32889&#58; "This evaluation version has expired."
|

&#58;00405E7D mov eax, 00008079 <--- Viene 'pushata' la stringa qui sopra
&#58;00405E82 pop esi
&#58;00405E83 ret

Se non vengono eseguiti i due salti evidenziati (cosa che accade allo scadere del periodo trial) vengono passati i parametri alla message box che ci avvisa del fatto che il prog e' scaduto e che ci impedisce di visitare altri siti. Il primo intervento consiste nel cabiare il secondo salto (e' sufficiente ai nostri fini intervenire solo su questo, e soprattutto e' anche piu' semplice da 'patchare') da JNE in JMP (condizionale in assoluto), a tale scopo, con l'hex editor, combiamo, all'offsett in cui ci troviamo '75 07' in 'EB 07' (nel caso di questo programma, e' sufficiente eliminare dall'indirizzo fornitoci in wdasm il quattro a sinistra: Address :0041FBAA -> Offset 1FBAA. Semplice no? ;-)).

A questo punto, la piu' grossa limitazione del programma e' stata eliminata, resta da rifinire il tutto, eliminando la nag iniziale.

Per far questo, andiamo nuovamente in Wdasm e cerchiamo la stringa 'Your timed evaluation has', che non e' altro che una delle stringhe contenute nella nag iniziale, dove ci viene comunicato quanto tempo ci e' rimasto per valutare il programma e bla, bla, bla!! Arriviamo in questo frammento di codice:


&#58;00491590 push 00000100
&#58;00491595 mov dword ptr [ebp+08], eax
&#58;00491598 lea eax, dword ptr [ebp+FFFFFEF0]
&#58;0049159E push eax

° Possible Reference to Dialog&#58; SERNO_NAG, CONTROL_ID&#58;2B92, "Your timed evaluation has %i days l"
|

&#58;0049159F mov ebx, 00002B92 <--- Arriviamo esattamente qui.
&#58;004915A4 push ebx
&#58;004915A5 push edi

° Reference To&#58; USER32.GetDlgItemTextA, Ord&#58;0104h
|

&#58;004915A6 Call dword ptr [004F6510]
&#58;004915AC push [ebp+08]

Che bello!! Se proviamo a guardare immediatamente sopra e sotto al punto in cui ci troviamo nel wdasm, possiamo vedere tutte le reference ai pulsanti ed alle stringhe presenti nella nostra nag... Io vi riporto la parte superiore, che e' quella che ci interessa:


° Possible Reference to Menu&#58; MenuID_0004
|

&#58;00491559 push 00000004
&#58;0049155B lea eax, dword ptr [ebp-10]
&#58;0049155E push eax
&#58;0049155F push edi

° Possible Reference to Dialog&#58; SERNO_NAG, CONTROL_ID&#58;2B8E, "Help" <--- Nota
|

&#58;00491560 mov [ebp-10], 00002B8E

° Possible Reference to Dialog&#58; SERNO_NAG, CONTROL_ID&#58;2B8F, "Eval" <--- Nota
|

&#58;00491567 mov [ebp-0C], 00002B8F

° Possible Reference to Dialog&#58; SERNO_NAG, CONTROL_ID&#58;2B90, "Purchase" <--- Nota
|

&#58;0049156E mov [ebp-08], 00002B90

° Possible Reference to Dialog&#58; SERNO_NAG, CONTROL_ID&#58;2B91, "Register" <--- Nota
|

&#58;00491575 mov [ebp-04], 00002B91
&#58;0049157C call 00491B92
&#58;00491581 mov eax, dword ptr [0051171C]
&#58;00491586 mov ecx, dword ptr [eax]
&#58;00491588 add esp, 0000000C
&#58;0049158B call 004BD248

I riferimenti evidenziati, si rifescono tutti ad una dialog chiamata 'SERNO_NAG', se andate a vedere con un programma che permette di disassemblare tutte le resource presenti in un eseguibile, tipo Exescope (lo trovate su http://ringzer0.cjb.net, o sul sito di Quequero tra i tools), potrete notare che la nostra serno_nag e' proprio la nag che appare all'inizio del programma. Ora dobbiamo 'risalire' il codice, per vedere dove questa nag viene chimata:


° Referenced by a CALL at Address&#58;
|&#58;0049148F
|

&#58;004914FE push ebp <--- Questa e' la prima reference utile da andare ad analizzare
&#58;004914FF mov ebp, esp
&#58;00491501 sub esp, 00000110
&#58;00491507 push ebx
&#58;00491508 push esi
&#58;00491509 push edi
&#58;0049150A mov edi, dword ptr [ebp+08]
&#58;0049150D xor eax, eax
&#58;0049150F push eax
&#58;00491510 push eax
&#58;00491511 push eax
&#58;00491512 push eax
&#58;00491513 push edi
&#58;00491514 call 00425E09
&#58;00491519 push edi
&#58;0049151A call 00425A89

° Reference To&#58; USER32.GetDlgItem, Ord&#58;0102h
|

&#58;0049151F mov esi, dword ptr [004F6540]
&#58;00491525 add esp, 00000018
&#58;00491528 push 00002B93
&#58;0049152D push edi
&#58;0049152E call esi

° Reference To&#58; USER32.SetWindowLongA, Ord&#58;0258h
|

&#58;00491530 mov ebx, dword ptr [004F64BC]
&#58;00491536 push 00491C89
&#58;0049153B push FFFFFFFC
&#58;0049153D push eax
&#58;0049153E mov dword ptr [005114A4], eax
&#58;00491543 call ebx
&#58;00491545 mov dword ptr [005114B4], eax
&#58;0049154A call 00491CE8
&#58;0049154F push 00491609
&#58;00491554 push FFFFFFFC
&#58;00491556 push edi
&#58;00491557 call ebx

Quindi, come potete vedere, l'indirizzo :004914FE, viene chiamato da una call situata in :0049148F, andiamo in quel punto del codice e vediamo che possiamo fare...


&#58;00491486 push [ebp+14]
&#58;00491489 push [ebp+10]
&#58;0049148C push [ebp+08]
&#58;0049148F call 004914FE <--- Questa e' la CALL 'incriminata'
&#58;00491494 add esp, 0000000C
&#58;00491497 jmp 004914F9

Dobbiamo 'patchare' anche questa call, come? Ma la Nopizziamo!!! All'offsett del file in esame, inseriamo cinque bei Nop (codice di istruzione 90) cosi' patchiamo la call che non verra' piu' eseguita e non imputtaniamo troppo il codice (tanto non ha CRC check...e gia' e' qualcosa!).

Proviamo a riavviare il programma... CAKKIO!!! la nag e' scomparsa ma appare comunque quella che si vedeva al primo avvio!!! Infatti. Il programma, 'crede' di essere sempre al primo avvio, cosi' ci avvisa che possiamo valutarlo o registrarlo. Vogliamo togliere dai piedi questa ultima nag?? Of course!! ;-) A questo punto ci occorre l'intervento del SoftICE. Avviamo il debugger (mi sembra riduttivo chiamarlo cosi', visto che piu' che un debugger e' un tesoro...se avesse le tette me lo scoperei!!! ;-)) e inseriamo un bel breakpoint sulla funzione che dovrebbe generare questa nag, che non e' altro che una dialog box: bpx DialogBoxParamA... Avviamo il programma, l'ice 'poppa' fuori piu' di una volta, ma a noi interessa che intervenga il momento prima della creazione della nostra nag, cosi' usciamo dall'ice (con F5) fino a che non vediamo che Sice poppa fuori immediatamente dopo l'apparizione dello 'scheletro' della nostra nag....Hi Hi Hi! :-] Siamo nel codice che si occupa della creazione della finestra in esame... piazziamo un break su una istruzione immediatamente successiva a dove ci troviamo (non mi chiedete dove, l'importante e' piazzarlo prima della successiva call, altrimenti, la nag viene fuori, l'ice non poppa piu' e dovete ricominciare tutto da capo) usciamo dall'ice, ritorniamo sul punto dove avevamo inserito il break, riusciamo dall'ice... Siamo sulla nag... Clicchiamo su 'Evaluate' l'ice prontamente reinterviene... usciamo dalla subroutine in cui ci troviamo (F11), avendo avuto cura di disabilitare il secondo breakpoint che avevamo settato, e ci troviamo 'magicamente' nel punto esatto in cui viene creata la nostra nag... ;-) prendiamo nota dell'indrizzo in memoria in cui c'e' la Call alla funzione DialogBoxParam, disabilitiamo tutti i break point, usciamo dall'ice e convertiamo l'indirizzo relativo nel file offset. Se non siete in grado di farlo a mano, se siete in grado di farlo ma non avete voglia,  :-) potete sempre utilizzare il programma 'Virtual address to file offset utility' di Iczelions, otteniamo l'offset del file Opera.exe, andiamo a questo punto nel disassemblato del wdasm e cerchiamo questo offset (tenendo presente che ci appare scritto nella finestra del programma, in basso, quello relativo ad ogni linea di codice su cui ci troviamo), arriviamo in questo punto...


° Possible StringData Ref from Data Obj ->"°"
|

&#58;00491347 push 00507C80
&#58;0049134C push eax
&#58;0049134D call 00424635
&#58;00491352 cmp esi, ebx
&#58;00491354 pop ecx
&#58;00491355 pop ecx
&#58;00491356 je 00491388
&#58;00491358 push [ebp+10]
&#58;0049135B lea eax, dword ptr [ebp-40]
&#58;0049135E push esi
&#58;0049135F push [ebp+08]
&#58;00491362 push eax
&#58;00491363 push dword ptr [00510F18]

° Reference To&#58; USER32.DialogBoxParamA, Ord&#58;0093h
|

&#58;00491369 Call dword ptr [004F658C] <--- Eccola qua!!
&#58;0049136F xor ecx, ecx
&#58;00491371 cmp eax, FFFFFFFF
&#58;00491374 setne cl
&#58;00491377 push 00000040
&#58;00491379 lea eax, dword ptr [ebp-40]
&#58;0049137C push ebx
&#58;0049137D push eax
&#58;0049137E mov edi, ecx
&#58;00491380 call 004E73D0
&#58;00491385 add esp, 0000000C

Quella evidenziata e' la chiamata alla nostra nag screen iniziale (per essere piu' precisi: alla nostra Dialog Box), per eliminarla, e' sufficiente 'Nopare' la call, avendo pero' l'accortezza di noppare anche le quattro istruzioni di Push che la precedono, poiche', riguardando queste ultime il Base Pointer, il Source Index ed esendo i valori contenuti nei vari registri 'poppati' fuori solo alla fine della procedura chiamata da questa call (che, chiaramente, non essando piu' eseguita, non poppa fuori piu' un cz!!!) se non le nopate, vi si sputtanano gli indirizzi del programma che vi crashera' malamente... Le istruzioni da inserire, partendo dall'offset del primo push in :0049135E sono diciassette Nop (sempre codice di istruzione 90)... poco elegante come patch, ma funzionale!!! In ultima analisi vichiederete, perche' i push prima di questa call vanno nopati e quelli prima della call che abbiamo noppato sopra no? Domanda lecita ed appropriata. Semplicemente perche' i push relativi alla prima call passano i parametri selativi alla call in questione e non influenzano altre parti del programma, mentre nella seconda, viene influenzato il registro ESI, che non essendo piu' ripristinato fa saltare tutto. Spero di essere stato suffficientemente esauriente.

Finito. Il programma risulta funzionante...

Solo un'ultima cosa, ho notato, dopo aver patchato il tutto, che al primo avvio, selezionando nei menu' le voci 'Mail' o 'News' appare nuovamente la nag che avvisa che il periodo di valutazione del programma e' scaduto, ma cliccando su Ok, la nag scompare e non riappare piu' negli usi successivi...non ho indagato su questo 'Cracking Bug' visto che il programma funziona... se qualche volenteroso volesse indagare, gradirei sapere i risultati di questa indagine :-)

E' tutto... Alla prossima.

phobos (aka D4rKSP4rr0W)


Note Finali

I MIEI PIU' SENTITI RINGRAZIAMENTI E SALUTI VANNO A:

  • +ORC Per i suoi tute
  • Quequero per il suo continuo impegno
  • Iczelion per i loro (suoi??) tools
  • Kill3xx, Neural_Noise, malattia+, TiN_MaN per i loro continui consigli
  • Tutti i membri o semplici partecipanti di RingZ3r0, della UIC, di #crack-it
  • Tutti coloro che hanno la pazienza di ascoltare un pazzo scatenato come me!  :-)

A PRESTO!!


Disclaimer

Come sempre, voglio ricordarvi che la 'registrazione' dei programmi mediante seriali 'sniffati', il loro cracking, ed in alcuni casi il loro semplice 'reverse engeneering' sono procedure vietate dalla legge. Una volta terminato il periodo shareware bisogna registrare legalmente il programma o disfarsene. Questo tute e' scritto per soli fini didattici, l'autore non vuole in alcun modo incoraggiare attivita' quali hacking, cracking o phreacking. Non mi assumo inoltre nessuna responsabilita' se vi spappolate i programmi. Lo scopo di questo e degli altri tute presenti su questo sito, e' di analizzare le tecniche di protezione usate dai programmatori commerciali ed individuare eventuali 'falle' al fine di rendere i loro prodotti piu' efficienti e sicuri. Se avete suggerimenti, critiche costruttive o domande, contattatemi. Se invece volete reclamare diritti sui marchi o prodotti citati all'interno del presente... andate pure al diavolo; io non ci guadagno un centesimo, rivolgetevi a chi ci specula sopra. Tutti i nomi citati sono marchi registrati o copyright dei rispettivi autori.