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é ;-)