Totally NewBies 1° corso
(Cracking...Chi era costui?)


Data

by "Quequero"

 

 

UIC's Home Page

Published by Quequero



Semplicissimo tutorial che vi farà capire per benino cos'è il cracking ed a cosa servono i tools che usiamo

 
UIC's form
Home page: http://quequero.org
E-mail: UIC@mail.usa.com
#Crack-it #UIC
UIC's form

Difficoltà

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

 

Raga, non sapete cosa sia il cracking ma vi piace la parola? Siete approdati al porto giusto!!!


Totally NewBies 1° corso
(Cracking...Chi era costui?)
Written by Quequero

Introduzione

Cracking....SoftIce.....W32Dasm.....cosa sono? A che servono? La risposta a questi quesiti la troverete su questo documento......Siete pronti ad entrare nel mondo del cracking? Buona lettura allora!!!!!

Tools usati

DesKey
SoftIce 4.0
Hex-Workshop qualunque versione
A working brain
Essay
Sei iscritto alla ML della UIC ma non capisci un piffero di quello che ci diciamo? Non riesci a giocare al tuo videogame preferito perchè ti viene chiesta una pasword? Il tuo programma prediletto è morto dicendoti che se lo vuoi usare ancora devi pagare? Bhè è ora di entrare nel mondo del cracking per scoprire che esiste un modo per disintegrare tutti questi tipi di protezione, scoprirai anche che ogni programma può essere modificato come cavolo ti dice la testa......Cosa chiediamo in cambio? Poche cose: starci a sentire, un po' di passione per l'informatica ed un po' di voglia per imparare un linguaggio che forse non conosci bene.....l'Assembly. Stavolta vi spiegherò tutto passo passo, perchè il miglior modo per imparare a crackare è......crackare! Un giorno qualunque di due anni fa scaricai per errore un file che si chiamava WinCrack.zip, lo aprii e mi si spalancò avanti un mondo totalmente nuovo, il cracking...Finora i miei amici avevano detto che i serial si trovavano nel file e li dovevi cercare con l'hex editor, dicevano che per crackare un programma erano necessarie decine di persone, dicevano anche che per crackare dovevi saper leggere il linguaggio esadecimale (?) ma non era vero, grazie al maginifico e chiaro tutorial di Ed!son capii subito come si iniziava, l'unica pecca è che nello zip non trovai affatto i file che lo stesso Ed!son diceva che avrei dovuto trovare, ma la mia forte passione mi fece sforzare al massimo per cercare dicapire quelle poche righe, non conoscevo nulla di assembly, avevo usato un paio di volte un hex editor e non avevo la più pallida idea di cosa fosse un debugger, un interrupt, un byte.....Totale ignoranza insomma, ma alla fine grazie al linguaggio chiaro e pulito di questo grandissimo maestro imparai la nobile arte del cracking ed è quello che cercherò di insegnarvi con questo tutorial, non vi chiedo altro che passione, proverò io stesso a condurvi passo passo...Non sperate di diventare famosi facendo i cracker altrimenti vi fareti vecchi davanti al PC, fatta questa raccomandazione.....Partiamooooooo!!!
Scegliamo un target molto vecchio tanto per non andare sul difficile.......Niente non ce l'ho.......aspettate che vado dal mio vicino che è sempre ben fornito di vecchi shareware........................Oki trovato....Il nostro target sarà Deskey v1.03.010 della SoftArts, il programmuzzo serve per gestire il desktop, dopo 60 minuti si disattiva, installatelo, avviatelo, bene, una piccola chiave appare sul systray, dobbiamo fare in modo che questo programma duri all'infinito e non si disattivi dopo 60 minuti, andiamo quindi nella sua cartella, clickiamo col destro sul file e scegliamo "anteprima", vedrete una massa di parole ancora senza senso per voi...vi dico subito che dobbiamo trovare nel programma la routine che fa chiudere il programma una volta raggiunto il tempo di 60 minuti....Windoze per eseguire determinate funzioni usa delle cose chiamate API, le API che ci interessano in questo caso sono: GetSystemTime, GetLocalTime e SetTimer, la prima può essere usata ad esempio per vedere quante ore, minuti o secondi sono passati da un determinato evento (l'avvio del programma nel nostro caso), la seconda serve a vedere quanti giorni, mesi o anni sono passati dal solito evento e la terza serve a settare un timer, si, una specie di conto alla rovescia, quasi sicuramente il nostro target al suo avvio o setterà un timer di un'ora oppure farà dei controlli del tempo trascorso con GetSystemTime, per scoprirlo dobbiamo settare delle "trappole" al codice, cioè delle specie di tagliole che scattano quando il programma usa una determinata parte di codice.....Per settare queste trappole installate SoftIce, scaricate da qui il file winice.dat, sostituitelo al vostro file nella directory di SoftIce e riavviate il PC, bene adesso partiamo.....prima di avviare il programma aprite SoftIce (usando Ctrl+d) e vedrete una schermata nera in alto a sinistra, non preoccupatevi se il cursore del mouse non si muove o se winamp ha smesso di funzionare, è normale....bene, alla riga di comando scrivete: bpx settimer
Significa: setta un breakpoint (trappola) attivo sulla funzione SetTimer, in pratica se il programma durante l'avvio usa questa funzione allora softice (sice d'ora in poi) apparirà sullo schermo e bloccherà il codice.......proviamo.....avviate il programma....e zaccccc, funziona :) adesso premte una volta F11 (per uscire dalla funzione SetTimer) e poi F12 finchè non vedrete sulla barra verde di sice il nome Deskey, quando lo vedete significa che sarete nel codice del programma e non nel codice di altri processi.
Siete arrivati qui:
:00403991 6A00                             push 00000000 ; Identificativo delle finestra per il messaggio del timer
:00403993 A128904000               mov eax, dword ptr [00409028] ; Indirizzo della procedura del timer
:00403998 6880EE3600               push 0036EE80 ; Valore di time-out
:0040399D 6834120000               push 00001234 ; Identificativo del timer
:004039A2 50                                 push eax ; Salva l'indirizzo della procedura del timer
:004039A3 FF158CB44000        Call [USER32!SetTimer]
:004039A9 8BBC24AC060000  mov edi, dword ptr [esp+000006AC]
 
