Tutoriel Débogage et cracking pratiques 17-07-2012, 14:53 Bonjour, Nous allons

Tutoriel Débogage et cracking pratiques 17-07-2012, 14:53 Bonjour, Nous allons maintenant avoir une introduction pratique aux fonctions d'un débogueur. Cela signifie que je ne parlerai pas en profondeur de tout ce qu'il est possible de faire (impossible), et que je ne donnerai pas non plus de notions de langage assembleur. Mais bien sûr, personne ne sera déconcerté. Introduisons le concept de "debug". Au départ, il est bon de dire que débogueur n'est pas la même chose que désassembleur. Un désassembleur transforme le langage machine, transcrit à partir des instructions envoyées au processeur, en langage assembleur, contrairement au langage machine, lisible par l'homme. Les débogueurs analysent et testent les applications. Si vous travaillez avec la programmation, vous devez avoir déjà travaillé avec un, car tout bon IDE en a toujours un avec lui. Ils sont largement utilisés pour la gestion des erreurs. Les débogueurs exécutables déjà compilés (binaires) fonctionnent de la même manière, mais ils utilisent un désassembleur avant d'exécuter leur action. Aucun de ceux-ci ne peut être confondu avec un décompilateur. Concepts de base Bon, maintenant je suis professeur d'informatique du coin. Savez-vous ce qu'est la mémoire RAM et quelle fonction ? Bien sûr que vous le savez, mais remplissons la saucisse. La RAM (mémoire à accès aléatoire) est volatile et sert de stockage temporaire pour les fichiers, les programmes et les données des programmes en cours d'exécution. Le processeur est le cerveau de l'ordinateur, exécutant des instructions et des opérations. L'adressage mémoire est une sorte de table qui indique au processeur où se trouvent certaines données en mémoire. La pile est une structure de stockage de données. Vous avez peut-être déjà entendu parler de « débordement de pile », n'est-ce pas ? Les registres sont des morceaux de mémoire situés sur le processeur, temporairement utilisés pour effectuer des opérations. Les processeurs 32 bits peuvent stocker 32 bits dans chaque registre. Processeurs 64 bits... Les registres ont une vitesse d'accès élevée. Sa capacité (et sa quantité) dépend totalement du processeur. Par exemple, un processeur Intel i386 32 bits possède 9 registres 32 bits. Ce sont : EAX, EBX, ECX, EDX, ESP, EBP, ESI, EDI et EIP. En théorie, chacun a sa fonction, mais en pratique ils s'utilisent tous comme les autres, puisque le programmeur peut les utiliser à sa guise, avec une seule restriction : ne pas toucher au dernier registre (EIP), car il a l'instruction fonction d'adressage. Si vous le modifiez, le flux d'exécution de votre programme changera, ce qui pourrait entraîner une opération illégale ou une erreur de segmentation. Assemblage de base Bien sûr, nous n'allons pas voir grand-chose en assemblage, juste une introduction. Cependant, je vous conseille d'approfondir vos études dans cette langue, si ce domaine vous intéresse vraiment. C'est un langage de bas niveau (haute performance, syntaxe différente du langage humain, travaille directement avec l'architecture et les registres du processeur), qui lit les opcodes (codes opérationnels, instructions envoyées et interprétées par le processeur) et les convertit en ses mnémoniques ( mots de langue réservés qui constituent la syntaxe). Asm a sa difficulté de syntaxe, ce que vous n'avez pas l'habitude de voir. Pensez à "goto" de Basic, AutoIt1-2 et Batch. C'est dans ce style. Les débogueurs actuels peuvent commenter le code et le délimiter, ce qui facilite le travail. Mais il n'y a rien pour épargner le look, le papier et le stylo. Peu importe combien vous donnez un nom à une variable lors de la programmation d'un logiciel, au moment de la compilation, il est converti en l'adresse mémoire que la variable occupe. Chaque instruction a son adresse, et c'est sur cette base que fonctionnent les JUMPS (sauts). Examinons maintenant certaines des instructions de base (quelque chose comme les fonctions natives). MOV destination,source Déplace la valeur d'un champ à un autre, pouvant travailler avec des constantes, des valeurs, des piles, etc. CMP/TEST string1,string2 Comme la fonction C strcmp(), effectue une comparaison entre les deux arguments. Dans le cas de TEST, vous pouvez également vérifier si une valeur est plus petite que l'autre (et, bien sûr, si elle est plus grande que l'autre). L'instruction CMP n'effectue qu'une soustraction entre les deux valeurs. Si le résultat est nul, les deux valeurs sont égales (12345-12345=0 :. 12345=12345). Adresse JMP Passe à une adresse spécifique (nous verrons les adresses plus tard). L'adresse JE/JZ (Saut si égal) saute à une adresse si la dernière comparaison a renvoyé vrai. L'adresse JNE/JNZ (Saut si différent) saute à une adresse si la dernière comparaison a renvoyé un résultat négatif. ADD/SUB/MUL/DIV destination, value Effectue l'une des 4 opérations de base. PUSH value Ajoute la valeur en haut de la pile, souvent utilisée dans les appels (CALL), car une fonction récupère ses arguments dans les piles. Valeur POP Supprime la valeur du haut de la pile. Notez que, comme pour une pile de livres, vous ne pouvez accéder aux données de la pile que du dernier au premier. CALL func Appelle une fonction interne ou externe (depuis une DLL). Bien sûr, il existe de nombreuses autres instructions, mais ce sont celles que nous examinerons le plus. Nous avons déjà parlé des registres, mais au-delà d'eux, nous avons aussi des drapeaux, des bits couramment utilisés comme résultats d'opérations (un booléen - 1 (vrai) ou 0 (faux) - par exemple). C'est pourquoi ils sont utilisés dans les comparaisons (CMP/TEST). Les plus connues sont : ZF/Z Une opération aboutie à zéro (dans le cas d'un CMP, les deux valeurs sont égales). CF/C Le résultat d'une opération a dépassé la valeur maximale supportée par le registre (un débordement). SF/S Indique une valeur négative. Toutes les applications dans ASM sont basées sur une adresse. Les variables que vous créez pendant le développement deviennent des adresses (une zone de mémoire). Hops (JMP) fonctionne également avec ces adresses. OllyDbg Apprenons maintenant à connaître l'interface principale de Seuls les utilisateurs enregistrés et activés peuvent voir les liens., Cliquez ici pour vous inscrire... . Bien sûr, la curiosité vous aidera plus que n'importe quel tutoriel. Ici, je vais juste vous montrer par où commencer. La fenêtre est divisée en quelques sections. Le premier a 4 colonnes et c'est là que nous verrons le code assembleur du programme. La première colonne affiche les adresses sur lesquelles se trouve la ligne. La deuxième colonne affiche le vidage hexadécimal de l'instruction. Vous remarquerez qu'il existe certains modèles. Par exemple, "PUSH 0" est toujours représenté par "6A 00". Lorsque vous utilisez des valeurs numériques entières comme arguments, l'instruction "PUSH" est toujours représentée par "6A", suivie de la représentation de l'argument. C'est parce que c'est ainsi que fonctionne le désassembleur : il génère un vidage hexadécimal du fichier et recherche des modèles. La troisième colonne n'est rien de moins que le code assembleur pour cette instruction. La quatrième colonne contient des commentaires de débogueur d'une grande valeur pour nous. Juste à côté de ce cadre, nous avons une zone ("Registres") qui montre les registres et les drapeaux, mis à jour pendant l'exécution de l'application. Ci-dessous, nous avons deux cadres. Le premier affiche la mémoire RAM utilisée par l'application, octet par octet. Avec trois colonnes, il affiche l'adresse, la représentation hexadécimale (8 octets/ligne) et la représentation ASCII. Le dernier cadre (mais très important) affiche l'état de la pile. La pile est souvent utilisée pour passer des paramètres (arguments) aux fonctions. Il comporte 3 colonnes, affichant l'adresse, la valeur et un commentaire important fait par le débogueur. Pour ouvrir un fichier binaire depuis Olly vous devez soit le faire glisser vers son icône, soit utiliser la commande "Ouvrir" (Fichier > Ouvrir). Soulignons que ce qui vous aidera maintenant, c'est votre propre curiosité. Créez de petits programmes, compilez-les et jouez-les à l'intérieur. Bonne chance dans tes études. Nous y voilà? Je vais maintenant le lancer en debug, cracker 2 pseudo-logiciels. Les deux pseudo-logiciels sont des crackme (spécialement conçus pour être crackés). Dans le premier, il y a une série statique, que nous devons connaître. Dans le second, la série n'est pas statique. Comme il demande également le nom, nous pensons que le numéro de série est calculé à partir de ces données. Je vais utiliser Olly Debugger. Les deux crackme ont été développés par moi en C. Ils n'ont pas d'interface graphique en raison de la paresse. Vous pouvez les télécharger avec le code source Seuls les utilisateurs enregistrés et activés peuvent voir les liens., Cliquez ici pour vous inscrire... . Bien sûr, vous ne regarderez pas le code source avant de les battre, ou vous manquerez de plaisir (et c'est votre problème !). Série statique Il est impossible que cela existe toujours, mais pas improbable. De plus, nous devons commencer de la manière la plus simple. Ouvrons ensuite le fichier "estatico.exe". Une fenêtre apparaît en disant "Entrer série". Nous n'avons aucune idée de ce qu'est cette série, alors tapons n'importe quoi: "burger oil". Une fenêtre avec le titre "CrackMe" et le texte "Wrong!", une boîte de message Windows standard, est apparue. Il est très important de sauvegarder les types de messages d'erreur et les textes. Cliquons sur Ok et sortons du uploads/S4/ tutoriel-debogage-et-cracking-pratiques.pdf

  • 27
  • 0
  • 0
Afficher les détails des licences
Licence et utilisation
Gratuit pour un usage personnel Attribution requise
Partager
  • Détails
  • Publié le Oct 22, 2021
  • Catégorie Law / Droit
  • Langue French
  • Taille du fichier 0.1032MB