XARA 3D 4.0
Registriamolo!!


by "**SCiaMaNo**"

 

 

UIC's Home Page

Published by Quequero



Bravo sciamano, Xara nelle sue prime versioni era abbastanza tosto, cmq ora è alla portata dei newbies e tu hai scritto un bel tute.....Ma lo sai che il form l'abbiamo aggiornato? :)

 
UIC's form
E-mail: [email protected]
Uin: 57813248
UIC's form

Difficoltà

(x)NewBies ( )Intermedio ( )Avanzato ( )Master

 

L'obiettivo e' quello di registrare senza patchare fisicamente il codice e rendere questo programmino perfettamente funzionante. Riuscire in questo e' purtroppo TROPPO semplice ;-)
Questo lo rende alla portata dei newbies, armatevi quindi di softice e datevi da fare :)


XARA 3D 4.0
Registriamolo!!
Written by **SCiaMaNo**

Introduzione

Xara 3D e' un programma molto conosciuto, ha lo scopo di creare testi tridimensionali per le pagine web. La versione "Unregistered" fa in modo che sovrapposto allo sfondo compaia una fastidiosa scritta "Xara 3D Demo" e che il programma smetta di funzionare dopo i 30 giorni di utilizzo. All'avvio viene richiesto un nome e un seriale, quello che faremo e' individuare la routine che elabora il seriale e vedere un po cosa si puo fare ;)

Tools usati

Softice 4.x

URL o FTP del programma

http://www.xara.com/xara3d/

Essay

Come primo approccio a questo programma ho cercato di disassemblare l'eseguibile X3D.exe ma mi sono accorto subito che W32Dasm non riusciva nell'impresa, per copiare il codice per il tute ho quindi usato Ida; se avessi usato Hiew come feci in un'altra occasione la mannaia dello zio Que sarebbe caduta sulla mia testa :)))
Avviamo il nostro programma, chiediamo di registrarci ed inseriamo un codice a caso. Lanciamo softice e settiamo un bpx hmemcpy, clickiamo il tasto di registrazione e ci troviamo in sice, iniziamo con F12 sino a che non ci troviamo in 0041f6b1:

:0041F6B1 cmp   eax, 1
:0041F6B4 jnz   loc_0_41F8D8
:0041F6BA mov   eax, [esp+518h+var_3D4]
:0041F6C1 cmp   dword ptr [eax-8], 7  ---------- confronta il serial con 7
:0041F6C5 jnz   loc_0_41F8CA  ---------- se 
:0041F6CB movsx edx, byte ptr [eax]  ---------- muovi il 1° char in edx
:0041F6CE push  edx
:0041F6CF call  _isupper  ---------- comtrolla se e' una lettera maiuscola
:0041F6D4 add   esp, 4
:0041F6D7 test  eax, eax  ---------- se e' cosi' eax=1
:0041F6D9 jz    loc_0_41F8CA  ---------- se eax<>1 salta a "codice errato"
:0041F6DF mov   eax, [esp+518h+var_3D4]
:0041F6E6 movsx ecx, byte ptr [eax+1]  ---------- muovi il 2° char in ecx
:0041F6EA push  ecx
:0041F6EB call  _isupper  ---------- controlla se maiuscolo
:0041F6F0 add   esp, 4
:0041F6F3 test  eax, eax  ---------- eax e' uguale a 1?
:0041F6F5 jz    loc_0_41F8CA  ---------- se eax<>1 salta a "codice errato"
:0041F6FB mov   edx, [esp+518h+var_3D4]
:0041F702 movsx eax, byte ptr [edx+2]  ---------- muovi il 3° char in eax
:0041F706 push  eax
---------------
---------------
---------------
:0041F772 movsx edx, byte ptr [ecx+6]  ---------- muovi il 7° char in eax
:0041F776 push  edx
:0041F777 call  _isupper  ---------- controlla se maiuscolo
:0041F77C add   esp, 4
:0041F77F test  eax, eax  ---------- eax=1?
:0041F781 jz    loc_0_41F8CA  ---------- se si continua

Come possiamo vedere, ci troviamo prorio nella routine del controllo del seriale; come prima cosa viene controllato se il codice inserito e' di 7 caratteri, poi se ogni singolo carattere e' formato da una lettera maiuscola. Per passare indenni a questa parte di codice potremmo ad esempio inserire come seriale: ABCDEFG Andiamo quindi un po piu' avanti:


:0041F7A8 mov   bl, [eax+1]  ---------- muovi il 2° carattere in bl
:0041F7AB mov   dl, [eax+3]  ---------- 4° char in dl
:0041F7AE mov   byte ptr [esp+518h+var_4E8+2], bl  ---------- muovi il 2° char in esp+32
:0041F7B2 mov   bl, [eax]  ---------- il 1° in bl
:0041F7B4 mov   byte ptr [esp+518h+var_4E8], bl  ---------- il 1° char in esp+30
:0041F7B8 mov   bl, [eax+5]  ---------- 6° in bl
:0041F7BB mov   byte ptr [esp+518h+var_4E8+1], bl  ---------- 6° in esp+31
:0041F7BF mov   bl, [eax+2]  ---------- 3° char in bl
:0041F7C2 mov   byte ptr [esp+518h+var_4E8+3], bl  ---------- 3° in esp+33

Questa parte di codice non ha fatto altro che salvare in esp+x il 1° 2° 3° e 6° carattere.


:0041F7C6 mov   bl, [eax+6]  ---------- 7° in bl
:0041F7C9 movsx eax, byte ptr [eax+4]  ---------- 5° in eax
:0041F7CD movsx esi, bl  ---------- 7° carattere in esi
:0041F7D0 lea   eax, [eax+eax*2]  ---------- nuovo valore di eax
:0041F7D3 movsx edx, dl  ---------- 4° char in edx
:0041F7D6 lea   eax, [esi+eax*8]
:0041F7D9 movsx esi, byte ptr [esp+518h+var_4E8+3]  ---------- 3° char in esi
:0041F7DE lea   eax, [eax+eax*2]
:0041F7E1 lea   eax, [esi+eax*8]  ---------- nuovo valore di eax
:0041F7E4 movsx esi, byte ptr [esp+518h+var_4E8+1]  ---------- 5° char in esi
:0041F7E9 lea   eax, [eax+eax*2]
:0041F7EC lea   eax, [esi+eax*8]  ---------- nuovo valore di eax
:0041F7EF movsx esi, byte ptr [esp+518h+var_4E8]  ---------- 1° char in esi
:0041F7F4 lea   eax, [eax+eax*2]
:0041F7F7 lea   eax, [esi+eax*8]  ---------- nuovo valore di eax
:0041F7FA movsx esi, byte ptr [esp+518h+var_4E8+2]  ---------- 2° char in esi
:0041F7FF lea   eax, [eax+eax*2]
:0041F802 lea   eax, [esi+eax*8]
:0041F805 lea   eax, [eax+eax*2]
:0041F808 lea   eax, [edx+eax*8-494DE99h]  ---------- si ottiene il valore finale di eax
:0041F80F cmp   eax, ecx  ---------- confronto con ecx
:0041F811 jnz   loc_0_41F8CA  ---------- se eax=ecx non salta e registra il programma

Ok, vengono presi i vari caratteri da noi inseriti ed utilizzati di volta in volta per dare un nuovo valore ad eax, le operazioni per determinare eax non le ho commentate in quanto sono scritte in chiaro. Il valore finale di eax viene infine confrontato con ecx; spostandoci sul jnz che segue settiamo in sice r fl z in modo da impedire il salto e ci troviamo col programma definitivamente registrato :-)
Se proviamo infatti ad uscire da softice cancellando i bp e riavviamo xara3d possiamo verificare che e' effettivamente registrato, non c'e' quindi neanche bisogno di patchare il programma fisicamente.
Ma come ricavarsi il seriale?? Conoscendo il valore di ecx (sostituendolo ad eax), con un po di formule inverse, una calcolatrice e un po di pazienza non dovrebbe essere difficile risalire ai vari caratteri che lo compongono.
Io non ho proprio voglia di farlo quindi buon lavoro ;-)

                                                                                                                 by **SCiaMaNo**

Note finali

Come avete visto e' sin troppo semplice superare una pseudo-protezione come questa, strano visto che si tratta di un programma noto e diffuso.. bah...
Un saluto ai frequentatori della UIC ed un abbraccio alle frequentatrici :)

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.

UIC's page of reverse engineering, scegli dove andare:
Home   Anonimato   Assembly    CrackMe   ContactMe   Forum   Iscrizione
Lezioni    Links   Linux   NewBies   News   Playstation
Tools   Tutorial   Search   UIC Faq
UIC