ovviamente non capite nulla di cosa significhino queste istruzioni.....bhè allora spieghiamo la sintassi della funzione SetTimer che è:
 
UINT SetTimer(
HWND hWnd,  // Identificativo delle finestra per il messaggio del timer
UINT nIDEvent, // Identificativo del timer
UINT uElapse, // Valore di time-out in millisecondi
TIMERPROC lpTimerFunc // Indirizzo della procedura del timer
);
come vedete per usare la funzione SetTimer dobbiamo passare al programma 4 istruzioni che vi ho illustrato nel codice sopra, il valore che ci interessa è il terzo e si trova all'indirizzo00403998, l'istruzione PUSH salva in memoria il valore di timeout, questo valore è 36EE80 che come potete vedere è in base 16 cioè esadecimale (ricordate che TUTTI i numeri che troverete in softice sono esadecimali).....Come facciamo però a sapere a che valore decimale corrisponde il numero 36EE80? Basta usare una semplicissima funzione che ci propone sice, la funzione "?" cioè: evaluate expression, quindi in sice scrivete: ? 36EE80 premete invio ed avrete: 0036EE80   00003600000 "6Îç"  
il primo valore che incontrate è il valore esadecimale, il secondo è quello che ci interessa cioè quello decimale ed il terzo è il corrispondente ASCII, ma a quanti secondi equivalgono 3600000 millisecondi? basta fare con la calcolatrice :) una semplice divisione: 3600000 / 1000 = 3600 secondi ma a quanti minuti equivalgono 3600 secondi? 3600 / 60 = 60 minuti, cioè un'ora, quindi il nostro limite hehehe che bello, adesso dobbiamo cercare una qualche istruzione che decida se il programma ha finito il suo periodo oppure può ancora restare attivo, all'inizio per cercare istruzioni come: "se succede questo fai quest'altro" potete usare la tecnica del CMP then JUMP, cioè cercate un'istruzione cmp (confronta) e poi un qualunque jump, guardate un po' più su nel codice ed infatti vedrete proprio questo:
:0040397F 833D1890400000    cmp dword ptr [00409018], 00000000 ; Confronta se la locazione di memoria 409018 è uguale a 0
:00403986 7409                            je 00403991 ; Se lo è salta a 403991 (JZ significa Jump if Zero ed è identico a Jump if Equal)
:00403988 833D1C90400000   cmp dword ptr [0040901C], 00000000 ; Confronta se la locazione di memoria a 40901C è uguale a 0
00:0040398F 7421                       je 004039B2 ; Se lo è allora salta a 4039B2
 
