I primi 3 CrackMe di PhoX


5/11/2000

by "Pispola"

 
 

UIC's Home Page

Published by Quequero



Bravo Pis stavolta hai presentato un buon form, ma al di la di questo hai fatto un buon tute, complimenti, migliori ogni volta di più.

 
UIC's form
E-Mail: pispola_@tin.it
On-IRC: Pispola,Azzurra #Crack-it - FlashNET #Crack-it
UIC's form

Difficoltà

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

 

Cerchiamo di fare qualcosa per risolvere i CrackMe di PhoX 1, 2 e 3 Il primo sara' Togliere un Nag Screen mentre il 2° e il 3° sarà un normale Serial Sniffing.


I primi 3 crackMe di PhoX

Written by Pispola

Tools usati

SoftIce ,Win32Dasm,Ultraedit

URL o FTP del programma

UIC's Home Page

Essay

Ok Vediamo di risolvere insieme questi 3 CrackMe di Phox
CrackMe1
Questo Prg. chiede di togliere La nag che appare all'inizio facendo cosi' apparire direttamente la finestra con il pulsante di About.
Eseguiamo il Prg. e vediamo subito la Nag da eliminare ,visto che il prg. si puo' patchare segnamoci su cosa intervenire:
Nella parte blu' della finestra troviamo la stringa "CrackMe 1.0 by PhoX" e nel corpo della Nag "Plz registrate this CrackMe...".
Siccome per generare una Nag si devono passare dei parametri andremo alla ricerca di queste stringhe e non saremo lontani dalla soluzione!
Disassemliamo l'eseguibile con Win32Dasm e ci troviamo in questa posizione:
 
 
* Possible StringData Ref from Data Obj ->"CrackMe 1.0 by PhoX"
:0040100E push 00402079 qui' Passiamo la stringa "CrackMe 1.0 by PhoX"
* Possible StringData Ref from Data Obj ->"Plz registrate this CrackMe..."
:00401013 push 0040208D e qui la stringa "Plz registrate this CrackMe..."
:00401018 push dword ptr [00402048]
Dopo aver passato le 2 stringhe della Nag si procede con la Call che genera la Nag (non a caso lascio gli OpCode)
 
* Reference To: USER32.MessageBoxA, Ord:0000h
:0040101E E8DA010000 Call 004011FD
Perche' noi dovremo agire propio su di essi : i byte che compongono la chiamata li dovremo far diventare nulli (NOP).
Riprendiamo il nostro fidatissimo Dasm e posizioniamoci sulla riga :0040101E e leggiamo in basso (sulla barra inferiore) il codice di @offset che sara' 0000061Eh.
Ora con un editor esadecimale (io uso ultraedit) andiamo a ricercare il nostro offset che ci portera' nella posizione corretta senza errori, oppure se volete cercate la sequenza di OpCode(quella segnata in blu, attenzione che ce ne potrebbe essere una uguale in un altro punto del programma accertarsi che sia quella giusta) e una volta trovato il punto da patchare sostituite i byte E8 con 90 - DA con 90 - 01 con 90 - 00 con 90 - 00 con 90.
 
Salvare ed uscire, ora se tutto e' andato a buon fine la Nag dovrebbe essere sparita!
 

CrackMe2

Qui useremo di + Sice perche' non intendo modificare l'eseguibile ma trovare il giusto seriale
Ok Facciamo partire il 2° CrackMe:
E schiacciamo sul pulsante (io lascio direttamente Enter Serial Here), e lui ci risponde Wrong Serial.
disassembliamo l'eseguibile a andiamo alla ricerca di Wrong Serial e prendiamo in considerazione questo pezzetto di codice:

* Referenced by a Jump at Address :004011B6
|
:004011D6 push 00000030
|
:004011D8 push 004020ED Qui viene passata la stringa "luuuzeeer"

:004011DD push 004020FB Qui viene passata la stringa "Wrong Serial"
:004011E2 push dword ptr [00402048]

Che è condizionato dal salto dell'indirizzo :004011B6 andiamo a vedre che dice

* Reference To: USER32.GetWindowTextLengthA, Ord:0000h

:004011A7 Call 00401247
:004011AC mov dword ptr [004020E9], eax
:004011B1 mov esi, eax Mette il n° dei caratteri del serial in esi
:004011B3 cmp esi, 0000000C Controllo se e' = 12
:004011B6 751E jne 004011D6 Salta se è sbagliato
:004011B8 push 00000030

A questo punto basterebbe noppare il jne ed il gioco sarebbe fatto ma noi abbiamo detto che non vogliamo modificare l'eseguibile (Per quistioni di principio le cose degli altri non si toccano!!). Allora vediamo cosa si aspetta il programmillo...Vediamo che il controllo viene fatto subito dopo l'uscita da una call precisamente GetWindowTextLength che fara' questa API ? (vi metto la descrizione in lingua originale speriamo che prima o poi qualcuno faccia i sottotitoli) :-)

