The Phoenix’s Solution
(Come cucinare La Fenice in 1000 gustosi modi!!!!)

Data

by "LoStNaMe69"

 

29/Gen/2004

UIC's Home Page

Published by Quequero


none

Grazie lost bel tute per essere il secondo, guai a te se usi di nuovo il Word ;p

none

....

E-mail: [email protected]

LoStNaMe69, azzuranet, canale Crack-it

....

Difficoltà

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

 

Ok il mio secondo tut per la uic......credo che si presenti un po’ meglio del primo, cmq andiamo avanti che ci sarà da divertirsi!!!


The Phoenix’s Solution

(Come cucinare la Fenice in 1000 gustosi modi!!!)
Written by LoStNaMe69


Introduzione

Andiamo a vedere come si puo convincere un prg a dirci la pas giusta rispetto al nome che abbiamo inserito, è divertente, elegante, e ti permette di fare il figo con gli amici : )!!!

Tools usati

Softice

Win32dasm(ho un avversione mistica per IDA e non so perché)

Hiew

LordPE

URL o FTP del programma

Sezione Crackme di questo sito!!!!

Notizie sul programma

Le regole del gioco sono trovare un serial valido per registrarci e creare un keymaker!!  

Essay

Era un notte buia e tempestosa e il prode cavaliere LoStNAMe69 era in rete alla ricerca di programmi cattivi che non erano ancora stati crackkati quando a un certo punto incotrò lei….in tutta la sua magnificenza, le ali aperte, avvolta in una luce abbagliante…..era proprio lei la FENICE…ehm

……Quequero non è che hai rimasto un po’ di quella cicoria che hai dato a Phobos un po’ di tempo fa, perché scrivere un delirio-tut2 senza mi sembra molto complicato!!!!

Deliri a parte e intanto che aspetto la cicoria vediamo di crackkare questo programmino, lo apriamo, andiamo su file e….exit? EXIT!!! Non ci prendo mai alla prima…..ehm….. allora andiamo su help, register, ed inseriamo i nostri bei dati fake-name e fake-serial e bpx su….GetWi….no…..GetDl….aspe….voglio andare a colpo sicuro, quindi lasciamo li Phoenix a grattarsi e lo riapriamo con il win32dasm…..clikkiamo sul tasto delle StringRef e…uhmmm…il nulla più totale……interessante, a questo punto mettiamo in attesa anche il win32dasm e apriamo LordPe cerchiamo tra i processi attivi troviamo Phoenix e facciamo un bel dump full, lo riapriamo con win32dasm e abbiamo guadagnato proprio le stringhe che ci interessano doppio click su “Application registered successfully”, notiamo che ci sono tutte le stringhe per tutti i casi possibili se non abbiamo inserito il nome, e se non abbiamo inserito il serial e poco più in su c’è una bella API SendMessageA, ma che simpatico ha usato un’API che viene richiamata da explorer e da altra aplicazioni  almeno una ventina di volte al secondo, quindi è una gara di velocità tra noi e Phoenix(almeno cosi è stato per me, ma se ce l’ho fatta io potete farcela anche voi…), torniamo dal nostro programma, che nel frattempo si dovrebbe essere addormentato, bpx su SendMessageA, ctrl+d e cercate di clikkare il tasto register tra un pop e l’altro quando il processo chiamante diventa Phoenix ricordatevi di far eseguire l’API 2 volte una per il nome l’altra per il serial, a questo punto ci sta un bel bc * una volta F11 e due volte F10 e se tutto è andato come doveva andare siamo esattamente qui:

:00401516     cmp eax, dword ptr [00403251]< -----in Softice è SendDlgitemMessageA :(!!!

:0040150D     test eax, eax

:0040150F     je 00401568 < ------salta alla messagebox di mancato inserimento del serial

:00401511     mov ebx, 004010DE

:00401516     cmp eax, dword ptr [00403251]< ----compara il numero di cifre del nostro serial con 19hex(25 dec.)

:0040151C     jne 00401568< ------se non abbiamo inserito un serial di 25 cifre salta alla MsgBox di errore

:0040151E     call 004015B7< ------Ruotine di controllo del serial!!!! :)

:00401523     mov ebx, 004010DE

:00401528     test eax, eax

:0040152A     je 00401568< -----se eax è = a 0 salta alla solita MsgBox di errore

:0040152C     push 00000040

:0040152E     push 00401023

:00401533     push 0040118F

:00401538     push [ebp+08]

:0040153B     call dword ptr [0040326A]< ---se eax è diverso da 0 goooooood woooork!!!!!:)

:00401541     push [ebp+08]

..............................

.........................

.............................

...........................

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:

|:004014EA(C), :0040150F(C), :0040151C(C), :0040152A(C)

|

:00401568     push 00000030

:0040156A     push 00401023

:0040156F     push ebx

:00401570     push [ebp+08]

:00401573     call dword ptr [0040326A]< -----MsgBox di errore!!!!

Bhe l’unica cosa da fare adesso è entrare nella call di controllo del serial no? Quindi viaaaaaaaa:

:004015B7                                 xor eax, eax < --------azzera eax

:004015B9                                 mov ebx, 0000003B

:004015BE                                 add ebx, dword ptr [00403251]

:004015C4                                 mov al, byte ptr [00403250]

:004015C9                                 mov cl, 04

:004015CB                                 div cl < ---- divide eax con cl

:004015CD                                 add bl, ah

:004015CF                                 mov byte ptr [00403255], bl

:004015D5                                 mov al, byte ptr [00403050] < ----muove in al la prima cifra del nostro serial

:004015DA 3A0555324000            cmp al, byte ptr [00403255] < -----compara la prima cifra del nostro serial con quella all’indirizzo 00403255

