web-dev-qa-db-fra.com

Puis-je compter sur ces fichiers de référentiel GitHub?

J'ai récemment trouvé le référentiel GitHub https://github.com/userEn1gm4/HLuna , mais après l'avoir cloné, j'ai noté que la comparaison entre le fichier compilé (en utilisant g ++) à partir de la source, HLuna.cxx, et le binaire inclus dans le référentiel (HLuna) est différent: differ: byte 25, line 1. Le fichier binaire fourni est-il sécurisé?

J'ai déjà analysé cela dans VirusTotal sans aucun problème, mais je n'ai pas l'expertise pour décompiler et lire la sortie, et j'ai déjà exécuté le binaire fourni sans penser aux risques.

21
mcruz2401

Le polynôme vous indique ce qui peut arriver et comment le résoudre. Je vais l'illustrer ici:

J'ai exécuté les deux binaires via strings et je les ai différenciés. Cela montre suffisamment de différences complètement inoffensives, en particulier, le compilateur utilisé:

GCC: (Debian 6.3.0-18) 6.3.0 20170516                         | GCC: (GNU) 8.2.1 20181105 (Red Hat 8.2.1-5)
                                                              > GCC: (GNU) 8.3.1 20190223 (Red Hat 8.3.1-2)
                                                              > gcc 8.2.1 20181105

Certains des noms privés utilisés sont également différents:

_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_@ | _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSERKS4_

Et certaines sections semblent être mélangées, donc le diff ne peut pas les faire correspondre exactement.

Même sur le même ordinateur, sans optimisation et -O3 affiche des fichiers différents:

_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6appendE | _ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEED2Ev

Même mélange des données internes:

Diccionario creado!                                           <
MENU                                                          <
1. Generador de Diccionarios                                  <
0. Salir                                                      <
/***                                                          <
*    $$|  |$$ |$$|                                            <
*    $$|  |$$ |$$|                                              *    $$|  |$$ |$$|                                  
*    $$|  |$$ |$$|     $$| |$$  |$$$$$$|  |$$$$$$|              *    $$|  |$$ |$$|     $$| |$$  |$$$$$$|  |$$$$$$|  
*    $$$$$$$$ |$$|     $$| |$$ |$$ __ $$|  ____$$|              *    $$$$$$$$ |$$|     $$| |$$ |$$ __ $$|  ____$$|  
*    $$|  |$$ |$$|     $$| |$$ |$$|  |$$| $$$$$$$|              *    $$|  |$$ |$$|     $$| |$$ |$$|  |$$| $$$$$$$|  
*    $$|  |$$ |$$|___  $$|_|$$ |$$|  |$$| $$___$$|              *    $$|  |$$ |$$|___  $$|_|$$ |$$|  |$$| $$___$$|  
*    $$|  |$$ |$$$$$$$| $$$$$  |$$|  |$$| $$$$$$$|              *    $$|  |$$ |$$$$$$$| $$$$$  |$$|  |$$| $$$$$$$|  
*    ----------------------------------------------             *    ---------------------------------------------- 
                                                              > -------------------
                                                              > Diccionario creado!
                                                              > MENU
                                                              > 1. Generador de Diccionarios
                                                              > 0. Salir
                                                              > /*** 
                                                              > *    $$|  |$$ |$$| 

Cela prouve que des fichiers binaires différents soulèvent de nombreux faux positifs et ne vous disent rien sur la sécurité.

Dans ce cas, j'utiliserais la version compilée par moi-même car vous n'avez aucun moyen de savoir quelle version est téléchargée, car l'auteur a peut-être oublié de recompiler avant les derniers réglages.

22
Davidmh

La compilation n'est pas un processus déterministe directement vérifiable entre les versions de compilateur, les versions de bibliothèque, les systèmes d'exploitation ou un certain nombre d'autres variables différentes. La seule façon de vérifier est d'effectuer un diff au niveau de l'assembly. Il y a beaucoup d'outils qui peuvent le faire mais vous devez toujours y mettre le travail manuel.

58
Polynomial

Si le logiciel est exactement le même au niveau de la source, la question se résume à savoir si vous pouvez faire confiance à votre compilateur, aux bibliothèques système et aux divers utilitaires utilisés lors de la compilation. Si vous avez installé votre chaîne d'outils à partir d'une source fiable et que vous pensez que votre ordinateur n'a pas été compromis entre-temps, il n'y a aucune raison de soupçonner que le fichier binaire que vous avez généré sera malveillant, même s'il diffère de la version "référence".

2
Dmitry Grigoryev