Exécutables se vérifiant lorsqu'ils sont lancés

Description

Un petit exercice de style : calculer le hash MD5 d'un fichier exécutable, et vérifier au lancement de ce dernier si sa signature actuelle correspond à celle qui a été mémorisée. Si les calculs ne correspondent pas, c'est que l'exe a été modifié (un simple bit fausse le calcul).

Comment ? Hé bien, un programme "sign" se charge de calculer le hash MD5 d'un autre exécutable, et injecte dans ce dernier une signature (l'empreinte MD5, voir ma source précédente pour plus de détails) dans une partie inutilisée de l'entête MZ (le tableau e_res2, pour ceux à qui cela dit quelque chose). Bien sûr, lors du calcul cette zone est mise à zéro afin de ne pas fausser les empreintes...

Ensuite lors de l'exécution, le programme signé hashe le fichier qui a serci à créer son processus et compare l'empreinte MD5 qu'il trouve à celle qui est mémorisée, et peut agir en conséquence (corrompu : afficher un warning et laisser le choix à l'utilisateur de continuer l'exécution ou pas, intègre : continuer l'exécution).

Bien sûr, cette petite astuce n'est que de peu d'efficacité contre un "cracker" confirmé, mais elle peut servir à assurer l'intégrité d'un exe téléchargé ;-)

Source / Exemple :


goto zip;

Conclusion :


Contenu du ZIP :

bon.exe = un binaire signé, dont le test automatique devrait réussir
mauvais.exe = le même binaire mais non signé, évidemment le test va échouer
sign.exe = le programme qui signe les autres, sign <nom des programmes>

check\* = les sources de bon.exe et mauvais.exe, seul le fichier main.c contient la routine de vérification

sign\* = les sources de sign.exe, idem seul main.c contient la routine de signature

Dans les deux dossiers, assert.* correspond aux assertions (des fonctions permettant de vérifier simplement les retours d'API et de savoir ce qui ne va pas en cas d'erreur) et console.* permet d'utiliser la console en Unicode (avec accents, donc). Quand à config.h, je vous laisse deviner ;-)

Codé avec GCC, mais devrait compiler sous n'importe quel compilateur C.

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.