A:link { TEXT-DECORATION: underline } A:visited { TEXT-DECORATION: underline } A:active { COLOR: red; TEXT-DECORATION: underline } A:hover { COLOR: #8080ff; TEXT-DECORATION: underline }
Troviamoci un seriale valido per LeapFTP 2.7.2 | ||
Data |
by Spider |
|
07/2001 |
Published by Quequero |
|
E qui... |
Qualche mio eventuale commento sul tutorial :))) |
...che cosa scrivo? |
.... |
|
.... |
Difficoltà |
(X)NewBies ( )Intermedio ( )Avanzato ( )Master |
Un esempio di routine di check del serial alla portata di tutti :)
Introduzione |
Tools usati |
URL o FTP del programma |
Essay |
:004877D0 push ebp :004877D1 mov ebp, esp :004877D3 add esp, FFFFFFF4 :004877D6 push ebx :004877D7 push esi :004877D8 push edi :004877D9 mov dword ptr [ebp-04], edx ;edx contiene un puntatore al serial inserito :004877DC mov eax, dword ptr [ebp-04] :004877DF call 004040B8 ;inutile per il nostro obiettivo :004877E4 xor eax, eax :004877E6 push ebp :004877E7 push 0048793D :004877EC push dword ptr fs:[eax] :004877EF mov dword ptr fs:[eax], esp :004877F2 mov [ebp-05], 00 :004877F6 mov eax, dword ptr [ebp-04] ;ebp-04 contiene un puntatore al serial che abbiamo inserito :004877F9 call 00403F04 :004877FE cmp eax, 00000013 ;se il serial non è di 19 char... :00487801 jne 00487927 ;...beggar off :) :00487807 mov eax, dword ptr [ebp-04] :0048780A cmp byte ptr [eax+04], 2D ;se il 5° carattere non è "-"... :0048780E jne 00487927 ;...beggar off :00487814 mov eax, dword ptr [ebp-04] :00487817 cmp byte ptr [eax+09], 2D ;se il 10° carattere non è "-"... :0048781B jne 00487927 ;...beggar off :00487821 mov eax, dword ptr [ebp-04] :00487824 cmp byte ptr [eax+0E], 2D ;se il 15° carattere non è "-"... :00487828 jne 00487927 ;...beggar off :0048782E xor esi, esi ;azzera esi :00487830 xor edi, edi ;azzera edi :00487832 xor eax, eax ;azzera eax :00487834 mov dword ptr [ebp-0C], eax ;azzera ebp-0C :00487837 mov ebx, 00000001 ;ebx farà da contatore * Jump at Address: |:004878C2(C) | :0048783C mov eax, ebx ;mette ebx in eax :0048783E and eax, 80000003 ;salva gli ultimi 2 bits. eax sarà quindi un numero compreso tra 0 e 4 :00487843 jns 0048784A ;salta SEMPRE, dato che ebx è positivo :) :00487845 dec eax :00487846 or eax, FFFFFFFC :00487849 inc eax * Jump at Address: |:00487843(C) | :0048784A test eax, eax ;se eax è diverso da zero ovvero se ebx è divisibile per 4)... :0048784C jne 00487864 ;...salta a 00487864 :0048784E mov eax, dword ptr [ebp-04] ;mette in eax il puntatore al seriale da noi inserito :00487851 mov al, byte ptr [eax+ebx-01] ;mette in al il byte a eax+ebx-01 :00487855 call 004877A8 ;controlla che sia il codice ascii di un numero :0048785A test al, al ;se non lo è... :0048785C je 00487927 ;...beggar off! :00487862 jmp 00487886 * Jump at Address: |:0048784C(C) | :00487864 mov eax, ebx ;eax = ebx :00487866 mov ecx, 00000005 ;ecx = 5 :0048786B cdq ;azzera edx :0048786C idiv ecx ;divide eax per 5 :0048786E test edx, edx ;se il resto è zero (ovvero quando ebx è divisibile per 5)... :00487870 je 00487886 ;...salta. (questo perchè i caratteri "-" non vengono considerati) :00487872 mov eax, dword ptr [ebp-04] ;mette in eax il puntatore al seriale da noi inserito :00487875 mov al, byte ptr [eax+ebx-01] ;mette in al il byte a eax+ebx-01 :00487879 call 004877BC ;controlla che sia il codice ascii di una lettera maiuscola :0048787E test al, al ;se non lo è... :00487880 je 00487927 ;...solita beggar off * Jump at Addresses: |:00487862(U), :00487870(C) | :00487886 mov eax, dword ptr [ebp-04] ;mette in eax il puntatore al seriale da noi inserito :00487889 mov al, byte ptr [eax+ebx-01] ;mette in al il byte a eax+ebx-01 :0048788D cmp al, 2D ;se il carattere è "-"... :0048788F je 004878BE ;...non lo aggiunge ad esi :00487891 cmp ebx, 00000005 ;se il numero del carattere è maggiore o uguale a 5... :00487894 jge 004878A2 ;...non lo aggiunge ad esi :00487896 mov edx, dword ptr [ebp-04] ;mette in edx il puntatore al seriale da noi inserito :00487899 and eax, 000000FF ;tiene solo al (che contiene il carattere) :0048789E add esi, eax ;somma il carattere ad esi :004878A0 jmp 004878BE * Jump at Address: |:00487894(C) | :004878A2 cmp ebx, 0000000A ;se il numero del carattere è maggiore o uguale a 10... :004878A5 jge 004878B3 ;non aggiunge il carattere ad edi :004878A7 mov edx, dword ptr [ebp-04] :004878AA and eax, 000000FF ;prende solo al :004878AF add edi, eax ;somma il carattere ad edi :004878B1 jmp 004878BE * Jump at Address: |:004878A5(C) ;se il numero del carattere è maggiore o uguale a 10 | ;somma il carattere ad ebp-0C :004878B3 mov edx, dword ptr [ebp-04] :004878B6 and eax, 000000FF :004878BB add dword ptr [ebp-0C], eax * Jump at Addresses: |:0048788F(C), :004878A0(U), :004878B1(U) | :004878BE inc ebx ;incrementa ebx :004878BF cmp ebx, 0000000F ;se non siamo ancora arrivati al quindicesimo carattere... :004878C2 jne 0048783C ;...riprende da capo, altrimenti continua. :004878C8 lea ecx, dword ptr [edi+esi] ;ecx=edi+esi :004878CB add ecx, dword ptr [ebp-0C] ;somma ad ecx il valore contenuto in ebp-0C :004878CE mov eax, esi ;eax=esi :004878D0 mov ebx, 0000001A ;mette 1Ah (26 decimale) in ebx :004878D5 cdq ;azzera edx :004878D6 idiv ebx ;divide eax per ebx :004878D8 add edx, 00000041 ;aggiunge 41h al resto della divisione :004878DB mov eax, dword ptr [ebp-04] ;mette in eax il puntatore al serial da noi inserito :004878DE cmp dl, byte ptr [eax+0F] ;se il sedicesimo carattere è diverso dal valore in dl... :004878E1 jne 00487927 ;...beggar off :004878E3 mov eax, edi ;eax=edi :004878E5 mov ebx, 0000001A ;mette 1Ah (26 decimale) in ebx :004878EA cdq ;azzera edx :004878EB idiv ebx ;divide eax * ebx :004878ED add edx, 00000041 ;aggiunge 41h al resto della divisione :004878F0 mov eax, dword ptr [ebp-04] ;mette in eax il puntatore al serial da noi immesso :004878F3 cmp dl, byte ptr [eax+10] ;se il 17° carattere è diverso dal valore in dl... :004878F6 jne 00487927 ;...beggar off :004878F8 mov eax, dword ptr [ebp-0C] ;mette in eax il vaolre contenuto in ebp-0C :004878FB mov ebx, 0000001A ;mette 1Ah (26 decimale) in ebx :00487900 cdq ;azzera edx :00487901 idiv ebx ;divide eax per ebx :00487903 add edx, 00000041 ;aggiunge 41h al resto della divisione :00487906 mov eax, dword ptr [ebp-04] ;mette in eax il puntatore al serial da noi immesso :00487909 cmp dl, byte ptr [eax+11] ;se il 18° carattere è diverso dal valore in dl... :0048790C jne 00487927 ;...beggar off :0048790E mov eax, ecx ;eax = ecx (il quale conteneva la soma fre esi, edi ed ebp-0C) :00487910 mov ecx, 0000001A ;ecx = 1Ah (26 decimale) :00487915 cdq ;azzera edx :00487916 idiv ecx ;divide eax per ecx :00487918 add edx, 00000041 ;aggiunge 41h al resto della divisione :0048791B mov eax, dword ptr [ebp-04] ;mette in eax il puntatore al serial da noi immesso :0048791E cmp dl, byte ptr [eax+12] ;se il 19° carattere è diverso dal valore in dl... :00487921 jne 00487927 ;...beggar off :00487923 mov [ebp-05], 01 ;seriale esatto! :-) * Jump at Addresses: |:00487801(C), :0048780E(C), :0048781B(C), :00487828(C), :0048785C(C) |:00487880(C), :004878E1(C), :004878F6(C), :0048790C(C), :00487921(C) | :00487927 xor eax, eax :00487929 pop edx :0048792A pop ecx :0048792B pop ecx :0048792C mov dword ptr fs:[eax], edx :0048792F push 00487944 * Jump at Address: |:00487942(U) | :00487934 lea eax, dword ptr [ebp-04] :00487937 call 00403C84 :0048793C ret
Ricapitolando:
1) controlla che il serial sia di 19 caratteri e che il 5°, il 10° ed il 15° carattere siano "-" (trattino). Non ci vuol molto a capire che il serial sia in questa forma: xxxx-xxxx-xxxx-xxxx.
2) per i primi 15 caratteri controlla che quelli la cui posizione è divisibile per 4 siano numeri, mentre gli altri lettere. Pertanto i primi 15 caratteri saranno in questa forma: xxxn-xxnx-xnxx-, dove x rappresenta una qualunque lettera e n un qualsiasi numero.
3) controlla gli ultimi 4 caratteri del seriale tramite un algoritmo che tra poco spiegheremo.
Come abbiamo visto per le prime tre parti del serial abbiamo la più ampia libertà... dobbiamo solo stare attenti a mettere lettere e numeri al posto giusto :-). Diverso è per l'ultima parte del serial. Esso dipende infatti dal resto del serial. Notate infatti che il prog somma in esi i codici ascii dei primi 4 caratteri del serial, in edi quelli della seconda parte del serial, e in ebp-0C quelli della terza parte del serial. Se chiamiamo i risultati di queste somme a, b e c, le lettere della quarta parte del serial saranno date da queste formule (i calcoli sono in esadecimale):
16° = (a mod 1A) + 41
17° = (b mod 1A) + 41
18° = (c mod 1A) + 41
19° = [(a+b+c) mod 1A] + 41
Bene... calcoliamoci adesso un serial valido! Intanto stabiliamo i primi 15 char, ricordandoci di rispettare la forma in xxxn-xxnx-xnxx-:
SPI1-DE2R-F3TP-
S = 53
P = 50
I = 49
1 = 31
a = 53 + 50 + 49 + 31 = 11D
D = 44
E = 45
2 = 32
R = 52
b = 44 + 45 + 32 + 52 = 10D
F = 46
3 = 33
T = 54
P = 50
c = 46 + 33 + 54 + 50 = 11D
16° = (11D mod 1A) + 41 = 19 + 41 = 5A =
"Z"
17° = (10D mod 1A) + 41 = 9 + 41 = 4A = "J"
18° = (11D mod 1A) + 41 = 19 + 41 = 5A = "Z"
19° = [(11D + 10D + 11D) mod 1A] + 41 = [347 mod 1A] + 41 = 7 + 41 = 48 =
"H"
Ed ecco il serial completo:
SPI1-DE2R-F3TP-ZJZH
Lascio a voi il compito di creare il keygen :-)
Ciauzzzzz, Spider
Note finali |
Saluto TheMR che mi ha segnalato il prog e ovviamente tutti gli studenti e
frequentatori di UIC, Ringzer0 (finalmente up!), #asm, #crack-it, e, last but
not least, il Quequero nazionale a cui dobbiamo l'UIC :)
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.