Mass Keygenning! oh yeah! |
||
10-01-2003 |
by Pincopall |
|
|
Published by Quequero |
|
|
Pinco te le stai rigirando tutte le case che fanno protezioni di massa??? hiihihiih grazie gran bel tute.. poveretti ;pp |
... questa è istigazione al keygenning! |
.... |
|
.... |
Difficoltà |
(P)NewBies ( )Intermedio ( ) Avanzato ( )Master |
Dunque, avrete letto il sottotitolo e vi sarete domandati cosa diavolo io intenda con "Mass Keygenning" bhè, è una libertà letteraria :p che mi sono preso modificando l'espressione "Mass Defacement" anche se preciso che il keygenning è del tutto diverso dalla, a mio avviso, deplorevole e lamera pratica del defacement, ma comunque.. "Mass Keygenning" in quanto in questo tutorial vedremo come creare il keygenerator di un prodotto della BlackBoard Software e vedremo come adattarlo ad un altro prodotto sempre della BlackBoard, fino ad arrivare a praticamente TUTTI i prodotti della già citata Software House =).
Introduzione |
Tools usati |
URL o FTP del programma |
Notizie sul programma |
Essay |
Allora partiamo, installato
il programma lo lanciamo ed ecco apparire una message box che ci informa
gentilemente che il programma si bloccherà tra 7 giorni..vabbè...premiamo
ok...andiamo a registrarci và...mica vogliamo vedere bloccari stò programma
eh!..dunque "Help"-"Register"..nome e serial a caso, premiamo OK, e TAC,
si chiude la edit box dove inseire il nome senza dirci niente...vabbè..vediamo
che possiamo fare con SoftIce o con IDA =)
Allora, da SoftIce la via che per ora sembra possibile seguire è quella
del bpx hmemcpy, ma come si sa, quando si usa questo bp le cose diventatno
sempre lunghe, vediamo dunque prima cosa possiamo fare, innanzitutto facciamo
disassemblare il file a IDA, ed andiamo a vedere se c'è qualcosa di interessante
nei Names, troviamo una stringa che forse può esserci d'aiuto, la stringa
"registered", che viene mossa in eax quà :
:0046D700 B8D0D84600 mov eax, 0046D8D0
:0046D460 mov edi, eax :0046D462 mov eax, dword ptr [ebp-04] :0046D465 mov edx, 0046D77C :0046D46A call 00403F98 :0046D46F jne 0046D476 :0046D471 mov ebx, 00000013 * Referenced by (C)onditional Jump at Address: |:0046D46F(C) | :0046D476 mov eax, dword ptr [ebp-04] :0046D479 mov edx, 0046D788 :0046D47E call 00403F98 :0046D483 jne 0046D48A :0046D485 mov ebx, 00000026 * Referenced by a (C)onditional Jump at Address: |:0046D483(C) | :0046D48A mov eax, dword ptr [ebp-04] :0046D48D mov edx, 0046D794 ....
E si concludono quà :
:0046D64A call 00403F98 :0046D64F jne 0046D656 :0046D651 mov ebx, 000002EF * Referenced by (C)onditional Jump at Address: |:0046D64F(C) | :0046D656 mov eax, dword ptr [ebp-04] :0046D659 mov edx, 0046D8A8 :0046D65E call 00403F98 :0046D663 jne 0046D66A :0046D665 mov ebx, 0000031A * Referenced by a (U)nconditional or (C)onditional Jump at Address: |:0046D663(C) | :0046D66A add ebx, dword ptr [esi+34] :0046D66D cmp ebx, edi :0046D66F jne 0046D70A :0046D675 lea edx, dword ptr [ebp+FFFFFE20] :0046D67B mov eax, esi
:0046D450 mov eax, dword ptr [ebp-0C]<--- Muove in eax il nostro nome :0046D453 call 00404090<--- In questa call controlla che il nome esista e ne estrae la penultima lettera :0046D458 mov eax, dword ptr [ebp-10]<--- Muove in eax il serial da noi immesso :0046D45B call 00408A98<--- In questa call calcola il corrispettivo esadecimale del serial.. :0046D460 mov edi, eax<--- ..che viene poi mosso da eax in edi. :0046D462 mov eax, dword ptr [ebp-04]<--- Muove in eax la penultima lettera del nostro nome. :0046D465 mov edx, 0046D77C<--- Muove in edx il carattere "a"
CalcolaSeriale proc push 50 ; max caratteri mov ebx,offset mybuffer push ebx ; buffer d testo push [EditHWnd] ; handle dell'edit Call GetWindowTextA cmp eax, 1 ; il nome ha almeno una lettera? jl nonvabene ; no? allora non va bene mov edi,1236 ; mettiamo in edi il valore 1236 decimale xor ecx, ecx ; azzera ecx sub eax,2 mov dl, byte ptr[ebx+eax] ; Muoviamo in dl la penultima lettera del nostro nome, vi ricordo ; che dopo il getwindowtexta in ebx abbiamo il contenuto dell'edit box ; ed in eax abbiamo la lunghezza =) mov bl,96 ; muoviamo in bl il valore del carattere ascii "a" meno 1, il programma ( EyeSee ) ; reputa infatti che il penultimo carattere del vostro nome sia per forza minuscolo ciclo1: inc cl ; incrementiamo cl e bl (che la prima volta varrà "a",poi "b",ecc...) inc bl cmp bl,dl ; è il nostro penultimo carattere? se no... jne ciclo1 ; ricomincia il ciclo, se si cmp cl,1 ; guarda se cl è 1, quindi se il penultimo char è "a" jne seclno1 ; se nn lo è salta, add edi,19 ; se lo è aggiunge a 4D4, il valore 13h mov eax,edi ; muove edi in eax, visto che questo ci servirà come preparazione call EsinDec ; alla call di trasformazione da esadecimale in decimale jmp msgbox ; al ritorno da questa potremmo mostrare il seriale =) seclno1: call vediamo ; se la penultima lettera non è "a" ..vediamo =) call EsinDec msgbox: mov eax,ebp ; dopo la call EsinDec mettiamo il serial in eax mov byte ptr[eax+4],00 ; poniamo a null in quinto byte d eax, il nostro serial sarà ; infatti sempre di 4 cifre=) e ; Creiamo l'edit Box invece della solita messagebox =) push 0 ; lpParam push [AppHWnd] ; hInstance push 40h ; ID dell'edit push [NewHWnd] ; parent hwnd push 20 push 260 push 85 ; y push 50 ; x push WS_BORDER OR WS_VISIBLE OR WS_CHILD push eax ; il serial =) push offset EditClass push 0 call CreateWindowExA jmp msg_loop CalcolaSeriale endp vediamo proc push eax ; dunque pushiamo eax ed ebx push ebx xor eax, eax ; azzera eax add edi, 19 ; aggiungiamo 13h ad edi che vale 4D4h dec ecx ; in ecx c'è la differenza, se ci pensate, tra il valore hex del nostro ; penultimo carattere e il valore 96dec, e questa prima sottrazione ci serve ; nel caso che il char nostro sia "b", infatti il prog aggiunge 2 volte 13h, ; se abbiamo "b", sarebbe stato diverso se avesse fatto semplicemente 13h+14h =) risottrai: dec ecx ; dunque risottraiamo 1 da ecx mov ebx,19 ; mettiamo 13h in ebx add ebx,ecx ; a questo aggiungiamoci l'attuale valore d cl, vedete che se il nostro char è "b" ; cl valeva 2 prima, ora vale 0 ed a essere aggiunto a eax è 13h, se il npstro char è "c" ; invece cl valeva all'inizio 3 e ad esser addizionati ad eax saranno 13h e 14h, e così via. add eax,ebx test ecx,ecx ; questo finche ecx è zero jnz risottrai add edi,eax ; aggiungiamo eax ad edx, che già contiene 4D4h+13h pop ebx ; ripoppiamo ebx ed eax pop eax ret vediamo endp EsinDec proc ; ecco la call che porta da esadecimale in decimale il nostro numero ; pushiamo i registri il cui attuale valore ci servirà anche dopo push edx push ecx mov eax,edi ; il numero da convertire in hex lo mettiamo in eax mov ecx, 10 ; e muoviamo in ecx 10 (0Ah) mov [ebp],eax ; ed in ebp, il valore di eax, che è poi il numero da mettere in dec. ciclo3: xor edx, edx ; azzeriamo edx div ecx ; e dividiamo eax per ecx, con il quoziente che và a finire in eax ed ; il resto che và a finire in edx add dl, 48 ; resto a cui aggiungiamo 48 ( 30h ), e se avete a disposizione una ; tavola ascii capite il perchè =) cmp dl, 58 ; e che poi confrontiamo con 58, ovvero con il valore decimale del primo ; carattere nn numerico nell'ordine delle tabelle ascii ovviamente. jb decrementaEbp ; Se più piccolo si salta add dl, 07 ; altrimenti se è più grande gli si aggiunge un 07. decrementaEbp: dec ebp ; Decrementiamo ebp mov [ebp],dl ; ed in ebp decrementato si mette il numero ottenuto. or eax, eax ; Se eax non è ancora zero jne ciclo3 ; si ricomincia il ciclo. pop ecx ; Alla fine si poppa tutto stando attenti alla regola del LIFO pop edx ; (Last In First Out) per quanto riguarda lo stack... ret ; e si ritorna =) EsinDec endp nonvabene: ; MessageBox di edit vuota=) push MB_OK OR MB_ICONEXCLAMATION push offset error push offset noname push NULL Call MessageBoxA jmp msg_loop End Start ; e fine del programma.Ok, anche il keygen è stato facile da fare=) come vi ho detto mancano le stringhe chiamate "noname" o "error", ma si capisce anche dal loro nome cosa vogliano significare no? come vi ho detto già sopra poi la dichiarazione di stringhr ecc..la ho saltata per velocizzare =).
|
Well un saluto a tutti i frequantatori dei chan che frequento (#crack-it, #asm, #hackmaniaci, ecc..)
Un saluto particolare a Britney Spears (Wo..baby..you were great
last night ) e a Quequero, la mia ROSSA preferita (You also were
great last night baby!) Grazie anche tu non scherzi
eh ;p NdQue
deh hihihihi
CiauuuuuuZ
Disclaimer |
Vorrei ricordare che la BlackBoard ha quà dimostrato di non avere fondi a sufficienza per pagare programmatori in grado di sviluppare uno schema d protezione degno di questo nome, quindi fate qualcosa, sviluppate voi un algo un po' più bello e mandatelo alla povera software house che ci siamo divertiti a maltrattare in questo tut.!,
Ovviamente le informazioni date in questo tutorial sono a puro scopo didattico e servono appunto per invogliarvi a dare una mano a questa povera software house!!
Noi reversiamo al solo scopo informativo e di miglioramento del linguaggio Assembly.