Sei sulla pagina 1di 12

Tutorial N1 9-2-1999 Cos' il cracking?

Con questa parola intendiamo l'arte del bypassare o disattivare i sistemi di protezione all'interno dei comuni shareware. Per intenderci faccio un piccolo esempio: In edicola compro un cd con dei programmi, ne installo uno a caso e noto subito che in alto c' scritto: "Questo programma una versione shareware". Cosa significher questo oscuro messaggio? Bene ecco la risposta, il programma probabilmente avr alcune funzioni disabilitate oppure ci porr un limite di tempo entro il quale dovremmo pagare un contributo al produttore per riceverne una versione completa, infatti gli shareware sono nati per far provare al potenziale acquirente il nostro prodotto e, se esso vorr poi utilizzarlo a tempo indeterminato dovr pagare per ricevere un numero seriale che gli consentir di disabilitare il limite di tempo (in genere 30, 45 o 90 giorni) oppure di abilitare tutte le funzioni che prima non erano disponibili. Le software house per velicizzare l'utilizzo dei propri prodotti spesso consentono di registrare il programma in linea, ma vediamo come avviene questo precesso, spesso si deve andare nel menu *Help* e poi *Register*, a volte il box di registrazione appare durante l'avvio del programma, a volte "nascosto" come in gamehack dove si deve premere "ctrl+clic" sul logo "GameHack" per accedervi, oppure altre volte il box non esiste, infatti proprio per questo possiamo dividere i programmi shareware in due categorie ed altre varie sottocategorie, andiamo ad esaminarli: i tipi di shareware si possono dividere in registrabili e non, i registrabili possono essere *sbloccati* tramite un box nel quale v inserito un numero predefinito oppure calcolato in base al nome che inseriamo, o peggio tramite un Key file, ossia un file che la ditta spedisce all'utente e che va messo generalmente nella cartella principale del prog. (per esempio cuteftp cerca al proprio avvio un file chiamato "cuteftp.key" contenente le informazioni criptate dell'utente) quest'ultima soluzione spesso la pi difficile da sopraffare, ma vediamo come si comportano i prog. non registrabili, questa branca di shareware nata recentemente per il solo motivo di depistare i cracker, infatti, i vari prodotti non forniscono un box di registrazione, ma consentono generalmente l'utilizzo completo del prog. per un determinato periodo di tempo oppure disabilitano alcune funzioni, a volte invece consentono di sfruttare a tempo illimitato il prog. senza disabilitare le funzioni ma riempiendolo di nag-screen (ossia noiosi messaggi che ricordano di pagare la registrazione e cazzi vari...) ce ne sarebbero altri due, nel primo *Verifica del cd-rom" l'eseguibile controlla la sua locazione che deve essere quella del cd originale, nel secondo tipo viene cercata una chiave hardware cio viene fatto un check su una compente hardware del vostro pc, per esempio l'eseguibile controlla che il numero di serie dell'hard disk sia sempre quello ma come chiave hardware possiamo inrendere anche un dispositivo che si attacca alla porta parallela, poi ne parler in un altro tutorial (e saranno dolori...), in linea di massima tutti questi metodi possono essere superati, ne esamineremo con calma la maggior parte dei casi. Di cosa abbiamo bisogno Per poter crackare un prog abbiamo bisogno di un Debugger, un Disassembler un un editor esadecimale e volendo un paio di prg come regmon e filemon, vediamo a cosa servono: Il debugger un po' la finestra sul programma del cracker, indispensabile, il migliore sicuramente Softice della Numega. La versione che troverete sar l'ultima cio la 3.24, un prog del genere serve a vedere il codice assembler del programma, se non sapete cosa significhi questa parola dovete far assolutamente riferimento ai tutorial di assembler per poter continuare; comunque il codice lo scheletro del programma cio la sua struttura, con questo prg possiamo *navigare* all'interno dello shareware per poterlo poi crackare.

Il disassembler che useremo si chiama W32 Dasm ed un prg molto simile al debugger, solo che quest'ultimo ci disassembla (cio lo converte in assembly) un file e ci consente di trarne varie informazioni, il metodo di crackare un prg con un disassembler viene definito *passivo* perch non si pu interagire direttamente con le funzioni del prg. L'editor esadecimale, io uso Hex Workshop, serve per poter vedere il codice, come dice la parola stessa, esadecimale, quest'operazione viene in genere utilizzato per lo sviluppo del file crack, cio un piccolo eseguibile che serve a modificare quanto basta il prg per renderlo libero dalla protezione. Regmon e Filemon sono invece due utilissimi prg che rispettivamente ci consentono di vedere ci che un prg qualunque legge nel registro di windows e quali file legge, scrive o cerca. Spero che vi stiate chiedendo il perch dell'utilit di questi due ultimi tools, ebbene eccovi la risposta, spesso uno shareware inserisce nel registro di windows o in alcuni file delle informazioni di vitale importanza come ad esempio i giorni che mancano prima dell'espirazione oppure le info sulla registrazione, le informazioni del reg. ed i file sono spesso nascosti in chiss quale directory e con filemon e regmon possiamo scovarli...;) Se volete ricercandoli o in questo sito o nel web. Scaricate tutti questi prog ed provate ad usarli uno per uno, ricordate solo che softice FONDAMENTALE mentre gli altri potrete prenderli in un secondo momento. Un ultimo avvertimento: fare il cracker non un'attivit TROPPO legale quindi cercate di rimanere nell'ombra ed evitare di dire a tutti che vi chiamate Pinco Pallino, che vivete a Lilliput e che fate il cracker 24 ore al giorno, potrebbe essere molto pericoloso. Potete crackare in casa vostra tutti i programmi che volete al solo scopo didattico, ma non potete diffondere il relativo crack, quindi a buon intenditore..... Arrivederci al prossimo tutorial ;) Quequero

Tutorial N2 10-2-1999 Il nostro primo crack!!! Eccoci di nuovo qui, in questo secondo tutorial crackeremo il nostro primo programa, ma quale? Bh la risposta mi sembra ovvia, crackeremo uno dei nostri tools, cio Hex Workshop 2.54, ma bando alle ciance ed iniziamo....

Avete insallato Softice e Hex Workshop? Se no l'avete fatto allora provvedete. Avviate il programma e un nag-screen vi dir che questa la prima volta che usate questo prodotto e che deve essere registrato, cliccate su ok e vedrete in alto a destra una scritta: "Demonstration version" passateci sopra con il mouse e vedrete che in realt un pulsante, bene bene cliccateci sopra e un box far la sua comparsa chiedendovi un serial number; questa la protezione che andremo a rimuovere... Premete ctrl+d e softice popper sul monitor, come potrete subito constatare il mouse non c' ma sostituito da un quadratino bianco, se quel quandratino non si muove significa che avete sbagliato a settare la porta di comunicazione durante il setup, riavviate l'installazione e cambiate, tornate di nuovo in Softice (ctrl+d) e gurdatelo attenamente, noterete sicuramente delgli strani simboli e vedrete anche che durante l'esecuzione del debugger non potrete interagire con Windows, la prima cosa da fare ottimizzare la finestra, per farlo potrete scaricare qui il mio file "winice.dat" e sostituirlo al vostro, oppure potrete scrivere sempre in softice questi comandi: line 60 invio wl invio wc 45 invio code on invio wr invio faults off invio Se non vorrete scrivere tutto questo ogni volta che riavviate windows vi consiglio di scaricare il mio file oppure di modificare il vostro, sull l'ottimizzazione e l'uso di Softice dedicher il mio prossimo tutorial. Torniamo a noi, come si inizia a sbirciare il codice? E' semplicissimo, per prima cosa dovete identificare un possibile punto d'attacco, ma noi questo l'abbiamo gi fatto (mi riferisco al box che chiede il serial number), poi dovete scoprire quale funzione utilizza il prg per prelevare il testo dall'edit box, cercher di essere pi chiaro; allora, quando scriviamo un numero e premiamo "Register" il programma v a "guardare" ci che stato scritto, confronta quel risultato con quello reale e se sono uguali procede alla registrazione, per carpire il testo si usa in genere una funzione chiamata "GetWindowTextA", la "A" finale st ad indicare che la funzione presa in considerazione quella a 32-bit e non a 16. Come si f a sapere se un prog. usa una funzione oppure un'altra? Per scoprirlo possiamo fare due cose: andare a tentoni oppure cliccare col pulsante destro del topo sul file e andare su anteprima (se non c' si deve installare e si trova sul cd di windows), apparir tutta una lista delle funzioni che utilizza. Ma andiamo a registrare il prg, premiamo ctrl+d (da ora in poi scriver ^D) e scriviamo: bpx getwindowtexta. *** Ma cosa significa questo oscuro comando? Bh vediamolo: bpx significa breakpoint on execution e getwindowtexta la funzione sulla quale vogliamo brekkare, in parole povere non facciamo altro che chiedere a Sice di generare un'interruzione (che far apparire la schermata del debugger) quando Hex-Workshop giunge su quella funzione, in pratica il breakpoint una "trappola" che useremo praticamente sempre per fare ingresso nel codice di qualunque prg. Tanto per capirci possiamo dire che spesso useremo l'istruzionebpx messageboxA per far poppare Sice quando ci viene mandato il box con su scritto: Insert the correct password.....The number is incorrect ecc..... Se avete problemi o non avete capito qualcosa scrivetemi ed io cercher di aiutarvi. *** Premiamo invio e poi scriviamo X oppure premiamo F5 per tornare a