The GetWindowTextLength function retrieves the length, in characters, of the specified window's title bar text (if the window has a title bar). If the specified window is a control, the function retrieves the length of the text within the control.
La funzione GetWindowsTextLenght salva la lunghezza in caratteri della barra del titolo di una specificata finestra (se la finestra ha una barra del titolo). Se la finestra specificata è un controllo, la funzione salva la lunghezza del testo che si trova all'interno del controllo, tutto chiaro? :) NdQue

Allora questa API ci restituiscie il numero di caratteri immessi ,continuando con l'esecuzione passo passo il numero di caratteri viene messo in esi e confrontato con il valore fisso 0000000C =12 se e' uguale salta e ci registra (inutile dire che qualsiasi seriale con 12 caratteri va bene!!!!!)

CrackMe3

Bene sotto col Terzo ,Facciamo partire e vediamo che chiede un seriale inseriamo Pispola e ci appare una finestra di Wrong Code!.

Disassembliamo e vediamo che la MessageBox di fallimento e' condizionata da un sacco di jmp e precisamente :

* Referenced by a Jump at Addresses:
:004011BB, :004011C0, :004011C6, :004011CC, :004011D2, :004011D8, :004011DE, :004011E4, :004011EA, :004011F0, :004011F6, :004011FC

Ok vediamo in che parte di codice ci catapultano: (e' buona cosa guardare sempre qualche riga + in su da dove viene effettuato il controllo si vedranno cose interessanti come in questo caso GetWindowText

* Reference To: USER32.GetWindowTextA, Ord:0000h

:004011A1 Call 0040126D
:004011A6 mov ebx, 00402098
muove in ebx il nosrto seriale
:004011AB push dword ptr [0040204C]

The GetWindowText function copies the text of the specified window's title bar (if it has one) into a buffer. If the specified window is a control, the text of the control is copied.

allora presumiamo che non sia come il caso di prima che ci interessava solo il n° di caratteri ma anche cosa scriviamo!

* Reference To: USER32.GetWindowTextLengthA, Ord:0000h

:004011B1 Call 00401279
:004011B6 mov esi, eax
muove in esi il n° di caratteri
:004011B8 cmp esi, 00000012
Confronta se e' uguale a 12h (18 decimale)
:004011BB jne 0040121C
altrimenti si arrabbia

ed ora cosa combina al nostro seriale??????(ricordate che e' stato messo in EBX)

:004011BD cmp byte ptr [ebx], 46 Controlla che il primo carattere sia uguale a 46h che ascii è F
:004011C0 jne 0040121C
altrimenti.......
:004011C2 cmp byte ptr [ebx+01], 69
Controlla che il primo carattere +01(cioè il secondo)sia uguale a 69h che ascii è i
:004011C6 jne 0040121C
altrimenti.......
:004011C8 cmp byte ptr [ebx+03], 72
Controlla che il primo carattere +03( il quarto)sia uguale a 72h che ascii è r
:004011CC jne 0040121C
altrimenti.......
:004011CE cmp byte ptr [ebx+04], 65
Controlla che il primo carattere +04( quinto)sia uguale a 65h che ascii è e
:004011D2 jne 0040121C
altrimenti.......
:004011D4 cmp byte ptr [ebx+06], 57
Controlla che il primo carattere +06(Settimo)sia uguale a 57h che ascii è W
:004011D8 jne 0040121C
altrimenti.......
:004011DA cmp byte ptr [ebx+07], 6F
Controlla che il primo carattere +07(Ottavo)sia uguale a 6Fh che ascii è o
:004011DE jne 0040121C
altrimenti.......
:004011E0 cmp byte ptr [ebx+08], 72
Controlla che il primo carattere +08(Nono)sia uguale a 72h che ascii è r
:004011E4 jne 0040121C
altrimenti.......
:004011E6 cmp byte ptr [ebx+0A], 78
Controlla che il primo carattere +0A(Undicesimo)sia uguale a 78h che ascii è x
:004011EA jne 0040121C
altrimenti.......
:004011EC cmp byte ptr [ebx+0C], 53
Controlla che il primo carattere +0C(Tredicesimo)sia uguale a 53h che ascii è S
:004011F0 jne 0040121C
altrimenti.......
:004011F2 cmp byte ptr [ebx+0D], 75
Controlla che il primo carattere +0D(Quattordicesimo)sia uguale a 75h che ascii è u
:004011F6 jne 0040121C
altrimenti.......
:004011F8 cmp byte ptr [ebx+10], 78
Controlla che il primo carattere +10(Diciasettesimo)sia uguale a 78h che ascii è x
:004011FC jne 0040121C
altrimenti.......
:004011FE push 00000030

Di conseguenza dovremo inserire un seriale con delle caratteristiche ben precise : N° di caratteri uguale a 18 ,e nelle posizioni sopra elencate quei determinati caratteri controllati una valida chiave potrebbe essere:

Fi,re,Wor,x,Su,,x, oppure FiPreIWorSxPSuOLxA (he he che simbiosi) :-)

Alla Prossima

                                                                                                                 Pispola
Note finali

I soliti saluti a Crack-it e tutta la UIC

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.
Noi reversiamo al solo scopo informativo e di miglioramento del linguaggio Assembly.