CrackMe 1,2 e 3 di PhoX

 

by "Jnzer0"

 

16/06/2001

UIC's Home Page

Published by Quequero

 

Hai spiegato abbastanza bene la risoluzione del corso, anche se hai sbagliato il mio nick :p

Ah, la prossima volta non usare word per compilare il form :) ok?

 

....

E-mail: jnzer0@interfree.it

....

Difficoltà

(*)NewBies ( )Intermedio ( )Avanzato ( )Master

 

Crackeremo i primi 3 CrackMe di PhoX


CrackMe 1,2 e 3 di PhoX


Written by Jnzer0


Tools usati

SoftIce 4.5 (o precedente) 
Hexworkshop oppure

URL o FTP del programma

Allegati al Allegato al secondo corso per Newbie alla UIC, oppure su crackmes.cjb.net

Notizie sul programma

3 semplici crackme, ovvero programmi costituiti dalla sola protezione fatti apposta per essere crackati.

Essay

Crackme1:

Questo è il più semplice tra questi crackme, bisogna esclusivamente togliere la nag che si presenta all'apertura del programma. Ok aprimamo con "anteprima" crackme1.exe e vediamo le api che utilizza: quella che ci interessa è MessageBoxA, che viene utilizzata per fare i nagscreen. Bene, premiamo Ctrl+d per entrare in SoftIce e scriviamo:

bpx messageboxa, ovvero breakpoint on execution sull'api messageboxa.

