|
XARA 3D
4.0 |
| |
|
by "**SCiaMaNo**" |
||
|
|
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 |
|
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 :)
|
Introduzione |
|
Tools usati |
|
URL o FTP del programma |
|
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**
|
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 |
| 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 |