Initiation au cracking Par Little Bob I Introduction Le shareware, c'est bien. C'est trŠs bien mˆme. Nous allons voir pourquoi... Vous vous ˆtes s–rement d‚j… retrouv‚ devant un logiciel trŠs int‚ressant, mais qui refuse de fonctionner plus de 30 jours (parfois mˆme 15), ou dont les fonctionnalit‚s principales (sauver, imprimer) sont inaccessibles... Rageant, non ? Je vous propose ici d'apprendre … les cracker (… savoir : retirer la limite de temps, d‚brider le prog...). Deux m‚thodes existent pour cracker : la premiŠre (la plus facile … utiliser, … mon avis, et que je conseille fortement aux d‚butants) est le Dead Listing. En gros, on d‚sassemble le programme (avec Win Dasm 8.93), on regarde ce qu'il fait, … quel moment, et on bidouille pour r‚ussir … contourner la limitation shareware. La deuxiŠme, c'est le debugging Live, o— il s'agit de savoir ce que fait le programme en temps r‚el (avec SoftIce), ce qui est beaucoup plus complexe que le Dead Listing. En gros, on lance le programme on suit ce qu'il fait, on trouve l'endroit o— il se bride, et on inverse la machine. Attention, il n'y a pas de m‚thode meilleure qu'une autre, l'id‚al ‚tant de toutes les connaŒtres et de toutes les utiliser au moment propice. II Mat‚riel n‚cessaire Un PC Une imprimante Un shareware … cracker Un bouquin r‚sumant les principales fonctions de l'assembleur (50 francs environ) WinDasm 8.93 SoftIce Un ‚diteur hexad‚cimal (HexWorkShop est pas mal et sous Windows) Un paquet de clopes (les Lucky Strike sont trŠs bonne pour la r‚flexion) Du Gin ou du Whisky (moins bon pour la r‚flexion, mais ‡a donne du courage) Un cerveau Des mains Des yeux III Th‚orie Je sais ce que vous pensez : la th‚orie, on en a rien … foutre, c'est mieux la pratique... Je suis d'accord avec vous ! Seulement, essayez de regarder un Dead Listing sans avoir fait de th‚orie, vous allez rigoler ! Bon, assez gland‚, une gorg‚ de Gin et on y va... La plupart de ces programmes ont ‚t‚ con‡us selon le mˆme sch‚ma : d'abord, on cr‚e la version complŠte, ensuite on la bride, ce qui signifie que TOUTES les fonctionnalit‚s sont encore dans le programme, mais que certaines ont ‚t‚ rendues inaccessibles... Eh oui ! Ca co–te moins cher de faire comme ‡a plut“t que de faire deux versions diff‚rentes ! R‚sultat : grƒce … leur envie de plein de sous, les programmeurs nous aident … cracker leurs programmes !!! Plusieurs approches pour le faire sont disponibles. On peut essayer de s'amuser … r‚activer les fonctions une par une (avec l'aide de WinDasm). Bof... C'est compliqu‚ et ‡a ne donne pas forc‚ment de bons r‚sultats. On peut essayer de trouver un bon num‚ro de s‚rie (pour les programmes qui en demandent un, ‚videmment). La m‚thode est simple (la pratique un peu moins, SoftIce ayant une fƒcheuse tendance … tout faire planter). Lancez WinDasm, et cherchez dans le prog la ligne o— il nous balance "Mauvais code" ou un truc dans le genre. Notez le num‚ro de la ligne. Ouvrez le prog … cracker avec le Symbol Loader de SoftIce (je vous l'avais bien dit que les deux ensemble, c'‚tait mieux). Lancez le debugging : normalement, SoftIce (un ‚cran Dos tout moche) devrait s'ouvrir (sinon, Control D). Tapez bpx (ca met un breakpoint) suivi de l'adresse relev‚e, puis Contol D. Le prog continue … tourner (si SoftIce n'a pas plant‚ entre temps) et allez vite mettre un nom bidon, et un num‚ro de s‚rie pˆch‚ au fin fond de votre esprit brumeux (d'autant plus brumeux que c'est d‚j… la cinquiŠme Lucky depuis le d‚but du debugging du soft, et que la bouteille de Gin y est pass‚e). Faites OK et (O miracle), SoftIce s'ouvre (normal, ‡a sert … ‡a un bpx). En fait, il s'est arrˆt‚ juste aprŠs avoir compar‚ le num‚ro de s‚rie que vous avez entr‚ avec le num‚ro valide. En g‚n‚ral, il stocke le num‚ro valide en eax (ou ebx, ecx, edx : ‡a, ce sont les registres du processeur (sa m‚moire, en gros)), sinon, allez zieuter un coup avec WinDasm autour de la chaŒne (string) "mauvais code", o— ‡a a ‚t‚ stock‚... Sous SoftIce, tapez d eax pour voir ce qu'il y a dans eax. L… c'est plus compliqu‚ : c'est en hexad‚cimal (pas ‚tonnant). Donc un conseil : notez tout, ‚teignez l'ordi, prenez vos Luckies, allez au caf‚ du coin et commandez une bonne biŠre. Ensuite, regardez, observez, calculez et essayez de trouver quelque chose (vous aurez in‚vitablement besoin de connaŒtre les modes de calcul en hexad‚cimal (‡a serait con de se lancer dans le cracking sans les connaŒtre !)). Finalement vous trouvez plusieurs s‚ries de caractŠres diff‚rentes : essayez-les toutes jusqu'… trouver la bonne ! Si le prog est simple et que vous avez de la chance, le code se trouve ‚crit en ascii dans la colonne de droite. Avec cette m‚thode, vous n'avez pas vraiment crack‚ (le prog n'a pas ‚t‚ modifi‚), vous avez seulement bidouill‚. Pour vraiment cracker, il vaut mieux utiliser le Dead Listing, pour regarder ce que fait le prog et quand. Ainsi, au moment de la routine de v‚rification du code, il fera un test entre le code entr‚ et le bon, et, si ce ne sont pas les mˆmes, il fera un saut (je ou jne, en g‚n‚ral) jusqu'… la boŒte de dialogue " Mauvais code ". L'astuce consiste … inverser le saut, afin que le prog croie que le code est bon alors qu'il ne l'est pas du tout. Attention : il faut inverser le saut de l'enregistrement ET le saut de v‚rification au lancement du prog (c'est imp‚ratif). IV La pratique Bon, pour la pratique, nous allons nous attaquer … Memory Game 95 (http://www.multimania.com/chezlittlebob/mem95.zip). Ce jeu, dont le principe est, il faut l'avouer, plut“t inint‚ressant, a un c“t‚ passionnant pour l'apprenti-crackeur : il reprend point par point les th‚ories que je viens de vous ‚noncer. C'est une cible parfaite. En plus, il possŠde une option " unregister " qui permet de refaire plusieurs essais. Commen‡ons par le d‚sassembler avec Win Dasm 8.9. On cherche la ligne " Sorry ! The registration... " (avec la boŒte de dialogue " String References ") et on la trouve deux fois : en 00405C50 et en 0040B9BC. Pour vous ‚viter des recherches, je vous aide un peu : la premiŠre est le contr“le effectu‚ au lancement du prog, et la seconde celui effectu‚ … l'enregistrement. C'est donc le deuxiŠme qui nous int‚resse pour le moment. Dans Win Dasm, lancez " Load Process " (Ctrl-L). Dans la fenˆtre principale, cliquez sur " Goto Code Location " (Shift-F12) et entrez 0040B9BC. Posez un point de break sur cette ligne (Ctrl + Click gauche) et lancez ensuite " Run " dans la fenˆtre " process " (une des nombreuses fenˆtres ouvertes). Dans le menu " Game " du jeu, lancez " Register ", entrez comme nom : Little Bob, et comme serial : n'importe quoi --> Win Dasm beep et le prog bloque. Retournez dans Win Dasm, et, dans une des fenˆtres, cliquez sur edx. Normalement, juste … c“t‚, dans la partie ASCII, vous devriez lire : AC2B8FC94340C598. C'est notre code ! Notez-le, quittez Win Dasm et lancez le jeu, faitez " Register ", entrez le nom, le code, OK : c'est gagn‚ ! ! ! Vous venez de cracker votre premier jeu ! (NB : La mˆme chose aurait pu ˆtre r‚alis‚e avec Soft Ice.) C'‚tait un peu facile, il faut l'avouer, d'autant plus que le num‚ro de s‚rie n'‚tait pas cod‚ en m‚moire. Il se pourrait trŠs bien que vous ne parveniez pas, pour certains (et la plupart) des programmes … trouver ce num‚ro aussi simplement. Il vaut mieux s'attaquer au programme lui-mˆme. Voyons un peu comment la phase d'enregistrement fonctionne... Lorsque vous entrez un mauvais num‚ro de s‚rie, une fenˆtre s'ouvre et vous crie : " Registration... ". C'est bon pour nous. Allez dans Win Dasm, recherchez cette chaŒne : vous trouvez deux r‚f‚rences d‚crites plus haut. Encore une fois, la deuxiŠme seulement nous int‚resse (pour le moment.) Vous devriez trouver ceci : ------------------------------------------------------------------------------------------ * Referenced by a (U)nconditional or (C)onditional Jump at Address: |:0040B744(C) | Possible Reference to String Resource ID=61244: "Sorry, the registration... | :0040B9BC 683CEF0000 push 0000EF3C etc... ------------------------------------------------------------------------------------------ " Referenced... " signifie que cette ligne est appel‚e par un saut (Jump) conditionnel (C) … l'adresse 0040B744. C'est donc … cette ligne (et celles qui sont autour) qu'il faut aller voir : ------------------------------------------------------------------------------------------ :0040B742 85C0 test eax, eax :0040B744 0F8572020000 jne 0040B9BC ------------------------------------------------------------------------------------------ D'abord il teste un bidule quelconque, ensuite il saute si ce n'est pas ‚gal (… quoi ? ? ?). En clair, il d‚clare le code mauvais si ce n'est pas ‚gal. Il suffit d'inverser le saut (je … la place de jne) et le tour est jou‚ : prenez un ‚diteur hexad‚cimal, recherchez 85C00F8572020000 et remplacez le 0F8572 par OF8472. D‚sormais, le seul cas o— il dira " Sorry, the registration... " sera le cas o— vous aurez entr‚ le bon code ! ! ! Donc, afin de faire plus pro, mieux vaut carr‚ment effacer cette instruction en rempla‡ant le jne par une s‚rie de nop (= ne fait rien). Ainsi, il faudra remplacer 0F8572020000 par 909090909090. Cette fois-ci, tous les codes (valides ou non) sont bons ! ! ! Testez votre oeuvre : le prog vous enregistre, tout est OK. Quittez et relancez : il vous crie de nouveau que le code est mauvais. Cela veut dire qu'il v‚rifie le code … chaque d‚marrage du jeu, donc qu'il appelle une routine au d‚but : c'est ici que va nous servir la premiŠre des deux chaŒnes trouv‚es pr‚c‚demment, inutilis‚e encore : ------------------------------------------------------------------------------------------ 00405C45 85C0 test eax, eax :00405C47 0F8434010000 je 00405D81 :00405C4D 8B45E4 mov eax, dword ptr [ebp-1C] * Possible Reference to String Resource ID=61244: "Sorry, the registration code does not match! Try again or Ca" ------------------------------------------------------------------------------------------ Le principe est diff‚rent (inverse, mˆme) : il teste, si c'est ‚gal il saute par dessus et consid‚re que le code est bon. Mˆme principe que tout … l'heure: soit on inverse (remplacer 0F8434 par 0F8534), soit on remplace non pas par des nop, mais par un saut obligatoire (quoi qu'il arrive, le programme dit : code OK !). Dans ce cas, remplacer 0F8434010000 par E93501000090. Arriv‚ … ce stade, le programme est entiŠrement crack‚ : impossible d'aller plus loin ! Bravo ! ! ! J'espŠre que ce cours vous aura aid‚. En tout cas s'il vous a plu, si vous d‚sirez me poser des questions, me faire des remarques ou des suggestions, n'h‚sitez pas … me contacter (littlebob57@yahoo.fr), mˆme pour me demander d'‚crire un cours sp‚cifique pour un prog. Vous pouvez aussi visiter ma page Web d‚di‚e au cracking (http://www.multimania.com/chezlittlebob/) : vous y serez bien accueilli ! Si, d'aventure, mon URL ‚tait chang‚e, mon Email littlebob57@yahoo.fr ne serait pas modifi‚e : vous pourrez toujours me contacter, pour me demander, entre autres, mon URL actuelle ! Amusez-vous bien et bonne chance ! Little Bob