win. A questo punto utilizziamo un cosidetto dummy number, cio un numero che utilzzeremo spesso come "fake number", io uso sempre 666111666, inseriamo quindi questo numero nell box e premiamo ok! Come speravamo vediamo Softice che fa la sua comparsa, adesso ci saranno una serie di numeri e scritte probabilmente incomprensibili, non vi preoccupate perch presto impareremo a conoscerle. Premiamo una volta F11 (serve per tornare da una chiamata ad una routine), 3 volte F12 (questo comando esegue una funzione finch non trova l'istruzione "RET" che significa return),, 22 volte F10 (questo serve per fare single-step in una funzione, in pratica con F10 si procede passo passo nel codice) e scriviamo: r fl z. *** Riassumiamo il tutto: F12: Esegue una funzione finch non trova un'istruzione di ritorno F11: Torna da una chiamata alla rispettiva routine F10: Esegue ogni singola istruzione, in questo modo procediamo passo passo nel codice. F8: Esegue semplicemente un'istruzione, viene in genere usato per seguire qualche chiamata (CALL) importante. Una volta che saremo nel codice premeremo quasi sempre F11 come primo tasto e poi a seconda dei casi utilizzeremo F12 e F10. F5: Torna a Winzoz. r fl z: Questa istruzione parecchio importante ed user un breve esempio per spiegarla: quando la barra bianca del debugger passa su un jump (sono tutti jump quelle istruzioni che iniziano con la "J" come JMP, JNE, JAE, JB, JC...) sulla destra appare una scritta del tipo: "JUMP" oppure "NO JUMP", bene, con questa istruzione cambiamo il valore del flag Z, cio trasformiamo la scritta "JUMP" in "NO JUMP" e viceversa, tutto ci molto utile nel caso che ci sia un salto dopo un'istruzione che controlla l'esattezza di un numero seriale (cio la funzione salta se il seriale esatto oppure non salta e ci manda il messaggio di errore), infatti con r fl z potremmo costringere la funzione a saltare e quindi anche a registrare il prg....;)) *** Premiamo F5 (scriviamo un user name e una company a piacere) e possiamo felicemente constatare che il programma stato registrato. Adesso vi spiegher il codice che avete visto cosa significava. Dopo aver premuto tutti quei tasti vi siete trovati davanti a delle righe simili a queste: Attenzione i numeri prima dei due punti non sono stati inseriti poich i vostri saranno sicuramente diversi. Ricordate anche che le istruzioni JZ (jump if zero) e JE (jump if equal) oppure JNZ (jump if not zero) e JNE (jump if not equal) sono equivalenti e che il W32DASM sostituisce sempre JZ con JE e JNZ con JNE. # significa: "numero" quindi #3 = a "numero 3" :0042625B E8CC4E0200 call 0044B12C :00426260 8B8DFCFEFFFF mov ecx, dword ptr [ebp+FFFFFEFC] :00426266 83C164 add ecx, 00000064 :00426269 E812BAFDFF call 00401C80 :0042626E 50 push eax :0042626F 8D45DC lea eax, dword ptr [ebp-24] :00426272 50 push eax :00426273 E8C82D0100 call 00439040 :00426278 83C408 add esp, 00000008 :0042627B 68E8F74700 push 0047F7E8 :00426280 8D45DC lea eax, dword ptr [ebp-24] :00426283 50 push eax :00426284 E867450100 call 0043A7F0

:00426289 83C408 add esp, 00000008 :0042628C 85C0 test eax, eax<--- controlla il # vero con il nostro :0042628E 0F8414000000 je 004262B3<-- se il # vero salta a 004262A8 (ricordate l'esempio dell'istruzione "r fl z" ?) :00426294 8D45DC lea eax, dword ptr [ebp-24] :00426297 50 push eax :00426298 E823110100 call 004373C0 :0042629D 83C404 add esp, 00000004 :004262A0 8945EC mov dword ptr [ebp-14], eax :004262A3 E907000000 jmp 004262AF :004262AF 837DEC00 cmp dword ptr [ebp-14], 00000000 :004262B3 0F8479000000 je 00426332<--ricontrollalo e registra se vero :004262B9 8B8DFCFEFFFF mov ecx, dword ptr [ebp+FFFFFEFC] :004262BF 83C164 add ecx, 00000064 Bene bene, vediamo cosa abbiamo fatto: immaginate un omino che di mestiere fa il corridore, qualcuno (la funzione) gli dice dove deve andare, gli d un foglio con un numero (666111666) e gli dice anche di seguire le indicazioni, l'omino parte e trova una lettera, la apre e controlla (test eax, eax) il suo numero con quello della busta, un indicazione (je 004262B3) gli dice di saltare ad un altro pezzo di strada se il suo numero uguale a quello della busta, nel nostro caso l'omino continua a correre finch non incontra un'altra indicazione (cmp dword ptr....., 00000000) che gli dice dice di controllare "SE" il suo numero sbagliato, se non lo un'altra indicazione (je 00426332) gli comunica che pu arrivare al traguardo usando qualche scorciatoia (va bene cos aLoNg3x? ;) ), questa spiegazione credo sia stata pi facile da capire. Potremmo riassumere la storia dell'omino in questo modo: il corridore arrivato al segnale je 00426332 (je= jz e jz= jump if zero) stato gabbato da un furfantello (io il cracker) che ho cambiato momentaneamente le lettere trasformando "je" in "jmp" cio jump, che significa: "Qualunque numero hai prendi una scorciatoia!" Bello ehh? Si, un'ultima cosa e poi vi faccio riposare: il comando "r fl z" cambia solo momentaneamente il valore del flag, in pratica solo fino al riavvio del programma, se volessimo diffondere un crack, dovremmo creare un file che cambi il "je" in "jmp" ci pu essere fatto anche con l'editor esadecimale (ma nel nostro caso non necessario) vi spiegher tutte le tecniche nei prossimi tutorial. Ciao e buon crack a tutti. Piccola nota: In genere tutti i prog. hanno un # check all'avvio, in pratica controllano che il numero di registrazione sia esatto, questo serve ad evitare che chiunque possa inserire un numero qualsiasi e registare il prg. Hex-Workshop a registrazione esatta crea un file di registro (Hexworks.reg) dove inserisce tutte le informazioni, il file assume questa forma: ********************************************* * 666111666 Quequero * * CrackZ Corp. * * K * *************************************** Ovviamente asterischi esclusi!!! Una volta creato il file il prg non mostra pi la scritta "Unregistered" ne il pulsante di registrazione "Demo Version". Quequero Vorrei ringraziare aLoNg3x per avermi dato acluni consigli su questo tute...

Tutorial N3 16-2-1999 Impariamo ad usare SoftICE In questo tutorial impareremo ad usare SoftICE, conosceremo l'uso delle varie funzioni ed impareremo anche a modificare il codice di un programma. SoftICE Come abbiamo gi detto SoftICE ci mostra il codice assembler di un programma, noi poi per scraccherellare il tutto abbiamo bisogno sia di conoscere l'Assembly, sia di saper usare il debugger, infatti come potremmo guidare una macchina senza conoscere il codice stradale e senza avere la patente? Uno dei comandi che useremo pi spesso sar sicuramente "bpx" cio breakpoint on execution che in pratica fa poppare Sice quando per esempio viene eseguita una funzione (GetWindowTextA, GetDlgItemTextA, MessageboxA ecc...) ma ovviamente ne esistono altri come per esempio: bmp: breakpoint su un accesso alla memoria (possiamo utilizzarlo per vedere se una funzione legge o scrive su un determinato indirizzo) bpr: bp (breakpoint) su un rango di memoria bpio: bp su un accesso I/O bpint: bp su un interrupt bmsg: bp su un messaggio (lo useremo per brekkare su funzioni come WM_GETTEXT). Per maggiori informazioni sui breakpoint vi rimando a questo tutorial. Task: Questo comando visualizza tutti i processi attivi, viene in genere

utilizzato in combinazione con Hwnd. Hwnd: Mostra l'handle delle finestre di un determinato programma. Ora vi spiegher meglio come utilizzare questo comando insieme a bmsg. Per prima cosa scegliete un programma vittima (io user Hex-Workshop), avviatelo ed aprite la finestra di registrazione, avviate Sice (^D) e scrivete task per vedere con quale nome gira sotto Winzoz l'H-Workshop. Il nome che appare per primo e che sembra essere l'unico possibile : Hworks32. Bene bene, scriviamo: Hwnd Hworks32 e premiamo invio. Vedrete adesso molte scritte, noi vogliamo cercare l'handle della casella di testo nella quale dobbiamo scrivere il numero seriale, ma come si f? Bh l'unico modo che io conosca scriversi tutti gli handle (prima colonna a sinistra) che presentano l'attributo edit nella colonna class-name (la 4 da sinistra) e poi provarli uno ad uno scrivendo: bmsg xxxx (qui va inserito un handle) wm_gettext, ecco un esempio: task hwnd hworks32 bmsg 01A5C wm_gettext. Una volta trovato quello giusto Sice popper dopo aver premuto il pulsante di registrazione. bd*: Disabilita tutti i bp pu essere sostituito p.e. con bd00 (disabilita il 1 bp) be*: Abilita tutti i bp il resto uguale a "bd" bl: Llista tutti i bp che stiamo utilizzando se appare un "*" il bp disabilitato bc*: Cancella tutti i bp la sintassi e come bp e be bh: Ci dice tutti i bp che abbiamo usato dall'accensione del pc (molto utile) ?: p.e. "? eax" ci dice quale valore esadecimale, decimale ed ASCII contiene eax d: "d eax" dump eax, ci f vedere il suo indirizzo esadecimale (difficile da dire a parole) code on-off: f apparire il codice esadecimale di fianco alle istruzioni, ecco un esempio: 015F:00425867 JNZ 00425921 <-------code off 015F:00425867 751E JNZ 00425921 <-------code on |----|<-------codice esadecimale cercate di tenere questa istruzione sempre abilitata perch molto importante, ora mi spiegher meglio: se vogliamo cambiare un JNZ 00425921 in JMP 00425921 dovremmo aprire l'eseguibile con l'editor esadecimale, cercare 751E e cambiarlo in EB1E, infatti EB significa JMP e 1E significa 00425921, nelle prossime pagine vi mostrer una tabella con quasi tutti i valori esadecimali delle varie istruzioni, dovrete ricordare sempre che gli ultimi due caratteri (funziona solo per le istruzioni semplici a 4 caratteri, le altre cambiano) di ogni valore indicano l'indirizzo o il registro a cui si riferiscono, quindi dovrete cambiare solo i primi due e non gli ultimi a meno che non vogliate cambiare la direzione del salto oppure il nome del registro. P.E. il valore 85D2 significa: TEST EDX, EDX (ricordate questa istruzione? se no andate al tute N2) per se lo cambiamo in 85F6 diventer: TEST ESI,

ESI, avete capito? a (address) : "a 015F:00425867" ci permette di cambiare ci che si trova all'indirizzo 015F:00425867, una volta premuto invio potremo scrivere per esempio: TEST EAX, EAX cos il jnz verr cambiato in test... e (address): edit address, con questa funzione non possiamo cambiare le lettere come con "a 015F:00425867" ma dobbiamo agire sui valori esadecimali. Una volta premuto invio apprir una finestra che mostra i valori, noi andremo a prendere i primi 4 caratteri "751E" ed andremo a scrivere "EB1E", vorrei ricordare che tutti i cambiamenti fatti dal debugger funzionano solo fino a che si riavvia il prog, dopodich va tutto a farsi benedire.

Funzioni: Visual Basic __vbastrcmp,__vbastrcomp: Queste istruzioni vengono usate in VB per far comparire le stringhe (non chiedetemi nulla a riguardo visto che non conosco per niente il VB). Per usarle si deve mettere un bp su una delle due, inserire un numero nel box di registrazione, premere ok, aspettare Sice e prima di premere F11 si vede cos' stato messo nello stack. Si esamina un registro (in genere EBP) in questo modo: dd ebp e si controllano gli ultimi 8 valori con questo comando: d xxxxxxxx si potrebbe anche trovare un seriale ;)))) __vbaR8Str: non ne sono sicuro ma dovrebbe essere l'equivalente di GetWindowTextA. rtcmsgbox: Questo MessageboxA in VB C/C++ GetPrivateProfileStringA Legge il file .INI dove spesso viene registrato il seriale, questa funzione si usa per disabilitare il number check all'avvio del programma. GetWindowTextA L'abbiamo gi usata, comunque serve a copiare ci che si trva nelle caselle di testo. GetDlgItemTextA Praticamente ugule alla precedente. hmemcpy Questa funzione grabba i tasti premuti sulla tastiera e puo essere sfruttata a nostro vantaggio nei sistemi di protezione che non utilizzano funzioni standard (GetWindowTextA, GetDlgItemInt, MessageBoxA ecc...) oppure in quei sistemi che abilitano il pulsante di registrazione solo se il codice esatto, questo breakpoint funzioni infatti ogni volta che noi premiamo un tasto..bello vero? Per ora altri comandi non mi vengono in mente. MessageBoxA F apparire un box di messaggio, la possiamo usare per entrare nel codice del programma dopo la "Beggar off" cio il messaggio che ci dice che abbiamo sbagliato il seriale ecc.... GetSystemTime Vede l'ora del sistema e si usa nei programmi che scadono dopo un'ora, due ore ecc....Per utilizzarla basta mettere un bp su di essa ed avviare il programma. GetLocalTime Controlla l'ora, il giorno ed il mese. Si usa nei programmi a scadenza di 30, 60, 90 gg ecc....Funziona come la

precedente. SetTickCount Da quello che ho potuto vedere la funz. viene usata spesso per vedere negli shareware quanti giorni mancano all'espirazione del prog. Cambiamo il codice al programma Dopo aver scraccherellato per benino il nostro prog e dobbiamo cambiare qualche byte al programma necessario sapere come cambiare le varie istruzioni, supponiamo di avere un pezzo di codice simile a questo e vediamo come ci dobbiamo comportare... :004010CE 8B06 mov eax, dword ptr [esi] :004010D0 85C0 test eax, eax :004010D2 7409 je 004010DD :004010D4 40 inc eax :004010D5 E8E6EB0000 call 0040FCC0 :004010DA 83C404 add esp, 00000004 ^---codice ^---istruzioni esadecimale Il nostro crack consiste nel cambiare jE 004010DD in JMP 004010DD, per farlo avremo bisogno di cercare quel pezzo di codice esadecimale all'interno dell'H-Workshop. Prendiamo nota di qualche numero prima e dopo del salto come ad esempio 85c0740940E8E6, clicchiamo sul pulsante "find" ed inseriamo quei numeri, il nostro bersaglio il num. 7409 e per cambiarlo in jmp baster prendere dalla tabella qui sotto i primi due numeri dell'istruzione JMP e mantenere integri i secondi due, cos facendo sostituiremo l'istruzione 7409 in EB09 (vorrei dire che se nel codice del debugger doveste trovare un jump che abbia pi di 4 cifre esadecimali allora dovrete usare il comando a xxxxxxxx, fare i cambiamenti a mano e vedere cosa appare in Sice, segnarlo ed andarlo a cambiare nell'editor). E se il nostro crack avesse richiesto l'eliminazione dell'istruzione inc eax? In questo caso bastava cercare la solita stringa e cambiare il 40 con 90, questo numero equivale all'istruzione NOP, cio No Operation, significa che l non deve succedere nulla e si deve passare oltre. Se vi capitasse di dover cancellare un'istruzione o di dover lasciare spazi vuoti (p.e. se 68c88c deve diventare un jmp non potrete mai scrivere ebc88c) ricordate di sostituirli SEMPRE con un NOP. Se per caso non siete sicuri di qualche cambiamento vi ripeto di provare prima con a xxxxxxxx. Comando Effetto EBXX0 JMP 75XX JNZ 7CXX JL 76XX 77XX JA 33XX XOR XXX, XXX Comando Effetto

