Multi Clipboard ver. 9.09.01
Tecnica usata: BreakPoint on Range

 

18-09-1999

by "Sator SSH"

 
 

UIC's Home Page

Published by Quequero

We work in the dark.We do what we can.We give what we have.Our doubt is our passion,

Do il mio benevenuto a Sator per essere entrato nella nostra comunità, vi presento un suo tutorial non molto impegnativo ma che avvalora la tesi di +ORC "in ogni programma ci sono SEMPRE più vie di attacco"

and our passion is our task.The rest is the madness of art.

Henry James.

UIC's form
E-MAIL : [email protected]
On IRC : Sator SSH - CHANNEL : #crack-it
On ICQ : UIN # 5954265
On POWWOW : Francesco
UIC's form

Difficoltà

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

 

Come riuscire a tirarsi fuori dai guai,e far funzionare un programma,anche quando non si riesce a trovare il giusto RegCode o la corretta password !!! :-)))


Multi Clipboard ver. 9.09.01
Tecnica usata : BreakPoint on Range
Written by Sator SSH

Introduzione


Ricerca dell'esatto Codice di Registrazione di un programma o, in alternativa, patcharlo per renderlo comunque funzionante al 100%.

Tools usati

 
SoftIce v4.01 - Wdasm v8.93 - HexEditor (quello che più vi aggrada) - PatchMaker.

URL o FTP del programma

Il programma lo si può reperire al seguento indirizzo: http://www.ElectraSoft.com/

Notizie sul programma 

 
Non ho la più pallida idea di cosa faccia e a cosa serva il programma in oggetto !!! So solo che ci sono 3.000 NagScreens prima e dopo i 30gg. di prova.
 

Essay

DUE DIFFERENTI MODI DI CRACKARE UN PROGRAMMA

REVERSING E PATCHING

Ok gente….eccomi qua alle prese con il mio primo tutorial. Scusatemi se come didattica farò schifo,cercherò di essere il più chiaro possibile !
Dunque, il nostro obiettivo è quello di rendere completamente funzionanti i vari programmi shareware, colmi di limitazioni nell'uso, nagscreens, funzioni disabilitate e chi più ne ha più ne metta. Non vogliamo comunque danneggiare nessuno, sia ben chiaro, ma riuscire piuttosto a capire come funzionano le varie tecniche di protezione all'interno del codice programma.E' giusto un divertimento e una bonaria e sana sfida con chi ha scritto il programma.
In questo primo tutorial vedremo come trovare il giusto seriale di un programma per la registrazione dello stesso e in alternativa come patcharlo per renderlo completamente funzionante pur senza immettere il codice.Alla fine, ma sarà oggetto di un altro tutorial, scrivere un KeyMaker in assembly, sempre per lo stesso programma, per cui è scontato che chi si accinge a leggere ciò abbia sufficiente dimistichezza con debugger, disassemblatori, compilatori, etc…
Ho scelto, giusto per iniziare, qualcosina di facile facile!!! Bando comunque alle ciance….si parte !!!

CODICE DI REGISTRAZIONE

Ordunque, si va ad iniziare….lanciamo il programma e ci apparirà una DialogBox in cui inserire il nome(min.3 caratteri),nel mio caso ho immesso Sator SSH (che fantasia !!!), clickiamo su 'Apply' e vien fuori un'altra finestra che ci chiede di immettere il codice di registrazione; inseriamo quello che ci pare, ad esempio 5555555555.Entriamo in SoftIce con Ctrl+D (ovvio no?) e settiamo un bel bpx su GetDlgItemTextA.

Piccola digressione:
La funzione GetDlgItemTextA ritorna la stringa da noi inserita,associata ad un identificatore di controllo in una DialogBox.

La struttura è la seguente:

UINT GetDlgItemText // Il nome della funzione
HWND hDlg, // Handle della DialogBox
int nIDDlgItem, // Identificatore di controllo
LPTSTR lpString, // Indirizzo del buffer per il testo
int MaxCount, // Massima lunghezza della stringa inserita

