Astr@L Cracking Tutorial ------------------------ La cible est un petit éditeur de texte en francais. Rien de bien excitant. Choisi pour sa petite taille. Nom : Editeur Version : 2.5 Taille de l'exécutable : 284 Ko Niveau : B - Le niveau A correspond à un premier contact avec le cracking, aucun Tutorial de lu. Pour etre considéré du niveau B, il faut connaitre un peu les fonctions de WDasm ( ex : Où trouver les String Datas References, ... ), savoir poser qques BreakPoints sous SoftIce ( ex : BPX Hmemcpy, ... ),et avoir lu les BASES d'assembleur données par notre ami TaMaMBoLo ;=) Url de téléchargement : ftp://ftp.zdnet.com/fr/public/ed2532fr.zip * Introduction : ---------------- J'ai choisi de montrer les 3 grandes facons d'opérer un crack. L'interet me semble-t-il est de le montrer sur le meme programme. Ces 3 'facons' sont : le patch, la recherche de serial, et le keygenerator. * 'Outils' nécessaires : ------------------------ -WinDasm 8.9x ( Disponible partout ) -SoftIce 3.24 ou 4.x ' ( Idem ) -Un editeur hexadécimal ( Par exemple HexWorkshop ) -Un compilateur asm ( Par Exemple Tasm ) I°) ' Patch Approch ' : ----------------------- Commencons par ' faire le tour du propriétaire ', autrement dis on teste à fond le programme. On recherche des messages d'erreurs à l'enregistrement, des fonctions desactivées, des infos éventuelles sur le serial a fournir (taille,...) dans les fichiers d'aide. Et on trouve ( entre autres ) : 'Clé d'identification incorrecte ! '(ce message apparait après que l'onaie cliqué sur 'Vous enregistrer...' dans le Nag qui apparait au démarrage.Dans notre cas, cette phrase va nous etre suffisante. On aurait aussi pu faire apparaitre une autre phrase stratégique en avancant l'horloge de windows et en relancant le Prog ... ;=)L'étape suivante consiste a lancer WinDasm et a rechercher la phrase 'Clé d'identification incorrecte' dans les SDT(String Data Reference).On le fait (cela va sans dire vous devez avoir désassemblé le prog avant) on double-clique sur la référence a cette phrase, on reclique pour trouver une éventuelle occurence ;ce n'est pas le cas ici ..WDasm nous amène donc dans la partie du code qui génère la dite phrase.Sur la version utilisée pour ce tutorial on arrive en 00435D98 : * Possible Reference to String Resource ID=00642:'Clé d'identification incorrecte !' c'est bien la phrase cherchée :00435D98 6882020000 push 00000282 :00435D9D 53 push ebx :00435D9E 680C474400 push 0044470C :00435DA3 A1D4524400 mov eax, dword ptr [004452D4] :00435DA8 50 push eax * Reference To: editeur.MesBox(void*,char*,char*,int,uint) :00435DA9 E8DA550000 call 0043B388 <= là j'imagine que ca fait afficher la phrase Bon la j'arrete bon nombre d'entre vous (sans pretentions aucunes :o) :si on cherche juste a supprimer l'affichage de la phrase, on n'aura rien changé au problème car cela ne fera pas savoir ( croire :o) au programme qu'on est enregistré. DONC la, et c'est un point crucial, c'est une question de raisonnement ; il est clair qu'on a de grandes chances d'etre dans la partie du programme où tout se joue. Mais NOW c'est là qu'on peut faire la difference entre un 'Real Cracker' ( lol ) et un Bourrin. Le Bourrin va patcher a tout bout de champ et va notamment se faire du mal à chercher ou patcher pour que la phrase ne s'affiche plus :/ ... Soit il réussit et il est content... jusqu'à ce qu'il comprenne qu'il n'à rien fait(mdr!) soit il voit qu'il est toujours pas enregistré et il casse tout se disant que de toute facon le cracking c pas pour lui, c'est génétique (re-mdr!) Donc vaut mieux raisonner pour 'travailler' efficace :=) En somme il vaut mieux se fatiguer un peu pour gagner bcp de temps et de satisfaction ensuite...A vous de voir ... ;=) La donc le BUT est de faire que le prog considere n'importe quel code bidon comme valide, et de facon permanente ( on veut pas qu'il nous le demande à chaque démarrage, ca deviendrait vite lourd ), et pourquoi pas dans la foulée que la NAG du démarrage disparaisse. BON, now qu'on a fixé les objectifs, on entre en action ( cRACKERS iN aCTION ! oups c ® là ;))) Raisonnement : Sauf ( Big ) erreur de ma part le prog est executé du haut vers les bas a partir de l'ordre dans lequel vous voyez les instructions sous WDasm.On en conclut pour notre cas que l'appel de la phrase de clef incorrecte se fait par une instruction située AU-DESSUS de l'endroit où on se trouve. Rigolez pas ca débroussaille un max ! Généralement, cet appel ne se fera qu'avec un CALL ou un JMP . Voici une portion de code qui comprend l'endroit où on se trouve et une partie au-dessus : * Possible Reference to String Resource ID=00008: 'Enregistre et ferme le texte actif' Ne pas se fier a cette phrase//anodine ;=) :00435D80 6A08 push 00000008 :00435D82 8D45EC lea eax, dword ptr [ebp-14] :00435D85 50 push eax :00435D86 8D45F4 lea eax, dword ptr [ebp-0C] :00435D89 50 push eax :00435D8A E821A4FDFF call 004101B0 // Calcul du Bon Serial surement ;) :00435D8F 83C40C add esp, 0000000C // Pour Info : ajoute 12 à ESP :00435D92 85C0 test eax, eax // ( I ) :00435D94 7422 je 00435DB8 // ( II ) * Possible Ref to Menu: EDITEUR, Item: 'Enregistrer et quitter Alt+Maj+F4' * Possible Reference to String Resource ID=00016: 'Enregistre les textes modifiés et quitte Editeur' :00435D96 6A10 push 00000010 * Possible Reference to String Resource ID=00642: 'Clé d'identification incorrecte !' Notre point de Départ :00435D98 6882020000 push 00000282 :00435D9D 53 push ebx :00435D9E 680C474400 push 0044470C :00435DA3 A1D4524400 mov eax, dword ptr [004452D4] :00435DA8 50 push eax * Reference To: editeur.MesBox(void*,char*,char*,int,uint) :00435DA9 E8DA550000 call 0043B388 Bon j'ai placé quelques commentaires d'explications succintes. En (I) on a un TEST, et c'est le premier que l'on rencontre en remontant depuis la phrase d'erreur. On peut donc soupconner fortement une comparaison entre deux serials...le bon et le mauvais :) On est conforté dans nos soupcons par le JMP qui succède.Ce saut a pour paramètre 00435DB8, qui est une adresse. Et cette adresse se trouve PLUS LOIN que celle où on fait apparaitre la phrase d'erreur ( autour de 00435DA8 ).En clair cela signfie que ce saut fait sauter la procedure d'affichage d'erreur si les 2 serials en memoire sont identiques!et ils nous envoient en plus vers une procédure qui nous enregistre DEFINITIVEMENT :=)Et là on va conclure..ce saut est conditionnel et c'est une condition d'egalité ( Cf. le mémo de TaMaMBoLo ). Là ca fait Tilt chez Tout le Monde ( on y croit :) : il faut mettre à la place un saut de NON-égalité. Ainsi, comme ya vraiment mais vraiment très peu de chance que vous entriez le bon serial ;=), il n'y aura jamais égalité des deux serials à la comparaison et donc n'importe quel code bidon enregistrera le Logiciel. Résumé succint : ---------------- *-------*-----------*--------* | JE | Devient | JNE | *-------*-----------*--------* | 7422 | Devient | 7522 | *-------*-----------*--------* La modification est à faire avec faire avec un éditeur hexadécimal.(Je vous renvoie à n'importe quel Tutorial de l'excellent TaMaMBoLo ;=)) Lancez le programme le nag est tjrs la, entrer vos Infos ( Nom, Sérial ) ... pas de message d'erreur. Quittez, redémarrez, PLUS de Nag et dans 'A propos de... ', kèskecétikonvoa ? ;)) Voila. Pour prouver qu'on peut approcher un crack de maintes facon, on verra la prochaine fois la recherche de Serial. AsTr@L.