TITRE : Le reversing avec Ollydbg (suite)
CHAPEAU
Fasm vous a présenté Ollydbg, un analyseur, debuggeur et assembleur 32 bits doté d'une
interface intuitive. Nous allons aujourd'hui mettre en application ce formidable outil pour
passer un premier type de protection : les checksums.
FIN CHAPEAU
De l'utilité des checksums...
Lors du numéro précédent, Fasm vous a montré comment passer une protection basée sur
la comparaison avec une valeur enregistrée directement dans l'exécutable du programme.
Vous l'avez constaté, ce type de protection n'est vraiment pas fiable puisqu'un simple
désassemblage, puis une reconnaissance des chaînes de caractères avec Ollydbg suffisent.
Le checksum, ou somme de contrôle en bon français, est une valeur calculée à partir
d'une suite de bits par un algorithme nommé fonction de hashage, et permet généralement
de vérifier, par exemple, qu'un téléchargement s'est correctement déroulé (souvenez-vous
des fichiers MD5 sur les serveurs ftp). Et bien ce système permet aussi de protéger des
systèmes informatiques plus efficacement. En effet, on ne compare plus la saisie de
l'utilisateur à la valeur attendue mais le checksum de la saisie de l'utilisateur à celui de la
valeur attendue. Ainsi, la valeur attendue n'apparaît pas en clair et si la fonction de
hashage est difficilement irréversible, on a gagné. Enfin presque... Sachez tout de même
que les algos de checksums ne sont pas fait pour retrouver le contenu original, mais pour
détecter une erreur de transfert afin de recommencer celui-ci. De plus, un même
checksum peut identifier plusieurs suites de bits différentes. On parle de collisions, qui
deviennent alors génantes dans le cas des protections. Quelques algorithmes de
checksums : MD4, MD5, CRC, SHA1, SHA2.
Cela ne suffit pas...
Demandez-vous pourquoi les ingénieurs de chez Macrovision bossent sans relâche sur
leur protection SafeDisc ! Et oui, ça semblait trop beau ! Cela vient du fait que votre CPU
est bien obligé à un moment donné de faire la comparaison entre la valeur saisie par
l'utilisateur et la valeur attendue, puis d'effectuer certaines instructions en fonction de ce
résultat : vous accorder l'accès ou vous rejeter, par exemple. Et tout ceci dans le seul
langage qu'il peut réellement comprendre, l'assembleur.
Préparation de l'environnement de test
Avant de mettre les mains dans le cambuis, installons les différents outils nécessaires :