A questo punto F5 per uscire dal debugger e di nuovo click su 'Apply'. Via, di nuovo in SoftIce: adesso premiamo F12 per posizionarsi nel punto in cui è stata chiamata la funzione che abbiamo brekkato. Questa parte di codice controlla e manipola la stringa del nome da noi inserita ….steppando vedrete infatti a 405AF9 un cmp ecx,03 (avete capito vero a che serve quest'istruzione no ?). Dando un'occhiata a EAX vi accorgerete, inoltre, che contiene il numero in hex dei caratteri che compongono il nome (spazi compresi).Tuttavia, almeno per questo programma questa parte di codice ci interessa relativamente poco, per cui di nuovo F5 ed F12.Questa volta siamo al posto giusto al momento giusto, infatti in EAX notate il numero sempre in hex dei caratteri che compongono il RegCode, nel mio caso A che corrisponde in decimale al numero 10…ho inserito infatti dieci 5. Bene, bene, ma in quale oscuro angolo della memoria è stato confinato il nostro '5555555555'?Fate un bel D EDI e nella Data Window di SoftIce non vedrete niente…ORRORE !!!!(scherzo). Portatevi con il cursore nella finestra Data e scrollate verso l'alto con il tasto cursore.Magia!Vediamo il nostro beneamato codice che fasullo per quanto mai fa bella mostra di sé. Annotiamoci l'indirizzo che in questo caso è 443C68. Adesso fate un BC * e settate un BPR 443C68 443C68+A R, (A è il numero dei caratteri che compongono il codice ed R l'istruzione che indica a SoftIce di bloccare l'esecuzione del programma quando va a leggere nell'intervallo degli indirizzi da noi specificato). Ok, premete F5 e steppate fino a che non incontrerete questa porzione di codice:

:00405BB9 call 004076A0
:00405BBE mov edi, 00440DA0
< ---- Qui
:00405BC3 or ecx, FFFFFFFF
:00405BC6 xor eax, eax
:00405BC8 add esp, 00000004
:00405BCB repnz
:00405BCC scasb
:00405BCD not ecx
:00405BCF dec ecx
:00405BD0 mov edi, 00440DA0
< ---- Qui
:00405BD5 mov esi, 00443C68
< ---- Qui

Steppate fino a 405BD5. Ora fate un D EDI e vedrete il codice esatto che corrisponde al nostro nome, nel mio caso è 30353738363A. In ESI c'è quello fasullo che a noi non interessa più. Giacchè ci siete fate un D 496D60 e vedrete il nome con il giusto seriale in bella vista. Non mi chiedete come ho fatto ad arrivarci, tanto non ve lo dico. Qualcosina dovete pur farla voi..vero? :-)
Orbene, bc * ed F5 per uscire lindi e puliti da SoftIce, rilanciamo il programma, mettiamoci il giusto seriale e miracolo della scienza e tecnica siamo diventati degli utenti registrati a tutti gli effetti.
Tuttavia,questo è uno dei tanti modi per la ricerca del seriale….che io sappia vi sono almeno altri 3 o 4 metodi per raggiungere lo stesso scopo.

Chiaramente questo è stato un giochetto che non ha richiesto un granchè di abilità….tenete presente che i seriali o le password in genere sono criptati e codificati con algoritmi inventati dagli autori del software e che raramente sono in chiaro come in questo esempio. Vedremo, comunque più in la qualche programma che fa uso di queste tecniche.

PATCH

Allora…..siccome siamo dei masochisti, dimentichiamoci del RegCode e vediamo come fare per eliminare i vari NagScreens che la versione shareware del programma gentilmente ci offre. Ovverosia come patchare il programma per renderlo bello, pulito e funzionante al 100%.
Cancelliamo innanzitutto il file Mltclip.ini in C:\Windows.Lanciamo il programma e inseriamo nella finestrella della solita DialogBox il nome (sempre Sator SSH….uffa che pa[[e !!!). Clickiamo su 'Apply' e viene fuori il 1° NagScreen che ci chiede di immettere il regcode…(lo so,siete tentati a inserirlo, ma resistete!), click su 'Get Registration Code from Electra Soft Later' e via nel 2° NagScreen, aspettate che si illumini il tasto 'Register Later' e poi di nuovo click, siamo nel 3° NagScreen(e che cavolo, basta no !!!), clickiamo su 'OK' e finalmente la finestra del nostro beneamato programma si presenta ai nostri inviperiti occhi. :-)
Bene, cancelliamo di nuovo il file Mltclip.ini e rilanciamo il programma. Inserite un nome (io suggerirei Sator SSH, ehehehe….non mi uccidete !!!). Ctrl+D per entrare in Softice, settiamo un bpx HMEMCPY,F5 per uscire e click su 'Apply' per rientrare nel debugger. Disabilitiamo il BPX con BC* e premiamo 9 volte F12 per raggiungere il nostro caro programma. Fatto? Ok….andiamo avanti. Steppate con F10 fino a quando una call vi butterà fuori dal debugger. (Dovete steppare un bel po', anche attraverso il Kernel,User e di nuovo Kernel per raggiungere questa call).
Comparirà a questo punto il 1° NagScreen, clickate sui vari bottoni di questo e degli altri Nags per chiudere il programma. Come per magia,ricomparirà il Softice nel punto in cui vi ha buttato brutalmente fuori. Andate in Code Window e qualche riga più su rispetto a quella illuminata e precisamente a 4021B9 troverete la call che vi ha scaraventato fuori dal debugger (che cattivona !!!). A questo punto sarete tentati di nopparla, vedrete però che il programma non funzionerà più. Allora BPX a questo indirizzo andandoci sopra con il cursore e clickando due volte. Uscite con F5 dal debugger, chiudete e rilanciate il programma, vi troverete, logicamente, di nuovo in questa call…disabilitate il BPX (ormai sapete come si fa) ed entrateci dentro con F8.Steppate con F10 e vi ritroverete di nuovo ad essere buttati fuori da una call a 4074CB (la sola e unica responsabile del 1° NagScreen).
Siccome ve l'ho detto io evitate di stepparci sopra e date uno sguardo al disassemblato qui sotto:

Jump at Address:
|:0040747F(C)
|
:0040748C mov ecx, dword ptr [0043A334]
:00407492 and ecx, 0000001F
<---- 1Fh=31d (giorni di prova del programma,no?)
:00407495 cmp cl, 1F
<---- Confronta la parte bassa di ecx con il valore 1Fh
:00407498 je 004074A3
<---- Esegue il salto (Nags!)
:0040749A cmp eax, 00000001
<---- Se eax=0 il programma esegue il salto,se eax=1 continua
:0040749D jne 004075C6
<---- Esegue il salto (No Nags!)

Jump at Address:
|:00407498(C)
|
:004074A3 ............................
......................................
:004074C6 ............................
:004074CB call 00421F45
<---- 1°NagScreen
:004074D0 cmp eax, 00000001
<---- Se eax=1 il programma esegue il salto,altrimenti continua
:004074D3 je 0040755F
<---- Qui
:004074D9 mov ecx, 00440B10
:004074DE call 00421F45
<---- 2°e 3°Nagscreen
:004074E3 ............................
......................................
:00407519 ............................

Come vedete la routine che contiene la call responsabile del 1° NagScreen è chiamata da un salto condizionato a 407498.Da persone intelligenti non ci rimarebbe altro che invertirlo in jne….non fatelo perché dopo i 30gg. di prova del programma, il flag (sapete cos'è vero?), cambiando di stato condizionerebbe il jmp da noi modificato, e ci ritroveremo , di nuovo, sempre e comunque nella stramaledetta routine (vedi dopo). L'unica cosa da fare è noppare con 5 nop la call a 4074CB.
Rilanciamo il programma e gioite gioite il 1° NagScreen non c'è più. Una volta noppata la call metteteci ugualmente un bpx a 4074CB e premete F5 per uscire dal debugger. Chiudete e rilanciate il programma.Siete di nuovo in Softice,steppate e vi ritroverete ad essere buttati fuori da un'altra call a 4074DE (responsabile del 2°e 3° NagScreen).
Sarebbe stato comunque sufficiente dare uno sguardo al disassemblato di cui sopra, per capire quale era la call che chiamava gli altri Nags (sempre la stessa comunque!). In ogni caso un po' di esercizio non guasta mai.
Adesso per eliminare questo Nag possiamo agire in 2 modi diversi:

1° Modificare a 4074D3 il salto condizionato da je in jne
2° Noppare a 4074DE la call con i soliti 5 Nop

Comunque sia, a voi la scelta tra i due modi.
Vediamo adesso come ottenere lo stesso risultato, patchando il programma in maniera più elegante (forse :-) !!! Quanto commentato nel disassemblato, di cui sopra, è vero solo per i primi 31gg.Ma dopo, cosa succede? Vediamo.......

ENTRO I 31 GIORNI : Modifichiamo a 407498 il je in jne,in modo tale che il programma non esegua il salto.Diamo uno sguardo ai registri e vediamo che EAX è uguale a 0, per cui via libera al salto a 40749D. Ci appare così la finestra principale del programma senza passare attraverso i Nags.Semplice vero?

DOPO I 31 GIORNI : Lanciamo il programma e AAARRRGGGHHH !!!!!...di nuovo i Nags. Come mai? Dunque, se vedete nei registri, ora EAX vale 1 (perchè superati i 30gg.), per cui non si ha più il salto a 40749D e il programma continua normalmente con i Nags.Allora cambiamo jne in je direte voi......eh no, perchè avrete il problema opposto e uguale entro i 31 giorni, in quanto modificato anche il salto condizionato a 407498.Una delle tante soluzioni è quella di metterci un salto incondizionato, modificando jne 4075C6 in jmp 4075C6 : così facendo, comunque vadano le cose, avremo sempre il nostro bel programma privo dei simpatici NagScreens e completamente funzionante....e mo' basta !!! ;-).

A questo punto rimane ancora una sola cosa da fare;lanciate il programma (tutt'altra cosa senza i NagScreens, vero?) e vi accorgerete in alto a destra sotto la barra del titolo di un bottone con su scritto 'Unregistered User - Nome'.
Disassemblate il programma con Wdasm, andate in Refs e clikkate su 'String Data References', cercate la stringa 'Unregistered User' e clickateci sopra due volte. Vi ritroverete nella porzione di codice che riporto fedelmente qui sotto:

Jump at Address:
|:00407E15(C)
|
:00407E31 mov eax, dword ptr [00499730]
:00407E36 push 00496D60
:00407E3B cmp eax, 00000001
<---- Se eax=0 il programma esegue il salto,se eax=1 continua
:00407E3E jne 00407E47
<---- Qui

* Possible StringData Ref from Data Obj ->"Registered to - %s"
|
:00407E40 push 0043BA20
:00407E45 jmp 00407E4C

Jump at Address:
|:00407E3E(C)
|

* Possible StringData Ref from Data Obj ->"Unregistered user - %s"
|
:00407E47 push 0043BA08

Cosa facciamo allora? Semplice: non facciamo eseguire il salto a 407E3E (jne diventa je) che ci porta alla stringa 'Unregistered User', di modo che, il programma proseguendo con le successive istruzioni ci regala il bottoncino con la scritta 'Registered to - Nome'.
Alleluia, alleluia anche questa è fatta!!! Adesso, infatti, rilanciando il programma, comparirà solo la DialogBox iniziale: immettiamo il nome e......sorpresa !!! Siamo utenti registrati pur non avendo inserito il Codice di Registrazione.

Ora per rendere effettive e permanenti le modifiche, disassemblate di nuovo il programma, andate agli indirizzi dove ci sono le istruzioni da modificare e annotatevi i giusti offset dell'eseguibile (Mltclip.exe).Aprite il file con un HexEditor e andate tranquillamente a modificare tutto il mondo!!!!! Se poi siete dei birbantelli, createvi pure un sano e robusto file di crack con i diversi PatchMaker, che troverete sicuramente in giro per la rete, o addirittura se avete tempo e pazienza scrivetene direttamente uno voi stessi.

Tenete presente che anche in questo caso le vie per PATCHARE sono infinite (come quelle del Signore). Questo da me descritto è uno dei tanti, e lasciatemelo dire, forse uno dei modi meno comodi per raggiungere lo scopo.
Ho scelto comunque questo, in quanto più ricco di nozioni circa l'uso del debugger…e credetemi, più lo si impara ad usare in tutta la sua potenza, più facile risulterà per voi reversare e patchare programmi protetti nei più svariati modi.

 

 

 

Note finali

Desidero ringraziare innanzitutto Quequero che mi ha permesso di pubblicare questo tutorial e tutti quelli che con i loro suggerimenti e consigli mi hanno aiutato nell'apprendere le nozioni basilari del Cracking. Un caloroso saluto e ringraziamento va all'amico di tante notti insonni GR!SU' (che ormai è diventato più bravo di me) e a tutti gli altri cracker più anziani è più in gamba di me:

+ORC, Xoanon, ED!SON, Scacco, Cyborg, CbD, Keyboard Caper, Fravia e naturalmente anche a tutti quelli che involontariamente ho dimenticato di menzionare.

Disclaimer

Il presente documento è stato scritto solo ed esclusivamente per un uso puramente didattico, al fine di comprendere meglio alcune tecniche di protezione all'interno del codice programma.Pertanto non mi assumo nessunissima responsabilità circa l'uso illecito o non corretto,da parte di terzi,di questo tutorial,né tantomeno per eventuali danni che l'applicazione di quanto scritto, potrebbe arrecare ad eventuali software.
Se siete interessati ad un programma compratelo e registratelo !!!

Ciao a tutti e alla prossima…. :-) !!!


 
UIC's page of reverse engineering, scegli dove andare:

Home   Anonimato   Assembly    ContactMe  CrackMe   Links   
NewBies   News   Forum   Lezioni  
Tools   Tutorial 

UIC