Cracking Opera 3.60 |
|
|
10-02-2000 |
|
|
|
Published by Quequero |
|
|
Bravo phob, ha scritto un buon tute sul CRACKING di opera..a quando il suo REVERSING? :) |
|
UIC's form |
|
UIC's form |
Difficoltà |
( )NewBies ( )Intermedio ( )Avanzato ( )Master |
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...
Opera 3.60. A cracking approach.
Written by phobos (aka D4rKSP4rr0W)
Introduzione |
Tools usati |
URL o FTP del programma |
Notizie sul programma |
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
:00405E70 je
00405E84
<--- Nota
:00405E72 mov eax,
dword ptr [esi]
:00405E74 mov ecx,
esi
:00405E76 call
[eax+54]
:00405E79 test
eax, eax
:00405E7B jne
00405E84
<--- Nota
* Possible Reference to String Resource ID=32889: "This evaluation version has
expired."
|
:00405E7D mov eax,
00008079 <--- Viene 'pushata' la stringa qui sopra
:00405E82 pop esi
: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:
:00491590 push
00000100
:00491595 mov dword ptr
[ebp+08], eax
:00491598 lea eax, dword
ptr [ebp+FFFFFEF0]
:0049159E push eax
* Possible Reference to Dialog: SERNO_NAG, CONTROL_ID:2B92, "<B>Your timed
evaluation has %i days lef"
|
:0049159F mov ebx,
00002B92 <--- Arriviamo esattamente qui.
:004915A4 push ebx
:004915A5 push edi
* Reference To: USER32.GetDlgItemTextA, Ord:0104h
|
:004915A6 Call dword ptr [004F6510]
: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: MenuID_0004
|
:00491559 push 00000004
:0049155B lea eax, dword ptr
[ebp-10]
:0049155E push eax
:0049155F push edi
* Possible Reference to Dialog: SERNO_NAG, CONTROL_ID:2B8E, "Help" <--- Nota
|
:00491560 mov [ebp-10], 00002B8E
* Possible Reference to Dialog: SERNO_NAG, CONTROL_ID:2B8F, "Eval" <--- Nota
|
:00491567 mov [ebp-0C], 00002B8F
* Possible Reference to Dialog: SERNO_NAG, CONTROL_ID:2B90, "Purchase" <--- Nota
|
:0049156E mov [ebp-08], 00002B90
* Possible Reference to Dialog: SERNO_NAG, CONTROL_ID:2B91, "Register" <--- Nota
|
:00491575 mov [ebp-04], 00002B91
:0049157C call 00491B92
:00491581 mov eax, dword ptr
[0051171C]
:00491586 mov ecx, dword ptr [eax]
:00491588 add esp, 0000000C
: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:
|:0049148F
|
:004914FE push ebp <---
Questa e' la prima reference utile da andare ad analizzare
:004914FF mov ebp, esp
:00491501 sub esp, 00000110
:00491507 push ebx
:00491508 push esi
:00491509 push edi
:0049150A mov edi, dword ptr [ebp+08]
:0049150D xor eax, eax
:0049150F push eax
:00491510 push eax
:00491511 push eax
:00491512 push eax
:00491513 push edi
:00491514 call 00425E09
:00491519 push edi
:0049151A call 00425A89
* Reference To: USER32.GetDlgItem, Ord:0102h
|
:0049151F mov esi, dword ptr [004F6540]
:00491525 add esp, 00000018
:00491528 push 00002B93
:0049152D push edi
:0049152E call esi
* Reference To: USER32.SetWindowLongA, Ord:0258h
|
:00491530 mov ebx, dword ptr [004F64BC]
:00491536 push 00491C89
:0049153B push FFFFFFFC
:0049153D push eax
:0049153E mov dword ptr [005114A4], eax
:00491543 call ebx
:00491545 mov dword ptr [005114B4], eax
:0049154A call 00491CE8
:0049154F push 00491609
:00491554 push FFFFFFFC
:00491556 push edi
: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...
:00491486 push [ebp+14]
:00491489 push [ebp+10]
:0049148C push [ebp+08]
:0049148F call
004914FE <--- Questa e' la
CALL 'incriminata'
:00491494 add esp, 0000000C
: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 ->"*"
|
:00491347 push 00507C80
:0049134C push eax
:0049134D call 00424635
:00491352 cmp esi, ebx
:00491354 pop ecx
:00491355 pop ecx
:00491356 je 00491388
:00491358 push [ebp+10]
:0049135B lea eax, dword ptr [ebp-40]
:0049135E push esi
:0049135F push [ebp+08]
:00491362 push eax
:00491363 push dword ptr [00510F18]
* Reference To: USER32.DialogBoxParamA, Ord:0093h
|
:00491369 Call dword ptr [004F658C] <--- Eccola qua!!
:0049136F xor ecx, ecx
:00491371 cmp eax, FFFFFFFF
:00491374 setne cl
:00491377 push 00000040
:00491379 lea eax, dword ptr [ebp-40]
:0049137C push ebx
:0049137D push eax
:0049137E mov edi, ecx
:00491380 call 004E73D0
: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.
|
THANX TO:
* +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 |
Home
Anonimato Assembly
CrackMe ContactMe Forum
Iscrizione Lezioni Links NewBies News Playstation
Tools Tutorial Search
UIC Faq