------------> Furb3T <-----------
presenta:
Capire un generatore di seriale: II parte.
Salve giovani amantidell'assembler, oggi andremo avanti con la lezione sui generatori di chiave e analizzeremoil codice di un programma che usiamo tutti o quasi: il MIRC5.31. Utilizzeremo come al solito SOFTICE. Lanciamo Mirc,andiamo sotto HELP|REGISTER ed inseriamo il nome e il codice numerico. Ctrl-D e fissiamoun bel BPX MESSAGEBOXA, F5 per ritornare su Mirc, diamo l'OK e...BOOM eccoci su Softice,premiamo F12 e ci ritroviamo su Mirc che ci fa comparire la finestra di messaggio che cidice che abbiamo sbagliato codice (...ancora per poco), premiamo OK e rieccoci dentroSoftice, ed esattamente qui:
:00437E9CBene ora non vi resta che fare un pò discroll up ovvero far scorrere verso l'alto per vedere quale è la parte di codice chechiama la MessageBox; scorrete scorrete ed arriverete qui:
:00437DE7Avrete capito che bisognerà andare aspulciare nella CALL che sta all'indirizzo 00437DF1; facciamo un bel Trace della call:
:004822D0 push ebpNon siamo ancora arrivati al pezzo di codiceche ci serve per capire come viene generato il vero codice; dobbiamo fare il Trace dellaCALL che sta a 004822EE, quindi:
.....................
:004821FC push 0000002D -------->2D non è altro che il "-" (trattino), ciò vuol dire che il codice vero
:004821FE push esi da inserire deve contenere il trattino e che quindi sarà composto
:004821FF call 004A400C da 2 parti. Questa Call verifica l'esistenza del trattino e ritorna 0 in
:00482204 add esp, 00000008 EAX se non c'è.
:00482207 mov ebx, eax
:00482209 test ebx, ebx
:0048220B jne 00482214
....................
....................
Ok, mi sembra abbastanza facile da capire comeviene generata la prima parte del codice, l'unica cosa che vi risulterà difficile dacapire è cosa avviene nel prodotto tra ESI e [.....]. Allora che vuol dire4*eax+004BBB44? Ve lo spiego subito. Se scrivete d 004BBB44, vedrete nella finestra unacosa tipo questa:
0B 00 00 00 06 00 00 00 11 00 00 00 0C
0C 00 00 00 0E 00 00 00 05 00 00 00 0C
....................................................
Sapendo che Eax parte da 0, allora nel primo loop il ESI verràmoltiplicato per B, nel secondo loop Esi verrà moltiplicato per 6, nel terzo per 11, nelquarto per C e così via...Capito?!?!? Facile vero!!! Bene ora analizziamo l'altra partedi codice come viene costruita:
...........................
:0048228D add ecx, 00000003
:00482290 cmp edx, dword ptr [ebp-0C]
:00482293 jge 004822B8
:00482295 movzx esi, byte ptr [ecx] ----> muove in ESI i caratteri ASCii Esadec. del nome dal 3 in poi
:00482298 movzx edi, byte ptr [ecx-01] ---> muove in EDI i caratteri Ascii Esa del nome dal 2 in poi
:0048229C imul esi, edi --------> moltiplica ESI per EDI e il mette il risultato inESI
:0048229F imul esi, dword ptr [4*eax+004BBB44]
:004822A7 add ebx, esi
:004822A9 inc eax
:004822AA cmp eax, 00000026
:004822AD jle 004822B1
:004822AF xor eax, eax
:004822B1 inc edx -----------> incrementa EDX
:004822B2 inc ecx
:004822B3 cmp edx, dword ptr [ebp-0C] ----> ripete il loop se EDX è minore della lunghezza del nome
:004822B6 jl 00482295
Insomma, anche questa seconda parte del codiceora è svelata. Quando creerete il vostro bel programmino di keygen, ricordatevi benetutti i percorsi dell'algoritmo di calcolo, nonchè del trattino..... inoltre ricordatevidi citarmi nel programma!!!!!
Purtroppo io programmo in VB quindi non viscriverò il programma keygen, questo toccherà a voi implementarlo con il linguaggio chesapete usare di più. A presto miei fidi!!!!
Ringraziamenti: a tutto il gruppo
|
Top: Sicurezza su Internet -
Back This page last updated: Friday 08 November 2002 at 3:58pm Please send any comments on this page to Astalalista. |
|
| Labelled with ICRA | Use this button to NOT browser button |
| Member of BannerPower Rotation System |