7EXX JLE 7DXX JGE 7FXX JG 73XX JAE 74XX JE/JZ F4 HLT 90 0BXX 85XX 0000 FFFF C3

JBE

RET

INVALID

ADD [EAX], AL

TEST XXX, XXX

OR XXX, XXX

NOP Quequero Passiamo ora al 4 tutorial dove craccheremo un prog facile facile ed impareremo a "patchare" il prog.

Il nostro 2 crack

Eccomi di nuovo qui a scrivere un altro tute, scusate la mia assenza ma sono stato estremamente impegnato e poi ho dovuto cercare un prog molto facile da craccare, questa volta parleremo di AdWiper v1.02, questo proggy non fa altro che velocizzare la connessione eliminando tutti quei noiosi banner. Lo potrete trovare qui. Iniziamo, per prima cosa installate il prog (mi sembra ovvio ;) ed apriamolo, vediamo subito un invitante bottone che ci chiede di registrare AdWiper (anche se a noi dice solo "crackami, cackami" ;), clickiamoci sopra e vediamo apparire un grazioso box che ci chiede un seriale....mmmmm bene. Vogliamo trovare il seriale? Non sia mai! Perch sniffare il numero (che da lamer) quando abbiamo le potenzialit di disabilitare il check? In realt questa la soluzione pi semplice da attuare, ed questa la strada che prenderemo. Apriamo il nostro fidato W32DASM, facciamogli disassemblare l'eseguibile, clickiamo sul secondo pulsante da sinistra (String Data Referencies) e vediamo di trovare qualche "clue" oppure la "Beggar off" cio: Incorrect Password, Your number does not match, Number Incorrect ecc... Ci siamo capiti? Sulla prima riga leggiamo "Thank you for registering" azzzz buono, facciamo doppio click sulla scritta ed avremo davanti qualcosa del genere: * Referenced by a CALL at Address: |:00402787 | :00401400 6AFF push FFFFFFFF :00401402 6891DF4100 push 0041DF91 :00401407 64A100000000 mov eax, dword ptr fs:[00000000] :0040140D 50 push eax :0040140E 64892500000000 mov dword ptr fs:[00000000], esp :00401415 51 push ecx :00401416 8B442414 mov eax, dword ptr [esp+14] :0040141A 53 push ebx :0040141B 56 push esi :0040141C 57 push edi :0040141D 8BF1 mov esi, ecx :0040141F 50 push eax * Possible Reference to Dialog: DialogID_0066 | * Possible Reference to String Resource ID=00102: "Thank you for Registering!" | :00401420 6A66 push 00000066 :00401422 89742414 mov dword ptr [esp+14], esi :00401426 E8EC110100 call 00412617 :0040142B 8D7E5C lea edi, dword ptr [esi+5C] Mmmm questa cosa non mi piace, non vedo n jump n test n altro, molto male, allora forse non va bene qui, cosa facciamo? Nulla, apriamo di nuovo SDR (String Data Referencies) e facciamo un altro doppio click sulla prima riga....dovremmo avere qualcosa del genere: :004021BB E890140000 call 00403650 :004021C0 83C408 add esp, 00000008 :004021C3 85C0 test eax, eax :004021C5 745F je 00402226 <----Ricordate il numero 745F ci servir dopo

