Zoom Icon

Corso UIC Newbies 01

From UIC Archive

Totally NewBies 1°

Contents


Corso UIC Newbies 01
Author: Quequero
Email: Que addr.gif
Website: http://quequero.org
Date: 01/01/1999 (dd/mm/yyyy)
Level: Working brain required
Language: Italian Flag Italian.gif
Comments: Semplicissimo tutorial che vi farà capire per benino cos'è il cracking ed a cosa servono i tools che usiamo



Introduction

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


Essay

Sei iscritto alle 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 password? 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 magnifico 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 di capire 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 farete 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 disattiverà, 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 la routine che fa chiudere il programma una volta raggiunto il tempo di 60 minuti... Windoze per eseguire determinate funzioni usa delle cose chiamate APIApplication Programming Interface, 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 zaccccck, funziona :) adesso premete 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

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


Note Finali

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


Disclaimer

I documenti qui pubblicati sono da considerarsi pubblici e liberamente distribuibili, a patto che se ne citi la fonte di provenienza. Tutti i documenti presenti su queste pagine sono stati scritti esclusivamente a scopo di ricerca, nessuna di queste analisi è stata fatta per fini commerciali, o dietro alcun tipo di compenso. I documenti pubblicati presentano delle analisi puramente teoriche della struttura di un programma, in nessun caso il software è stato realmente disassemblato o modificato; ogni corrispondenza presente tra i documenti pubblicati e le istruzioni del software oggetto dell'analisi, è da ritenersi puramente casuale. Tutti i documenti vengono inviati in forma anonima ed automaticamente pubblicati, i diritti di tali opere appartengono esclusivamente al firmatario del documento (se presente), in nessun caso il gestore di questo sito, o del server su cui risiede, può essere ritenuto responsabile dei contenuti qui presenti, oltretutto il gestore del sito non è in grado di risalire all'identità del mittente dei documenti. Tutti i documenti ed i file di questo sito non presentano alcun tipo di garanzia, pertanto ne è sconsigliata a tutti la lettura o l'esecuzione, lo staff non si assume alcuna responsabilità per quanto riguarda l'uso improprio di tali documenti e/o file, è doveroso aggiungere che ogni riferimento a fatti cose o persone è da considerarsi PURAMENTE casuale. Tutti coloro che potrebbero ritenersi moralmente offesi dai contenuti di queste pagine, sono tenuti ad uscire immediatamente da questo sito.

Vogliamo inoltre ricordare che il Reverse Engineering è uno strumento tecnologico di grande potenza ed importanza, senza di esso non sarebbe possibile creare antivirus, scoprire funzioni malevole e non dichiarate all'interno di un programma di pubblico utilizzo. Non sarebbe possibile scoprire, in assenza di un sistema sicuro per il controllo dell'integrità, se il "tal" programma è realmente quello che l'utente ha scelto di installare ed eseguire, né sarebbe possibile continuare lo sviluppo di quei programmi (o l'utilizzo di quelle periferiche) ritenuti obsoleti e non più supportati dalle fonti ufficiali.