-? =========================== - Introduction ---------- - Je ne prends aucune responsabilité de l'utilisation de ces informations. Ce tutoriel est de savoir éducatives seulement. Salut à tous, dans ce tutoriel, je me propose de vous apprendre comment faire un keygen assez simple, d'un programme appelé W3Filer 32 V1.1.3. W3Filer est un assez bon téléchargeur web ... Je suppose que certains d'entre vous savent peut-être le programme. I`ll suppose que vous savez: A.How utiliser débogueur (dans ce cas, SoftIce). B.
How à se fissurer, généralement (trouver des routines de protection, les soigner, etc ...). C.How utiliser désassembleur (Cette connaissance peut aider). D.Assembly. E.Combien de code dans Turbo Pascal ™. Outils de la nécessité: A.SoftIce 3.00 /01 ou plus récent. B.WD32Asm. (Pas un must). Programme C.Le W3Filer V1.13 (si pas fournie dans ce dossier), peut être trouvée dans www.windows95.com je crois. D.Turbo Pascal (toute version). Eh bien, assez de bla bla, passons fissuration ... Run W3Filer 32.
A pops nag screen, et exige l'enregistrement (Hmm, ce sux ;-)) Maintenant, nous constatons ce programme a une sorte de numéro de série (le mien est 873977046 ), Gardons la série à l'esprit, je parie que nous avons `ll rencontrer à nouveau alors que nous sommes sur le débogueur. Eh bien, maintenant, nous allons mettre votre nom et un code reg mannequin ... établi un BP sur GetDlgItemTextA, et appuyez sur OK. Nous crevons l'intérieur GetDlgItemTextA, permet de trouver la routine d'enregistrement ...
I`ll vous faire économiser le travail, la routine d'enregistrement est la suivante:: 00404DB2 8D95A8FAFFFF lea edx, dword ptr [ebp + FFFFFAA8]: 00404DB8 52 poussoir EDX ---> Votre nom d'utilisateur ici. : 00404DB9 E80B550000 appel 0040A2C9 ---> routine d'enregistrement. : 00404DBE 83C408 ajouter esp, 00000008 ---> Je sais pas exactement ce qu'il est. : 00404DC1 85C0 essai eax, eax ---> identifiant Boolean, 0 si: 00404DC3 7D17 JGE 00404DDC ---> l'enregistrement a échoué, 1 si OK.
Eh bien, nous allons entrer dans le CALL 40A2C9, et voir ce qui est à l'intérieur: (S'il vous plaît lire mes commentaires dans le code). * Référencé par un appel à des adresses: |: 00404DB9,: 00407F76 | : 0040A2C9 55 poussoir ebp: 0040A2CA 8BEC mov ebp, esp: 0040A2CC 81C4B0FEFFFF ajouter esp, FFFFFEB0: 0040A2D2 53 poussoir EBX: 0040A2D3 56 poussoir ESI: 0040A2D4 57 poussoir edi: 0040A2D5 8B5508 mov edx, dword ptr [ebp + 08]: 0040A2D8 8DB500FFFFFF lea esi, dword ptr [ebp + ffffff00]: 0040A2DE 33C0 xor eax, eax: 0040A2E0 EB16 jmp 0040A2F8 * Référencé par une carte (U) ou nconditional © Jump onditionnel au Adresse: |: 0040A2FB © | : 0040A2E2 0FBE0A movsx ecx, byte ptr [EDX] ----> Ici commence la partie intéressante.
: 0040A2E5 83F920 cmp ecx, 00000020 ----> ECX est le produit de carbonisation actuelle dans le nom d'utilisateur, hmm, 20h = '' ...: 0040A2E8 740D je 0040A2F7 ----> Voyons,: 0040A2EA 8A0A cl mov , byte ptr [EDX] ----> En général, tout cela ne boucle, est de copier le nom d'utilisateur de [EDX], pour [ESI], sans les espaces! (Gardez cela à l'esprit!).
: 0040A2EC 880C06 octet de mov ptr [esi + eax], cl: 0040A2EF 42 inc edx: 0040A2F0 40 eax inc: 0040A2F1 C6040600 octet de mov ptr [esi + eax], 00: 0040A2F5 EB01 jmp 0040A2F8 * Référencé par une carte (U) nconditional ou © onditionnel Aller au Adresse: |: 0040A2E8 © | : 42 0040A2F7 inc edx * référencé par une carte (U) ou nconditional © Jump onditionnel à des adresses: |: 0040A2E0 (U),: 0040A2F5 (U) | : 0040A2F8 803A00 CMP octets ptr [EDX], 00: 0040A2FB 75E5 jne 0040A2E2 ----------------> Ceci est la boucle, nous avons ce qu'il fait, Continuons traçant le code. ..
: 56 0040A2FD poussoir esi --------> Le nom d'utilisateur est poussé, afin de UpCase il est caractères. * Référence Pour: USER32.CharUpperA, Ord: 0000h | :! Utilisateur 0040A2FE E80F330000 Appel CharUpper ---> Après cela, notre nom est en majuscules. : 0040A303 56 poussoir esi -----> Notre nom en majuscules ici. * Référence Pour: cw3220mt._strlen, Ord: 0000h | : 0040A304 E86F300000 Appel 0040D378 ---> Ceci est la longueur de notre nom. : 59 0040A309 pop ecx: 0040A30A 8BC8 mov ecx, eax ---> ECX = Longueur. : 0040A30C 83F904 cmp ecx, 00000004 ---> Longueur> = 4 (MUST).
: 0040A30F 7D05 JGE 0040A316 ---> Passons à cette adresse ...: 0040A311 83C8FF ou eax, FFFFFFFF: 0040A314 EB67 jmp 0040A37D * Référencé par une carte (U) ou nconditional © Jump onditionnel au Adresse: |: 0040A30F © | : 0040A316 33D2 XOR EDX, EDX: 0040A318 33C0 xor eax, eax: 0040A31A 3BC8 cmp ecx, eax: 0040A31C 7E17 jle 0040A335 ---> (pas important, juste une autre vérification inutile).
================================================== ================================= ============ D'ICI ET ON, LE CODE IMPORTANT, FAITES ATTENTION ================== ========================== ================================================== ======= Une chose avant que nous continuons, EDX = 00000000h que nous entrons dans les prochaines instructions. * Référencé par une carte (U) ou nconditional © Jump onditionnel au Adresse: |: 0040A333 © | : 0040A31E 0FBE1C06 movsx EBX, byte ptr [esi + eax] ---> nom EBX, décalage EAX. : 0040A322 C1E303 shl EBX, 03 -----> Hmm, il SHL est l'omble de 03h ...
(Rappelez-vous que). : 0040A325 0FBE3C06 edi movsx, byte ptr [esi + eax] ---> Maintenant EDI nom d'utilisateur, compensée EAX. : 0040A329 0FAFF8 edi imul, eax -----> Il multiplie le charbon par le décalage dans le nom de l'utilisateur! (Rappelez-vous que). : 0040A32C 03DF ajouter EBX, edi -----> Ajoute le résultat d'EBX (Ce fut bombardée (Ding Dong =)). : 0040A32E 03D3 ajouter EDX, ebx -----> EDX EDX = + EBX !!! - Ceci est au cœur de cette routine d'enregistrement !!! : 0040A330 40 eax inc -----> Augmenter EAX par l'un (le caractère suivant).
: 0040A331 3BC8 cmp ecx, eax: 0040A333 7FE9 jg 0040A31E ----> Si boucle ECX. * Référencé par une carte (U) ou nconditional © Jump onditionnel au Adresse: |: 0040A31C © | : 0040A335 A120674100 mov eax, dword ptr [00416720] ---> Hmmmmmm, Quel est ici ????? : 0040A33A C1F803 sar eax, 03 ---------> ATTENDRE! S'il vous plaît taper SICE '? EAX 'Est-ce que ce nombre dans EAX semblera familier à nous? ;-) Si vous n `comprendre encore, que, Il est notre NUMERO DE SERIE! (S'IL VOUS PLAÎT, prenez votre temps, et vérifiez par vous-même -! N `me faire confiance).
OK, maintenant que nous savons, qu'il est SHR EAX par 03 (SAR est presque identique à SHR). : 0040A33D 03D0 ajouter EDX, eax ---------> Hmm, il ajoute le résultat de la boucle, le numéro de série par shr'd 03h: 0040A33F 52 poussoir EDX -------> Continuons . (À ce stade, je peux vous dire, le nombre de reg, est dans EDX - seulement que le nombre de reg est en HEX -> Voilà comment vous entrez). * Possible StringData Réf de données Obj -> «lx%" | : 0040A340 685EF54000 poussoir 0040F55E: 0040A345 8D95B0FEFFFF lea edx, dword ptr [ebp + FFFFFEB0]: 0040A34B 52 poussoir EDX * Référence Pour: USER32.
wsprintfA, Ord: 0000h | : 0040A34C E8E5320000 Appel 0040D636 -------> Celui-ci, ne HEX2STR (Prend la valeur de EDX, et il se transforme en une chaîne hexagonale). : 0040A351 83C40C ajouter esp, 0000000C: 0040A354 8D8DB0FEFFFF lea ecx, dword ptr [ebp + FFFFFEB0] -----> type 'd ecx »- ce qui est le nombre de reg! Cela suffit pour nous, le reste du code, est juste pour comparer le code reg correcte avec les nôtres. : 51 0040A35A poussoir ecx * Référence Pour: USER32.
CharLowerA, Ord: 0000h | : 0040A35B E8B8320000 Appel 0040D618: 0040A360 8D85B0FEFFFF lea eax, dword ptr [ebp + FFFFFEB0]: 0040A366 50 poussoir eax: 0040A367 FF750C poussoir [ebp + 0C] * Référence Pour: cw3220mt._strcmp, Ord: 0000h | : 0040A36A E875300000 Appel 0040D3E4: 0040A36F 83C408 ajouter esp, 00000008: 0040A372 85C0 essai eax, eax: 0040A374 7405 je 0040A37B: 0040A376 83C8FF ou eax, FFFFFFFF: 0040A379 EB02 jmp 0040A37D * Référencé par une carte (U) Jump onditionnel nconditional ou © au Adresse : |: 0040A374 © | : 0040A37B 33C0 xor eax, eax * Référencé par une carte (U) ou nconditional © Jump onditionnel à des adresses: |: 0040A314 (U),: 0040A379 (U) | : 0040A37D 5F pop edi: 0040A37E 5E pop esi: 0040A37F 5B pop ebx: 0040A380 8BE5 mov esp, ebp: 0040A382 5D pop ebp: 0040A383 C3 ret Faire la réelle Keygen ~~~~~~~~~~~~~~~ ~~~~~~~~~ Maintenant, après que je l'ai expliqué comment le programme calculer le code d'enregistrement, vous pouvez écrire votre propre keymaker, sans regarder mon code, ou de regarder mon code (en Turbo Pascal - désolés pour la prochaine fois de tous les amateurs C).
Ça y est, voici la source de mon keygen: ------------------- Couper ici ------------------- -------------------------- W3FilerKeygen programme; var Key, SerialNum, EB, ED, chiffres: Entier long; I, X: Byte; Nom, KeyHex: String; commencer Writeln ('W3Filer32 V1.1.3 Keymaker'); writeln ('fissuré par ^ ^' '97 douleur /Rebels »!); Écris ton nom:'); {Lire le nom} readln (Nom); Write ('Numéro de série:'); readln (SerialNum); {Oui, nous avons besoin du numéro de série pour le calcul!} Key: = 0; x: = 0; Pour I: = 1 à la longueur (Nom) ne commencera Nom [I]: = upcase (Nom [i]); Si Nom [I] '' puis commencer eb: = ord (Nom [I]) shl 3; {EB = Nom [I] Shl 03h} Ed: = ord (Nom [I]); {ED = Nom [I]} ed: = ed * (x); {ED ED = * Offset} inc (x); eb: = eb + ed; {Ajouter ED à EB} Key: = Key + EB; {Ajouter EB à KEY} end; fin; Légende: = Touche + (SerialNum SHR 3); {Ajouter SerialNum de l'03h à Key} {De là, cela est tout simplement HEX2STRING -> `m sûr il est explaintory auto, autre - aller et apprendre les bases de nombre de nouveau! ;-)} KeyHex: = ''; chiffres répétition: = touche MOD 16; clé: = div clé 16; Si chiffres Si chiffres>