:004015E0                                 jne 0040161B < ----se non sono uguali salta fuori dal cilclo con tutto quello che ne consegue

:004015E2                                 xor ecx, ecx < ------azzera ecx che verrà usato come contatore

* Referenced by a (U)nconditional or (C)onditional Jump at Address:

|:00401619(U)

|

:004015E4                                 inc ecx < -----incrementa ecx di 1 perchè la prima cifra è già stata controllata

:004015E5                                 cmp byte ptr [ecx+00403050], 00 < -----controlla che il nostro serial non sia finito

:004015EC                                 je 0040161E < ------se è finito  vuol dire che è giusto e abbiamo indovinato il serial

:004015EE                                 mov al, byte ptr [00403255]

:004015F3                                 xor al, byte ptr [00403250]

:004015F9                                 dec byte ptr [00403250]

:004015FF                                 xor ah, ah

:00401601                                 mov bl, 1A

:00401603                                 div bl

:00401605                                 add ah, 41

:00401608                                 shr ax, 08

:0040160C 3A8150304000            cmp al, byte ptr [ecx+00403050] < ---compara il valore di al con le cifre del nostro serial

:00401612                                 jne 0040161B< ---se non sono uguali salta fuori dal ciclo e buonanotte al secchio!!!

:00401614                                 mov byte ptr [00403255], al

:00401619                                 jmp 004015E4 < ----continua il ciclo!!!!(ma và)

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:

|:004015E0(C), :00401612(C)

|

:0040161B 33C0                         xor eax, eax

:0040161D C3                            ret

Per trovare il serial giusto basta tenere d’occhio al all’indirizzo 0040160C…..e un serial l’abbiamo trovato, ma a questo punto le strade sono 2:

1)vi studiate bene il codice e programmate un keygen per i fatti vostri!!!

2)vediamo di dare una ritoccatina al programma in modo che ci dica il serial cosi facendo prendiamo i famosissimi 2 cani con un postino!!!(o era 2 piccioni con una fava? Boh!!!!)

Visto che sono pigro e di scrivere un keygen non ne ho assolutamente voglia e non ho neanche il tempo, io ritocco il programma….siete pronti…..siete caldi…….bene si parte!!!!!

Come avrete potuto notare ho lasciato gli opcode dei cmp agli indirizzi :004015DA e :0040160C perché è li che andremo cambiare il codice,  anche perché sono del tipo far( cioè sono composti da 5 o piu byte nel nostro caso 6) la lunghezza ideale per le nostre manie perverse :) 

All’indirizzo :004015CF muove in bl un valore che poi viene confrontato con la prima cifra del nostro codice(vorrei far notare che il nostro codice è allocato in chiaro all’indirizzo 00403050!!!) quindi se al posto di “cmp al, byte ptr [00403255] “ sostituiamo

“mov byte ptr[00403050], bl” il prg sposterà la prima cifra giusta(contenuta in bl)  all’indirizzo 00403050,per effettuare la modifica basta aprire Phoenix con Hiew e andare all’offset del cmp e modificarlo nel mov che abbiamo appena detto(per chi non lo sa che in Hiew non bisogna scrivere

“mov byte ptr[00403050],bl” ma semplicemente “mov  [000403050], bl”,io ho noppato il salto all’indirizzo :004015E0 perchè volevo andare sul sicuro......fate vobis :)!! e per la prima cifra siamo a posto....ora andiamo a vedere il ciclo di controllo delle altre cifre.

Allora....abbiamo ecx come contatore che viene subito incrementato di 1 perchè la prima cifra è già stata controllata, e all’indirizzo 0040160C abbiamo il nostro bel controllo tra la cifra calcolata da lui e quella inserita da noi, quindi anche sta volta modifichiamo il

“cmp al, byte ptr [ecx+00403050]” in “mov byte ptr[ecx+00403050], al”(in Hiew “mov [ecx+000403050], al”) cosi Phoenix farà un bel replace del nostro serial con il serial giusto il tutto all’indirizzo 00403050!(anche in questo caso ho noppato il jne dopo il cmp!!!)

Se avete fatto tutto bene e aprite il phonix con Win32dasm dovrebbe apparire cosi:

..................................

...............................

..............................

:004015CF     mov byte ptr [00403255], bl

:004015D5     mov al, byte ptr [00403050]

:004015DA    mov byte ptr[00403050],bl

:004015E0     nop

:004015E1     nop

:004015E2     xor ecx, ecx

..........................

.........................

Questo per la prima cifra il resto dovrebbe essere:

..............................

.............................

............................

:0040160C     mov byte ptr[ecx+00403050],al

:00401612     nop

:00401613     nop

:00401614     mov byte ptr [00403255], al

:00401619     jmp 004015E4

:0040161B     xor eax, eax

:0040161D     ret

....................

Dopo tutto sto casino resta da fare l’ultima cosa printare a video il serial giusto quindi andiamo all’indirzzo :00401533 push 0040118F(questo è il push della stringa di congratulazioni) e lo modifichiamo con “push 00403050” cosi quando andrà ad eseguire la messagebox all posto di dirci “bravo”

ci dirà il codice giusto per il nostro nome(woooowwwww)!!!

Tirando le somme adesso abbiamo due phenix.exe uno originale e uno che fa le veci del keygen!!!!

Note finali

Con questo è tutto, se non ci avete capito niente ho qualcosa non è chiaro mail-me, mail-me, mail-me, mail-me, mail-me!!!!!                                                     Saluto e ringrazio tutti i ragazzi di crack-it!!!!CIAO BELLI!!!

Disclaimer

 Vorrei ricordare che la cicoria va comprata e non rubata!!!!!per tutto il resto…………..fate voi!!!!:)