{{tag>Brouillon Exe Diff Hex Binaire}} # Windows exe - Comparaison de fichiers binaires Voir : * strings fichier.exe * ldd fichier.exe * Comparaison avec un éditeur hexadécimal Voir aussi : * ClamAV * Contrôle d'intégrité ## Fichier suspect à comparer avec un fichier de référence Dans le cas ci-dessous nous avons un fichier exe avec un checksum différent d'autres qui semblent être de la même version. ~~~bash mkdir Centreon-NSClient-0.5.2.41-20211102-x64.exe_d/ cd Centreon-NSClient-0.5.2.41-20211102-x64.exe_d/ 7z x ../Centreon-NSClient-0.5.2.41-20211102-x64.exe ~~~ ~~~ $ diff -r Centreon-NSClient-0.5.2.41-20211102-x64.exe_d/ Centreon-NSClient-0.5.2.41-20211102-x64.exe.corrupt_d/ Binary files Centreon-NSClient-0.5.2.41-20211102-x64.exe_d/Uninst.exe and Centreon-NSClient-0.5.2.41-20211102-x64.exe.corrupt_d/Uninst.exe differ Binary files Centreon-NSClient-0.5.2.41-20211102-x64.exe_d/resources.zip and Centreon-NSClient-0.5.2.41-20211102-x64.exe.corrupt_d/resources.zip differ ~~~ Décompression des tous les binaires et archives avec "7z x" récursivement ~~~ $ diff -r Centreon-NSClient-0.5.2.41-20211102-x64.exe_d/ Centreon-NSClient-0.5.2.41-20211102-x64.exe.corrupt_d/ Binary files Centreon-NSClient-0.5.2.41-20211102-x64.exe_d/Uninst.exe and Centreon-NSClient-0.5.2.41-20211102-x64.exe.corrupt_d/Uninst.exe differ Binary files Centreon-NSClient-0.5.2.41-20211102-x64.exe_d/resources/scripts/centreon/centreon_plugins.exe and Centreon-NSClient-0.5.2.41-20211102-x64.exe.corrupt_d/resources/scripts/centreon/centreon_plugins.exe differ Binary files Centreon-NSClient-0.5.2.41-20211102-x64.exe_d/resources/scripts/centreon/check_logfiles.exe and Centreon-NSClient-0.5.2.41-20211102-x64.exe.corrupt_d/resources/scripts/centreon/check_logfiles.exe differ Binary files Centreon-NSClient-0.5.2.41-20211102-x64.exe_d/resources.zip and Centreon-NSClient-0.5.2.41-20211102-x64.exe.corrupt_d/resources.zip differ ~~~ ~~~ $ exiftool -FileVersion -ProductVersion Centreon-NSClient-0.5.2.41-20211102-x64.exe_d/resources/scripts/centreon/centreon_plugins.exe Centreon- NSClient-0.5.2.41-20211102-x64.exe.corrupt_d/resources/scripts/centreon/centreon_plugins.exe ======== Centreon-NSClient-0.5.2.41-20211102-x64.exe_d/resources/scripts/centreon/centreon_plugins.exe File Version : 1.0.0.0 Product Version : 20211102 (702e50519 388b9a2) ======== Centreon-NSClient-0.5.2.41-20211102-x64.exe.corrupt_d/resources/scripts/centreon/centreon_plugins.exe File Version : 1.0.0.0 Product Version : 20211102 (702e50519 852566c) 2 image files read ~~~ Lister toutes les sections ~~~bash objdump -h file.exe ~~~ Exemple ~~~ .text .data .rdata .pdata .xdata .bss .idata .CRT .tls .rsrc ~~~ ~~~ diff <(objdump -s --section .rsrc Centreon-NSClient-0.5.2.41-20211102-x64.exe_d/resources/scripts/centreon/centreon_plugins.exe) <(objdump -s --section .rsrc Centreon-NSClient-0.5.2.41-20211102-x64.exe.corrupt_d/resources/scripts/centreon/centreon_plugins.exe) 2c2 < Centreon-NSClient-0.5.2.41-20211102-x64.exe_d/resources/scripts/centreon/centreon_plugins.exe: file format pei-x86-64 --- > Centreon-NSClient-0.5.2.41-20211102-x64.exe.corrupt_d/resources/scripts/centreon/centreon_plugins.exe: file format pei-x86-64 16962,16963c16962,16963 < 8e53d0 35003000 35003100 39002000 33003800 5.0.5.1.9. .3.8. < 8e53e0 38006200 39006100 32002900 00000000 8.b.9.a.2.)..... --- > 8e53d0 35003000 35003100 39002000 38003500 5.0.5.1.9. .8.5. > 8e53e0 32003500 36003600 63002900 00000000 2.5.6.6.c.)..... ~~~ ~~~ $ diff <(objdump -d Centreon-NSClient-0.5.2.41-20211102-x64.exe_d/resources/scripts/centreon/centreon_plugins.exe) <(objdump -d Centreon-NSClient-0.5.2.41-20211102-x64.exe.corrupt_d/resources/scripts/centreon/centreon_plugins.exe) 2c2 < Centreon-NSClient-0.5.2.41-20211102-x64.exe_d/resources/scripts/centreon/centreon_plugins.exe: file format pei-x86-64 --- > Centreon-NSClient-0.5.2.41-20211102-x64.exe.corrupt_d/resources/scripts/centreon/centreon_plugins.exe: file format pei-x86-64 ~~~ ~~~ $ diff <(objdump -d Centreon-NSClient-0.5.2.41-20211102-x64.exe_d/Uninst.exe) <(objdump -d Centreon-NSClient-0.5.2.41-20211102-x64.exe.corrupt_d/Uninst.exe) 2c2 < Centreon-NSClient-0.5.2.41-20211102-x64.exe_d/Uninst.exe: file format pei-i386 --- > Centreon-NSClient-0.5.2.41-20211102-x64.exe.corrupt_d/Uninst.exe: file format pei-i386 ~~~ ### Conclusion De par le jeu de la compression ces deux fichiers (le suspect et la référence) semblaient très différents l'un de l’autre, mais à y regarder de plus près, ces deux fichiers sont très semblables. A force de décompresser toutes les exe/zip avec `7z x`, nous constatons que la plupart des différences concerne le numéro de version mineur. Et même quand cela ne concerne pas la version, cela concerne des DATA_SEGMENT https://en.wikipedia.org/wiki/Data_segment Notamment dans : * check_logfiles.exe * Uninst.exe Après d'autre vérifications, tel que ldd pour voir les libs, une comparaison avec un éditeur hexadécimal, un contrôle avec ClamAV... j'en conclu que ce fichier suspect est très probablement saint, mais que cela ne change rien, puisqu'il ne faut jamais utiliser du code compilé qui n'est été signé ! Au delà de cette analyse j'en conclu que nous devons mettre en place un **contrôle d'intégrité** strict. FIXME