------------------------------------------------------------------------------ *10**************** Apercu des techniques de cracking ************************ -----------------------------| Nosferatu |------------------------------------ Vous n'allez voir que les techniques, nous passerons a l'exemple pratique lors du prochain numero. Il s'agit en fait d'un article paru dans 3d13#1 par The yAcC, mais le ne l'ais pas trouve assez develloppe, j'ai voulu y ajouter ma graine. Je vais d'abord vous presenter les utilitaires INDISPENSABLES pour bien cracker : OSCAR : Avant de vous emmerder a cracker un soft, verifiez si il n'a pas deja ete cracke, ce soft a une superbe liste de numeros de serie, ... et en plus, il vous offre des cours de cracks (donc meme plus besoins decrire cette doc. :-( ). Malheureusement, comme beaucoup de softs, il est en anglais. Mais, l'anglais est une magnifique langue qu'il faut savoir maitriser si l'on veut hacker. Il s'agit d'un production du groupe Phrozen crew. W32DASM : Decompilateur, remet le fichier exe en code source asm. SOFTICE : Decompilateur, tres utile pour connaitre le code asm d'une procedure car il reside en memoire et quand on appuye sur Ctrl+D, il nous place directement dans la procedure qui s'executait au moment de l'appui de Ctrl+D. Eh puis, il a plein d'autre options interessantes HEX WORKSHOP : Editeur hexadecimal qui est assez bien foutu RESOURCE WORKSHOP 16 bits : Fourni avec les logiciels de programmation windows 16 bits de borland (TPW, BCW) 32 bits : Fourni avec les logiciels de programmation windows 32 bits de borland (BC++ 4.5 ou 5 par ex.) : Ce programme permet de modifier images, menus, icones d'un logiciel, ce qui permet de mieux le personnaliser !!! TURBO DEBUGGER : Decompile un programme Exe en asm, Break-points (BP), ... > a utiliser pour les programmes DOS a cracker TURBO DEBUGGER 16 : Version Win 16 bits de TURBO DEBUGGER TURBO DEBUGGER 32 : Version Win 32 bits de TURBO DEBUGGER ...Y'en a d'autres, mais si vous avez deja ceux-la, vous serrez deja assez puissants comme ca pour cracker un gros soft. Nous allons observer un petit programme ecrit en pascal (on fera du C +tard) VAR i:byte; BEGIN Write('Code : '); Read(i); if i=1 then Writeln('Bon code') else Writeln('Mauvais code'); END. Le programme demande un nombre et, si il est egal a 1, il ecrit "Bon code" sinon, il ecrit "Mauvais code". Nous allons voir comment faire en sorte que le programme ecrive "Bon code" tout le temps, quoi que l'on ecrive. il faut d'abord connaitre quelques procedures en ASSEMBLEUR (pour commencer): - CALL : appel d'un procedure, fonction et parfois, boite de dialogue - CMP : comparaison d'une chaine de caracteres ou de nombres, ... - JE : va a un emplacement defini si JUSTE - JNE : va a un emplacement defini si FAUX // commentaire : je et jne sont identiques a ja, jna, jb, jnb, ... jz, jnz - JMP : saute . une procedure ou fonction dans tout les cas(JUSTE ou/et FAUX) Il faut utiliser ensuite un debugger, dans notre exemple, nous allons utiliser TURBO DUBUGGER DOS. Observons d'abord comment le programme fonctionne : A la base, quand on tape 1, le programme ecrit "Bon code" et pour tout le reste, il ecrit "Mauvais code". Je repere, assez rapidement dans le programme une comparaison : cs:005B 9A91028560 call 6085:0291 cs:0060 803E520001 cmp byte ptr [0052],01 <--- ici, comparaison cs:0065 751E jne 0085 <----------------- ici, saut si faux cs:0067 BF5401 mov di,0154 cs:006A 1E push ds Je me rappelle : Jne : cette instruction sert a aller a un emplacement quand la valeur est fausse, son code hexadecimal est 75 Je : cette instruction sert a aller a un emplacement quand la valeur est correcte, son code hexadecimal est 74. Jmp : cette instruction est a aller a un emplacement dans tous les cas. Son code hexadecimal est EB. Il faut donc remplacer 75 (Jne) par 74(Je), ce qui donnera : cs:005B 9A91028560 call 6085:0291 cs:0060 803E520001 cmp byte ptr [0052],01 cs:0065 741E je 0085 cs:0067 BF5401 mov di,0154 cs:006A 1E push ds avec un editeur hexadecimal, on cherchera donc : 80 3E 52 00 01 75 1E BF 54 01 et on remplace par -- -- -- -- -- 74 -- -- -- -- Maintenant, quand on tape 2, le programme ecrira Bon code et quand on tape 1, le programme ecrit : Mauvais code. Approfondissons un peu, le programme doit ecrire "Bon code", que l'on tape 1 ou n'importe quel autre nombre. Je vais vous montrer une erreur a eviter mais qui est nous en apprend : "Si on remplace jne 0085 par jmp 0085, comme ca, il saute tout de suite sur 0085" cs:005B 9A91028560 call 6085:0291 cs:0060 803E520001 cmp byte ptr [0052],01 cs:0065 EB1E jmp 0085 cs:0067 BF5401 mov di,0154 cs:006A 1E push ds avec un editeur hexadecimal, on cherchera donc : 80 3E 52 00 01 74 1E BF 54 01 et on remplace par -- -- -- -- -- EB -- -- -- -- mais maintenant, tout est mauvais, quoi que l'on tape, eh ben, on reflechit : "Si le code est faux (Jne), il va a l'emplacement 0085, ca veux dire que si il est juste, il ne lit pas cette instruction et continue a lire la suite du programme" On dira alors au programme de sauter a l'instruction juste apres : 0067 cs:005B 9A91028560 call 6085:0291 cs:0060 803E520001 cmp byte ptr [0052],01 cs:0065 EB00 jmp 0067 cs:0067 BF5401 mov di,0154 cs:006A 1E push ds avec un editeur hexadecimal, on cherchera donc : 80 3E 52 00 01 EB 1E BF 54 01 et on remplace par -- -- -- -- -- -- 00 -- -- -- Eh voila le travail, maintenant, le programme ecrit "Bon code", quoi qu'il arrive. "Le crack, c'est l'avenir" (The Yacc)