Premiamo poi F5 per tornare a Windows e avviamo il programma, e SoftIce farà la sua comparsa, e saremo all'interno di USER32.dll, ovvero la dll in cui è contenuta MessageBoxA; ora premiamo F11 per tornare alla call che ha chiamato MessageboxA e saremo di nuovo in Windows, con il nostro bel nagscreen davanti al naso. Premiamo Ok e il controllo passa di nuovo al SoftIce; ora siamo all'interno del crackme (lo si capisce dal fatto che nella barra verde sopra al prompt dei comadi c'è scritto crackme1.exe)un istruzione sotto la call, dovreste vedere più o meno questo:

CALL USER32!MessageBoxA                  <----chiamata dell'api MessageBoxA in USER32.dll

MOV DWORD PTR [00402000], 00004003<-----qui dovrebbe essersi fermato il cursore del Sice

MOV DWORD PTR [00402001], 0040113d

adesso apriamo crackme1.exe con hexworkshop e clicchiamo sul tasto a forma di lente di ingrandimento,ovvero find, adesso scriviamo nel box che si è appena aperto "E8DA010000" (senza gli apici) e lo mettiamo al posto di E8DA010000 9090909090. Bene, adesso il primo  crackme è stato patchato.

Crackme2:

In questo crackme viene richiesto un serial, e se immettiamo un nome sbagliato viene fuori un massagebox che ci dice "Wrong Serial" . Bene, vediamo con "anteprima" che api utilizza, quella che ci interessa questa volta è getwindowtextlenghta, questa funzione serve per "salvare la lunghezza in caratteri della barra del titolo di una specificata finestra" (come dice il Que ;0).

Mettiamo un bel: bpx getwindowtextlengtha, apriamo il crackme2.exe e clicchiamo Ok sotto la barra dove si deve mettere il serial (lasciate pure "Enter Serial Here") e Sice farà la sua apparizione, premiamo F11 per uscire da USER32.dll, e vedremo qualcosa del genere:

CALL USER32!GetWindowTextLengthA<----chiama l'api GetWindowTextLengtgA

MOV [004020E9], EAX <----qui si è fermato il cursore del SoftIce 

MOV ESI, EAX

Adesso apriamo hexworkshop e premiamo l'icona con la lente di ingrandimento e scriviamo "751E" (ovvero "jnz 000007d6" all'indirizzo 000007b6; per la conversione da asm a esedecimale ho usato il PHOG, scaricatevelo, è utile @:0) Estremamente utile oserei dire...NdQue e sotituitelo con 741E, ovvero jz (l'opposto di jnz).Prima del Jump(che sia jnz o Jz adesso non importa) il programma confrotava ESI con 0C, ovvero 12 decimale, questo vuol dire che prima il programma si registrava se si inseriva un serial di 12 caratteri mentre adesso il box di errore appare solo se si inserisce un serial di 12 caratteri. Volendo si potrebbe modificare il programmino in modo che si registri solo con 8 caratteri, o con quanti ne volete, ma adesso vado un pò di fretta.

Crackme 3:

Questo è quello che ho risolto in più tempo, comunque non è difficile.

Apriamo come sempre "anteprima" e vediamo che anche questo crkme utilizza getwindowtextlengtha (api più corte no eh?) per salvare il serial. Apriamo il SoftIce e mettiamo un: bpx getwindowtextlengtha. Ora schiacciamo Ok e SoftIce popperà, schiacciamo F11 e ci ritroviamo nel codice di crackme3.exe, la situazione sarà la seguente:

CALL USER32!GetWindowTextLengthA

MOV ESI, EAX <---muove in esi il numero di caratteri immessi

CMP ESI, 12 <---vede se il numero di caratteri immessi è uguale a 12 esedecimale ovvero 18 decimale

JNZ 0040121C <--- se i caratteri non sono 18 salta alla messagebox di errore

CMP BYTE PTR [EBX], 46 <---vede se il primo carattere inserito è uguale a 46h ovvero F(maiuscolo)

JNZ 0040121C <---se non è così và immediatamente alla messagebox di errore

CMP BYTE PTR[EBX+01], 69 <---secondo carattere=69(i)?

JNZ 0040121C <---se sì và avanti nel controllo, se no salta alla messagebox di errore

CMP BYTE PTR[EBX+03], 72 <---quarto carattere(perchè si parte da 00, quindi 03 è il quarto)=72(r)?

JNZ 0040121C <---se sì và avanti nel controllo, se no salta alla messagebox di errore

CMP BYTE PTR[EBX+04], 65 <---quinto carattere=65(e)?

JNZ 0040121C <---se sì và avanti nel controllo, se no salta alla messagebox di errore

CMP BYTE PTR[EBX+06], 57  <---settimo carattere=57(W maiuscolo)?

JNZ 0040121C <---se sì và avanti nel controllo, se no salta alla messagebox di errore

CMP BYTE PTR[EBX+07], 6F <---ottavo carattere=6F(o)?

JNZ 0040121C <---se sì và avanti nel controllo, se no salta alla messagebox di errore

CMP BYTE PTR[EBX+08], 72 <---decimo carattere=72(r)?

JNZ 0040121C <---se sì và avanti nel controllo, se no salta alla messagebox di errore

CMP BYTE PTR[EBX+0A], 78 <---undicesimo carattere(A=11 decimale)=78(x)?

JNZ 0040121C <---se sì và avanti nel controllo, se no salta alla messagebox di errore

CMP BYTE PTR[EBX+0C], 53 <---tredicesimo carattere=53(S maiuscolo)?

JNZ 0040121C <---se sì và avanti nel controllo, se no salta alla messagebox di errore

CMP BYTE PTR[EBX+0D], 75 <---quattordicesimo carattere=75(u)?

JNZ 0040121C <---se sì và avanti nel controllo, se no salta alla messagebox di errore

CMP BYTE PTR[EBX+10], 78  <---diciassettesimo carattere=78(x)?

JNZ 0040121C <---se sì và alla messagebox di congratulazioni, se no salta alla messagebox di errore

Quindi il serial corretto deve essere così: Fi*re*Wor*x*Su**x* (sarà qualcuno che gli stà sulle palle), dove gli asterischi sono caratteri scelti da voi. Si ma, noi vogliamo che compaia la messagebox di congratulazioni quando inseriamo un serial sbagliato ,non quando inseriamo il serial giusto. Io non sono riuscito subito a risolvere punto, e alla fine ho dovuto utilizzare il WDasm, apriamo crackme3.exe e clicchiamo sul penultimo dei tastini quadrati, ovvero StringDataReferences, nel box che appare si possono vedere tutte le stringhe contenute nel programma, e clicchiamo 2 volte su "Nice Works!!" che se vi ricordate è la caption (ovvero il testo contenuto nella righa alta blu delle finestre) della messagebox di congratulazioni. Adesso ci ritroveremo il cursore su "push 0040207F", *non muovetelo* e guardiamo nella riga bassa della finestra e tra le tante scritte dovrebbe esserci @Offset  00000800h, questo è l'offset della primo parametro della messagebox di congratulazioni. Adesso apriamo il crackme con hexworkshop e clicchiamo sul tasto find (la lente di ingrandimento), e cerchiamo 755F con 7543; così facendo il crackme quando fà il primo controllo se la prima lettera non è F(maiuscola) salta immediatamente al box di congratulazioni.

Note finali

Vorrei ringraziare QueQuero Quequero plz :) Quèquéro così ora sai anche la pronunia :P che ha fondato la UIC, che senza di essa non sarebbe uguale @:0) e voglio scusarmi per gli errori che probabilmente ho commesso in questo tute. Io non mi ritengo un neanche un newbie, ma un wannabe e ringrazio tutti quelli che hanno partecipato alla uic, che così facendo mi danno l'opportunità di imparare qualcosa di nuovo.

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. Comunque questi tre programmi sono stati fatti per essere crackati e quindi non abbiamo fatto niente di illegale, ma non dateci la colpa se utilizzate le tecniche qui descritte per "sproteggere" un programma coperto da copyrigth.

Noi reversiamo al solo scopo informativo e di miglioramento del linguaggio Assembly (anche se non mi piace tanto).