* Possible Reference to Dialog: DialogID_0066 | * Possible Reference to String Resource ID=00102: "Thank you for Registering!" | :004021C7 6A66 push 00000066 :004021C9 8D4C240C lea ecx, dword ptr [esp+0C] :004021CD E8B6440100 call 00416688 :004021D2 6A00 push 00000000 Adesso va bene, come potete vedere all'indirizzo 004021C5 troviamo un bel "jump if equal", se la funzione in quel punto non salta si dovrebbe avere il messaggio di ringraziamento (ma che bravi questi programmatori, ci ringraziano anche se crackiamo i loro programmilli ;), provvediamo allora alla registrazione, dovrebbero bastare due semplici "nop" per registrare il prog, ma a questo punto come facciamo a cambiare i "connotati" all'adwiper? Nulla di pi semplice: andiamo in W32DASM, facciamo doppio click sull'indirizzo del salto (004021C5) e se guardiamo in basso a destra dovremmo avere una scritta di questo genere: @Offset xxxxxxxxh, che nel bostro caso dovrebbe essere 000015C5h (la "h" sta a dire che si tratta di un numero esadecimale). Copiamo da qualche parte questo offset, apriamo l'Hex-Workshop, carichiamo AdWiper.exe ed andiamo in Edit|Go to..., inseriamo l'offset di prima e premiamo invio, ci troveremo davanti ad un ammasso di cifre esadecimali e guarda caso il cursore si ferma su un 7 seguito da un 4 un 5 ed una F, in totale:745F, se andiamo a guardare in W32DASM, affianco all'istruzione JE 00402226 c' scritto proprio 745F, ci significa che questo il codice esadecimale del salto, cavolo che carino.....adesso per patchare il prog dobbiamo sostituire questo numero con 9090 che significa (come dovreste sapere) nop nop, cio la funzione arrivata in quel punto non f nulla e passa oltre, cio alla registrazione. Salviamo il file e quando ci viene chiesto di farne un backup diciamo di si tanto per essere sicuri. Il prog ogni volta che veniva avviato controllava se era stato registrato e quindi faceva apparire il pulsante register... e cazzi vari, adesso come potrete felicemente constatare viene presentata all'inizio la scrittina "Thank you for Registering". Bh ci vediamo al prossimo tutorial. Vorrei cogliere l'occasione di salutare alcuni cari amici come: NeuRaL_Noise, +Malattia, War-lock, Alor, Along3x, _GEnius, ^courier, YanOrel, Killexx, d4emon, Insanity, EL_Diablo (e la sorella ;), T3x, KeRoUaC, Anub|s, N6U5, Vecna e basta, se ho dimenticato qualcuno non l'ho fatto di proposito. Se volete contattarmi mi troverete spesso su IRCnet, fatemi una query. Alla prossima Quequero

Potrebbero piacerti anche