ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» º Keygen de Euclide v2.0 º ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ Dispo: www.yaskifo.com ~~~~~~ Tools: - SoftICE ~~~~~~ - Tasm v5 Serial Fishing: ~~~~~~~~~~~~~~~ Lancez le prog, un nag nous demande de nous enregistrer, on choisit donc l'option Entrez votre code, mettez votre nom comme identifiant personel et ce que vous voulez comme serial, placez un "bpx hmemcpy" dans SI clickez sur ok, avec SI faites une fois F5 puis F12 jusqu'a tomber dans le code de l'executable: xxxx:00401D6A E8016C0100 Call 00418970 << Call GetWindowTextA xxxx:00401D6F 8B7804 mov edi, dword ptr [eax+04] xxxx:00401D72 8D542410 lea edx, dword ptr [esp+10] << Notre nom dans edx xxxx:00401D76 52 push edx xxxx:00401D77 8BCF mov ecx, edi xxxx:00401D79 E832210000 call 00403EB0 << !!! xxxx:00401D7E 8D842490000000 lea eax, dword ptr [esp+00000090] << Le code bidon xxxx:00401D85 8BCF mov ecx, edi xxxx:00401D87 50 push eax xxxx:00401D88 E8C3220000 call 00404050 << !!! xxxx:00401D8D 8DB42490000000 lea esi, dword ptr [esp+00000090] << le code bidon xxxx:00401D94 8D87E4000000 lea eax, dword ptr [edi+000000E4] << le bon code xxxx:00401D9A 8A10 mov dl, byte ptr [eax] <<---------- xxxx:00401D9C 8A1E mov bl, byte ptr [esi] | xxxx:00401D9E 8ACA mov cl, dl | xxxx:00401DA0 3AD3 cmp dl, bl | xxxx:00401DA2 751E jne 00401DC2 | xxxx:00401DA4 84C9 test cl, cl | xxxx:00401DA6 7416 je 00401DBE | xxxx:00401DA8 8A5001 mov dl, byte ptr [eax+01] | Routine de verification xxxx:00401DAB 8A5E01 mov bl, byte ptr [esi+01] | Du serial xxxx:00401DAE 8ACA mov cl, dl | xxxx:00401DB0 3AD3 cmp dl, bl | xxxx:00401DB2 750E jne 00401DC2 | xxxx:00401DB4 83C002 add eax, 00000002 | xxxx:00401DB7 83C602 add esi, 00000002 | xxxx:00401DBA 84C9 test cl, cl | xxxx:00401DBC 75DC jne 00401D9A <<---------- donc en 401D94 le serial correct est place dans eax, un simple "d eax" va donc nous permettre de le recuperer. Pour Kahel on a TCOXFGFRDS. Ce qui serait interessant c'est de voir ce qu'il se passe en fait dans les call 403EB0 en 401D79 et call 404050 en 401D88. C'est probablement la que se trouve le code qui genere le serial. Keygenning: ~~~~~~~~~~~ Si on execute le call 403EB0 on arrive ici: xxxx:00403EB0 53 push ebx xxxx:00403EB1 56 push esi xxxx:00403EB2 57 push edi xxxx:00403EB3 8B7C2410 mov edi, dword ptr [esp+10] << Notre nom dans edi xxxx:00403EB7 8BF1 mov esi, ecx xxxx:00403EB9 57 push edi << Met edi dans la pile xxxx:00403EBA E891010000 call 00404050 << Met notre nom en majuscules xxxx:00403EBF 0FBE0F movsx ecx, byte ptr [edi] << Debut de la routine xxxx:00403EC2 8A4701 mov al, byte ptr [edi+01] xxxx:00403EC5 83E941 sub ecx, 00000041 xxxx:00403EC8 84C0 test al, al xxxx:00403ECA 7430 je 00403EFC xxxx:00403ECC 0FBEC0 movsx eax, al xxxx:00403ECF 8D1440 lea edx, dword ptr [eax+2*eax] xxxx:00403ED2 8D0490 lea eax, dword ptr [eax+4*edx] xxxx:00403ED5 8D8C4166F9FFFF lea ecx, dword ptr [ecx+2*eax-0000069A] xxxx:00403EDC 8A4702 mov al, byte ptr [edi+02] xxxx:00403EDF 84C0 test al, al xxxx:00403EE1 7419 je 00403EFC xxxx:00403EE3 0FBED0 movsx edx, al xxxx:00403EE6 8D04D500000000 lea eax, dword ptr [8*edx+00000000] xxxx:00403EED 2BC2 sub eax, edx xxxx:00403EEF 8D0440 lea eax, dword ptr [eax+2*eax] xxxx:00403EF2 8D14C2 lea edx, dword ptr [edx+8*eax] xxxx:00403EF5 8D8C915C54FFFF lea ecx, dword ptr [ecx+4*edx-0000ABA4] xxxx:00403EFC 8D048D01000000 lea eax, dword ptr [4*ecx+00000001] xxxx:00403F03 33D2 xor edx, edx xxxx:00403F05 0FAFC1 imul eax, ecx xxxx:00403F08 83C009 add eax, 00000009 xxxx:00403F0B BB18000000 mov ebx, 00000018 xxxx:00403F10 0FAFC1 imul eax, ecx xxxx:00403F13 40 inc eax xxxx:00403F14 8DBEE4000000 lea edi, dword ptr [esi+000000E4] << l'adresse de esi+E4 dans edi xxxx:00403F1A F7F3 div ebx xxxx:00403F1C 8D440909 lea eax, dword ptr [ecx+ecx+09] xxxx:00403F20 0FAFC1 imul eax, ecx xxxx:00403F23 83C006 add eax, 00000006 xxxx:00403F26 0FAFC1 imul eax, ecx xxxx:00403F29 83C002 add eax, 00000002 xxxx:00403F2C 80C241 add dl, 41 xxxx:00403F2F 8817 mov byte ptr [edi], dl << met dl dans a l'addresse de edi (ESI+E4) xxxx:00403F31 33D2 xor edx, edx [ on peut conclure que esi+E4 = debut xxxx:00403F33 F7F3 div ebx [ du buffer qui va contenir le vrai serial xxxx:00403F35 8D444908 lea eax, dword ptr [ecx+2*ecx+08] xxxx:00403F39 0FAFC1 imul eax, ecx xxxx:00403F3C 80C241 add dl, 41 xxxx:00403F3F 40 inc eax xxxx:00403F40 0FAFC1 imul eax, ecx xxxx:00403F43 8896E5000000 mov byte ptr [esi+000000E5], dl xxxx:00403F49 33D2 xor edx, edx xxxx:00403F4B F7F3 div ebx xxxx:00403F4D 8D04CD00000000 lea eax, dword ptr [8*ecx+00000000] xxxx:00403F54 2BC1 sub eax, ecx xxxx:00403F56 83C003 add eax, 00000003 xxxx:00403F59 0FAFC1 imul eax, ecx xxxx:00403F5C 83C004 add eax, 00000004 xxxx:00403F5F 0FAFC1 imul eax, ecx xxxx:00403F62 80C241 add dl, 41 xxxx:00403F65 83C003 add eax, 00000003 xxxx:00403F68 8896E6000000 mov byte ptr [esi+000000E6], dl xxxx:00403F6E 33D2 xor edx, edx xxxx:00403F70 F7F3 div ebx xxxx:00403F72 8D4101 lea eax, dword ptr [ecx+01] xxxx:00403F75 0FAFC1 imul eax, ecx xxxx:00403F78 8D048507000000 lea eax, dword ptr [4*eax+00000007] xxxx:00403F7F 0FAFC1 imul eax, ecx xxxx:00403F82 83C003 add eax, 00000003 xxxx:00403F85 80C241 add dl, 41 xxxx:00403F88 8896E7000000 mov byte ptr [esi+000000E7], dl xxxx:00403F8E 33D2 xor edx, edx xxxx:00403F90 F7F3 div ebx xxxx:00403F92 8D448907 lea eax, dword ptr [ecx+4*ecx+07] xxxx:00403F96 0FAFC1 imul eax, ecx xxxx:00403F99 83C003 add eax, 00000003 xxxx:00403F9C 0FAFC1 imul eax, ecx xxxx:00403F9F 83C008 add eax, 00000008 xxxx:00403FA2 80C241 add dl, 41 xxxx:00403FA5 8896E8000000 mov byte ptr [esi+000000E8], dl xxxx:00403FAB 33D2 xor edx, edx xxxx:00403FAD F7F3 div ebx xxxx:00403FAF 8D44C902 lea eax, dword ptr [ecx+8*ecx+02] xxxx:00403FB3 0FAFC1 imul eax, ecx xxxx:00403FB6 83C004 add eax, 00000004 xxxx:00403FB9 0FAFC1 imul eax, ecx xxxx:00403FBC 83C005 add eax, 00000005 xxxx:00403FBF 80C241 add dl, 41 xxxx:00403FC2 8896E9000000 mov byte ptr [esi+000000E9], dl xxxx:00403FC8 33D2 xor edx, edx xxxx:00403FCA F7F3 div ebx xxxx:00403FCC 8D440907 lea eax, dword ptr [ecx+ecx+07] xxxx:00403FD0 0FAFC1 imul eax, ecx xxxx:00403FD3 83C009 add eax, 00000009 xxxx:00403FD6 0FAFC1 imul eax, ecx xxxx:00403FD9 83C007 add eax, 00000007 xxxx:00403FDC 80C241 add dl, 41 xxxx:00403FDF 8896EA000000 mov byte ptr [esi+000000EA], dl xxxx:00403FE5 33D2 xor edx, edx xxxx:00403FE7 F7F3 div ebx xxxx:00403FE9 8D44C906 lea eax, dword ptr [ecx+8*ecx+06] xxxx:00403FED 0FAFC1 imul eax, ecx xxxx:00403FF0 83C003 add eax, 00000003 xxxx:00403FF3 80C241 add dl, 41 xxxx:00403FF6 8896EB000000 mov byte ptr [esi+000000EB], dl xxxx:00403FFC 33D2 xor edx, edx xxxx:00403FFE F7F3 div ebx xxxx:00404000 80C241 add dl, 41 xxxx:00404003 8D4102 lea eax, dword ptr [ecx+02] xxxx:00404006 8896EC000000 mov byte ptr [esi+000000EC], dl xxxx:0040400C 0FAFC1 imul eax, ecx xxxx:0040400F 0FAFC1 imul eax, ecx xxxx:00404012 83C002 add eax, 00000002 xxxx:00404015 33D2 xor edx, edx xxxx:00404017 8BCB mov ecx, ebx xxxx:00404019 57 push edi xxxx:0040401A F7F1 div ecx xxxx:0040401C 8BCE mov ecx, esi xxxx:0040401E C686EE00000000 mov byte ptr [esi+000000EE], 00 xxxx:00404025 80C241 add dl, 41 xxxx:00404028 8896ED000000 mov byte ptr [esi+000000ED], dl xxxx:0040402E E81D000000 call 00404050 xxxx:00404033 5F pop edi xxxx:00404034 5E pop esi xxxx:00404035 5B pop ebx xxxx:00404036 C20400 ret 0004 << Fin de la routine, retour en 401D79 Comme on peut le constater la routine est assez longue, sois vous recopiez tout sur papier puis recodez tout dans votre langage prefere, soit vous utilisez le tmg ripper studio pour recuperer tout le code depuis 403EB0 jusqu'au ret en 404036 et vous le coller dans votre keygen en asm. Dans le code qui va suivre, Esp+10 a ete remplace par un buffer contenant le nom: Key proc, Nom :dWord, Taille :Dword uses edi, ebx PUSH EDI MOV EDI,Nom MOV ESI,ECX lea esi, buffer2 PUSH EDI CALL LOC_00404050 MOVSX ECX,BYTE PTR [EDI] MOV AL,BYTE PTR [EDI+001h] SUB ECX,041h TEST AL,AL JZ LOC_00403EFC MOVSX EAX,AL LEA EDX,DWORD PTR [EAX*2+EAX] LEA EAX,DWORD PTR [EDX*4+EAX] LEA ECX,DWORD PTR [EAX*2+ECX+0FFFFF966h] MOV AL,BYTE PTR [EDI+002h] TEST AL,AL JZ LOC_00403EFC MOVSX EDX,AL LEA EAX,DWORD PTR [EDX*8+000000000h] SUB EAX,EDX LEA EAX,DWORD PTR [EAX*2+EAX] LEA EDX,DWORD PTR [EAX*8+EDX] LEA ECX,DWORD PTR [EDX*4+ECX+0FFFF545Ch] LOC_00403EFC: LEA EAX,DWORD PTR [ECX*4+000000001h] XOR EDX,EDX IMUL EAX,ECX ADD EAX,009h MOV EBX,000000018h IMUL EAX,ECX INC EAX LEA EDI,DWORD PTR [ESI+0000000E4h] DIV EBX LEA EAX,DWORD PTR [ECX+ECX+009h] IMUL EAX,ECX ADD EAX,006h IMUL EAX,ECX ADD EAX,002h ADD DL,041h MOV BYTE PTR [EDI],DL XOR EDX,EDX DIV EBX LEA EAX,DWORD PTR [ECX*2+ECX+008h] IMUL EAX,ECX ADD DL,041h INC EAX IMUL EAX,ECX MOV BYTE PTR [ESI+0000000E5h],DL XOR EDX,EDX DIV EBX LEA EAX,DWORD PTR [ECX*8+000000000h] SUB EAX,ECX ADD EAX,003h IMUL EAX,ECX ADD EAX,004h IMUL EAX,ECX ADD DL,041h ADD EAX,003h MOV BYTE PTR [ESI+0000000E6h],DL XOR EDX,EDX DIV EBX LEA EAX,DWORD PTR [ECX+001h] IMUL EAX,ECX LEA EAX,DWORD PTR [EAX*4+000000007h] IMUL EAX,ECX ADD EAX,003h ADD DL,041h MOV BYTE PTR [ESI+0000000E7h],DL XOR EDX,EDX DIV EBX LEA EAX,DWORD PTR [ECX*4+ECX+007h] IMUL EAX,ECX ADD EAX,003h IMUL EAX,ECX ADD EAX,008h ADD DL,041h MOV BYTE PTR [ESI+0000000E8h],DL XOR EDX,EDX DIV EBX LEA EAX,DWORD PTR [ECX*8+ECX+002h] IMUL EAX,ECX ADD EAX,004h IMUL EAX,ECX ADD EAX,005h ADD DL,041h MOV BYTE PTR [ESI+0000000E9h],DL XOR EDX,EDX DIV EBX LEA EAX,DWORD PTR [ECX+ECX+007h] IMUL EAX,ECX ADD EAX,009h IMUL EAX,ECX ADD EAX,007h ADD DL,041h MOV BYTE PTR [ESI+0000000EAh],DL XOR EDX,EDX DIV EBX LEA EAX,DWORD PTR [ECX*8+ECX+006h] IMUL EAX,ECX ADD EAX,003h ADD DL,041h MOV BYTE PTR [ESI+0000000EBh],DL XOR EDX,EDX DIV EBX ADD DL,041h LEA EAX,DWORD PTR [ECX+002h] MOV BYTE PTR [ESI+0000000ECh],DL IMUL EAX,ECX IMUL EAX,ECX ADD EAX,002h XOR EDX,EDX MOV ECX,EBX PUSH EDI DIV ECX MOV ECX,ESI MOV BYTE PTR [ESI+0000000EEh],000h ADD DL,041h MOV BYTE PTR [ESI+0000000EDh],DL CALL LOC_00404050 POP EDI POP ESI POP EBX RET LOC_00404050: ;Ref: 00403EBA, 0040402E MOV ECX,DWORD PTR [ESP+004h] CMP BYTE PTR [ECX],000h JZ LOC_0040406F LOC_00404059: ;Ref: 0040406D MOV AL,BYTE PTR [ECX] CMP AL,061h JL LOC_00404067 CMP AL,07Ah JG LOC_00404067 SUB AL,020h MOV BYTE PTR [ECX],AL LOC_00404067: ;Ref: 0040405D, 00404061 MOV AL,BYTE PTR [ECX+001h] INC ECX TEST AL,AL JNZ LOC_00404059 LOC_0040406F: ;Ref: 00404057 RETN 00004h Key EndP Le resultat de la generation est en esi+E4 pour l'afficher a l'ecran, pour nous l'adresse de esi a ete remplace par celle contenant le nom rentre, donc: push offset buffer2+0e4h push 0 push WM_SETTEXT push IDD_champserial push hwnd call SendDlgItemMessageA Et voila ;) Kahel - kahel@milliardaires.com