A piece of cake: cracking BWA builder 5

Nota per il lettore: questo post è stato recuperato da un backup polveroso ed è una traccia di un “me” di svariati anni fa…

Questa volta proviamo un classico attacco sporco: bucare la protezione del BWA Builder 5 (BB5.exe, lo trovate con tanto di setup sul sito della VSO www.vso-software.fr).

Installiamo, lanciamo dal menu avvio e…

“BWABuilder 5: You must be a Blindwrite 5 registered user to use this software”

Maledetti. E’ possibile che debba pagare anche solo per vedere cosa sto per masterizzare?
Detto fatto.

Fireup WDasm e vediamo cosa c’è sotto. Facciamo una bella ricerca per stringhe…
Refs\String Data References e scrolliamo verso il basso…
eccoti qua, la quint’ultima! doppio click sul riferimento e cadiamo qui:

* Possible StringData Ref from Code Obj ->"You must be a Blindwrite 5 registered "
->"user to use this software"
|
:00507530 BA08785000 mov edx, 00507808
:00507535 8B8370030000 mov eax, dword ptr [ebx+00000370]

Bene, abbiamo trovato il messaggio d’errore (cattivo ragazzo!).
Diamo poi un’occhiata al codice subito sopra: si presenta così…

...
:00507520 8BC3 mov eax, ebx
:00507522 E8C1250000 call 00509AE8
:00507527 84C0 test al, al
:00507529 7550 jne 0050757B
:0050752B 6A10 push 00000010
:0050752D 8D4DF4 lea ecx, dword ptr [ebp-0C]

* Possible StringData Ref from Code Obj ->"You must be a Blindwrite 5 registered "
...

E’evidente che la protezione risiede nella 2°, 3° e 4° riga. Ora non resta che determinare quale sia il modo più elegante e funzionale per metterla fuori gioco.
La cosa più spontanea da fare sarebbe piazzare un bel jmp al posto del jne, ma sporcherebbe troppo il codice (passare un’istruzione da 4 a 10 byte danneggia inevitabilmente le successive…). Allora un je al posto del jne? E se poi c’è qualcuno che c’è l’ha davvero registrato il BW?
Stavolta facciamo in un altro modo. Focalizziamo la nostra attenzione sulla call e con l’aiuto del buon WDasm, analizziamone il contenuto.

E’ proprio qui che il software accede al registro di sistema per verificare se è stato registrato:

...
* Possible StringData Ref from Code Obj ->"Software\vso\bw5"
:00509B14 BA989B5000 mov edx, 00509B98
...

e poi modifica i registri al, eax e esi per memorizzare la situazione (cattivo o bravo ragazzo?).

Proviamo ad imbavagliare questa call. Torniamo a

...
:00507522 E8C1250000 call 00509AE8
...

L’offset da segnarci è scritto nella status bar del Wdasm: 1068FD.
Fireup HIEW.
Andiamo all’offset segnato, quindi sostituiamo E8C1250000 con una bella serie di NOOP 9090909090.

Salviamo, chiudiamo HIEW e proviamo a lanciare BB5.exe… FTW!