|
I primi 3 CrackMe di PhoX |
|
5/11/2000 |
by "Pispola" |
|
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 |
|
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.
Tools usati |
URL o FTP del programma |
Essay |
CrackMe2
* 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], 78Controlla 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
|
I soliti saluti a Crack-it e tutta la UIC
Disclaimer |