| |
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
- 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!!!!!
- DesKey
- SoftIce
4.0
- Hex-Workshop
qualunque versione
- A working brain
- 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
Bhè, devo ringraziare il mitico ED!SON....senza di lui.....:)))))) ciauzzzzzzzz
e grazie a tutti
- 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