:00403991 6A00                             push 00000000 ; Identificativo delle finestra per il messaggio del timer
:00403993 A128904000               mov eax, dword ptr [00409028] ; Indirizzo della procedura del timer
:00403998 6880EE3600               push 0036EE80 ; Valore di time-out
:0040399D 6834120000               push 00001234 ; Identificativo del timer
:004039A2 50                                 push eax ; Salva l'indirizzo della procedura del timer
:004039A3 FF158CB44000        Call [USER32!SetTimer]
:004039A9 8BBC24AC060000  mov edi, dword ptr [esp+000006AC]
:004039B0 EB12                            jmp 004039C4
:004039B2 8BBC24AC060000  mov edi, dword ptr [esp+000006AC]
:004039B9 EB09                           jmp 004039C4
 
come vedete ci sono ben due cmp, il primo confronta la locazione di memoria 409018 con zero, e se quella locazione contiene effettivamente 0 allora avvia il timer altrimenti un altro cmp confronta un'altra locazione con zero e se anche questa contiene degli zeri allora NON attiva il timer, e che facciamo noi? Facciamo in modo di far saltare il primo jmp alla locazione del secondo :), il modo è semplice, dovreste ancora avere settato il breakpoint su settimer, chiuedete Deskey, riavviatelo e fate doppio click sulla riga a 403986 se diventa blu allora avete settato il breakpoint altrimenti no e lo dovrete settare a mano (bpx 403986), ora cancellate il breakpoint su settimer, scrivete in sice: bl
per avere una breakpoint list e dovreste vedere qualcosa simile a:
1)      bpx  xxxx:USER32!SetTimer
2)      bpx  xxxx:00403986
per cancellare il primo breakpoint scrivete: bc1 (e se volete cancellarli tutti scrivete bc*).
Uscite da SoftIce con X o F5, chiudete il programma e riavviatelo, sice dovrebbe poppare all'indirizzo 403986, per fare in modo che salti a 4039B2 invece che a 403991 scrivete: a eip
jmp 4039B2
ora siamo sicuri che il programma funziona, come avrete notato però la riga che ci interessava è cambiata da:
:00403986    7409   je 00403991
a:
:00403986    EB2A   jmp 004039B2
e dal momento che i cambiamenti fatti con sice durano solo per una esecuzione del programma e non sono quindi permanenti allora avrete bisogno di cambiare fisicamente i byte, per farlo aprite il file (dopo aver chiuso il programma) con l'Hex-Workshop, cercate con il pulsante find questi bytes: 833D18904000007409833D1C90400000
e cambiate 7409 in EB2A (ricordatevi di disattivare il pulsante ins altrimenti i byte saranno aggiunti,  non cambiati e il file non funzionerà) cioè la nuova istruzione: 833D1890400000EB2A833D1C90400000
bravi avete patchato il vostro primo programma, adesso il time limit non esiste più e potete usarlo indefinitivamente.
Ci vediamo al prossimo tutorial ciauzzzzzzzzzzzz

Quequero

Note finali

Bhè, devo ringraziare il mitico ED!SON....senza di lui.....:)))))) ciauzzzzzzzz e grazie a tutti

Disclaimer

Qui inserirete con questo carattere il vostro piccolo disclaimer, non è obbligatorio però è meglio per voi se c'è. Dovete scrivere qualcosa di simile a: 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 ;)))) 

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

Home   Anonimato   Assembly    ContactMe  CrackMe   Links   
NewBies   Forum   Lezioni  
Tools   Tutorial 

UIC