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 |