Tutorial lezione 1 UIC
(crackare il programma)


30/08/1999

by "syscalo"

 

 

UIC's Home Page

Published by Quequero


Good morning Window$ user,what do you want to reinstall today?
Il tutorial è ottimo, tranne un piccolo pseudo-errore, diciamo che è solo una svista, bravo syscalo anche se non hai utilizzato la via più breve
Reverse for your knowledge not for your pockets
UIC's form

E-mail: syscalo@tiscalinet.it

UIC's form

Difficoltà

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

 

Soluzione lezione #1 di UIC. Tutorial su come fregare la protezione di questo programma. (non sono 2 righe ma fa niente;)


Tutorial lezione 1 UIC

Written by syscalo

Introduzione


Il sistema di protezione di questo programma non è difficile da fregare! Basta individuare quelle poche istruzioni che determinano la giusta strada. E' invece un po' più difficile comprendere il meccanismo di creazione del seriale, ma ci si può arrivare.



Tools usati

SoftIce (credo sia sufficiente il nome;)

URL o FTP del programma

http://quequero.members.easyspace.com/prj/corsoprimo.html

Essay

Purtroppo ho potuto dedicare solo mezza giornata a questo programma (lo so che per molti è anche troppo;) quindi non sono ancora riuscito a ricavare il seriale corretto; sono sulla buona strada ma ho ancora qualche problema.
Bhe, forse è il caso di iniziare...
Ovviamente softice deve essere già attivo sul vostro sistema, se no dove volete andare ;) La funzione usata dal programma per acquisire nome e seriale è GetWindowTextA. Per sgamarla non è necessario provare le tre consigliate da Quequero, basta fare l'anteprima dell'exe (una cosa utile di window$ ;). Syscalo ha ragione, questa tecnica può però essere usata solo in caso di programmi piccoli dal momento che un programma già di 100kb è probabile che le usi tutte e tre NdQue Impostiamo un break sulla funzione: bpx GetWindowTextA, avviamo il programma, inseriamo nome e seriale e premiamo il pulsante. Ecco softice! Premere F11 per uscire dalla funzione e siamo subito nel nostro programma. Ora si puo vedere che poche istruzioni dopo c'è la chiamata per leggere il seriale. Bene, premiamo F12 per fermarci proprio al ritorno da quest'ultima. Si può notare che prima delle chiamate viene impostato il # max di caratteri da leggere a 8 (istr. PUSH 08) quindi se ne scrivete di più non verranno nemmeno letti. Nei parametri passati vi sono anche gli indirizzi dove vengono memorizzati i dati: PUSH 00402165 (ind. nome) PUSH 00402169 (ind. serial); già da qui si può capire che del nome verranno conservati solo 4 chr (sta per caratteri:) perchè ai successivi si sovrappongono quelli del seriale. Per vedere come sono memorizzati i dati dopo la lettura basta dare il comando: d 00402165. Inoltre dopo ognuna delle due funzioni si può vedere in EAX il # di chr effettivamente letti.
Passiamo al codice puro:
Troviamo le seguenti istruzioni
MOV EBX,00402169 ind. inizio seriale
MOV EDX,EAX EAX contiene il # chr letti dal seriale
XOR ECX,ECX azzera ECX
(1)
MOV AL,[ECX+00402165] carica in AL il cod. ASCII dal primo chr del nome
ADD AL,12 |
XOR AL,CL |algoritmo che calcola il valore di confronto
ADD AL,15 |
ADD AL,02 |
MOV EBX,00402169 (inutile) Semi-Errore: questo pezzo di codice non è assolutamente inutile, non potete considerarlo come junk, però potete considerare junk la stessa istruzione all'indirizzo 401221, infatti è più logico muovere l'offset di un buffer in un registro appena prima dell'operazione che lo userebbe piuttosto che alcune righe sopra, mi spiego meglio supponiamo di avere questa routine:
 
CALL GetWindowTextA, EditHWnd, offset Buffer, 20
mov eax, offset Buffer
CALL GetWindowTextA, Edit2HWnd, offset Altro_Buffer, 20
mov ebx, dword ptr[eax]
 
ciò che succede è che dopo la prima chiama a GetWindowTextA sposto l'offset di ciò che leggo dalla prima casella in EAX, poi dopo la seconda chiamata muovo ciò che contiene eax in ebx, il problema è che il contenuto di eax è stato sovrascritto dopo la seconda chiamata e quindi non ho più nulla, conviene quindi spostare l'offset del buffer sempre prima dell'operazione che si deve eseguire, innanzitutto perchè il contenuto nelle righe di codice successive rischierebbe di essere cambiato e poi il registro ci potrebbe sempre servire, questa è una piccolissima trappola che ho inserito e syscalo ci è cascato, non è grave però dovete starci attenti perchè mi è capitato varie volte di trovare trappole di questo tipo nei programmi NdQue
 
MOV AH,[ECX+EBX] carica in AH il cod. ASCII dal primo chr del seriale
CMP AL,AH confronta cod. chr nome elaborato con cod chr seriale
(×) JNZ 00401311 se sono diversi visualizza msg di errore
INC ECX conteggio # confronti
INC EAX
CMP ECX,03 |esegue le istr precedenti per tre volte
JNZ 0040122A |salta a (1)
-----
qui è presente una serie di confronti e salti inutili; proseguire con F10 fino al seguente codice
-----
(2)
MOV AL,[ECX+00402165] carica in AL cod ASCII dal primo chr del seriale
XOR AL,16 |
ADD AL,45 |elabora il chr
ADD AL,CL |
MOV BL,[ECX+00402169] carica in BL cod ASCII dal quarto chr del seriale
CMP AL,BL confronta cod ASCII chr seriale elaborato con chr dal quarto del seriale
(×) JNZ 00401311 se sono diversi visualizza msg di errore
INC ECX conteggio chr
CMP ECX,08 |esegue le istr precedenti fino a quando ECX=8
JNZ 004012A9 |salta a (2)
-----
qui è presente una serie di confronti e salti inutili; proseguire con F10 fino al seguente codice
-----
(×) CALL 00401351 chiama una funzione che esegue ancora dei controlli sul nome e sul seriale
CMP AL,01 controlla in valore ritornato dalla funzione
(ø) JZ 00401338 se il valore ritornato è 1 visualizza il msg codice ESATTO

ora tutto quello che c'è da fare è NOPpare le istuzioni indicate con (×) con il comando "e indirizzo_istr" e scrivendo sequenze di 90 al posto dell'opcode dell'istruzione.

Va inoltre modificato il salto indicato con (ø) in un JMP tramite il comando "e indirizzo_istr" e scrivendo EB al posto di 74
Ora potete inserire qualsiasi nome e seriale che il programma si congratulerà sempre con voi ;)

LE MODIFICHE APPORTATE DA SOFTICE NON SONO PIU' VALIDE SE RIAVVIATE IL PROGRAMMA, DOVRETE QUINDI RIPETERE TUTTO :-{ RICORDATEVELO!

Note finali


Insomma bene o male siamo giunti alla fine!!! Mi scuso per il brutto modo in cui si presenta il codice del programma ma il potentissimo stumento che ho utilizzato per modificare la pagina (notepad!) non mi permetteva di fare di meglio (visto che tutto il codice HTML che conosco l'ho imparato da questa pagina ;). Spero di essere stato il più comprensibile possibile, tenuto conto che è il primo tutorial che scrivo e visto che ho iniziato gli studi alla UIC da un paio di settimane. Il crack per me, prima d'ora, era solo il programma che permetteva di usare software gratis, ora è diventato una sfida personale per migliorare sempre e testare le proprie capacità.

Ora è giunto il momento dei ringraziamenti. Per questa prima volta voglio farne uno soltanto, ma credo che sarà il più importante che potrò mai fare:

GRAZIE QUEQUERO

(sa un po' di leccaculo o è una mia impressione;) Gisuto un po' :)) NdQue-questa nota me la sono aggiunta da solo, non è di Quequero-

-×××Ciao a tutti×××-

Disclaimer

Vorrei ricordare che il software va comprato e  non rubato, dovete registrare il vostro prodotto dopo il periodo di valutazione. Non mi ritengo responsabile per eventuali danni causati al vostro computer determinati dall'uso improprio di questo tutorial. Questo documento è stato scritto per invogliare il consumatore a registrare legalmente i propri programmi, e non a fargli fare uso dei tantissimi file crack presenti in rete, infatti tale documento aiuta a comprendere lo sforzo immane che ogni singolo programmatore ha dovuto portare avanti per fornire ai rispettivi consumatori i migliori prodotti possibili.
Noi reversiamo al solo scopo informativo e di miglioramento del linguaggio Assembly.
Capitoooooooo????? Bhè credo di si ;)))) 
Nota di syscalo: ho lasciato volutamente il disclaimer suggerito da Quequero (non per pigrizia;) perchè credo chiarisca molto bene lo scopo della UIC (e pari molto bene il culo;)

 

 

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

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

UIC