it-swarm.com.de

Kann ich mich auf diese GitHub-Repository-Dateien verlassen?

Ich habe kürzlich das GitHub-Repository gefunden https://github.com/userEn1gm4/HLuna , aber nachdem ich es geklont habe, habe ich festgestellt, dass der Vergleich zwischen der Datei, die (mit g ++) aus dem Quellcode kompiliert wurde, HLuna.cxx und die im Repository enthaltene Binärdatei (HLuna) ist unterschiedlich: differ: byte 25, line 1. Ist die bereitgestellte Binärdatei sicher?

Ich habe dies bereits in VirusTotal ohne Probleme analysiert, aber ich habe nicht das Fachwissen, um die Ausgabe zu dekompilieren und zu lesen, und ich habe zuvor die bereitgestellte Binärdatei ausgeführt, ohne über die Risiken nachzudenken.

21
mcruz2401

Das Polynom sagt Ihnen, was passieren kann und wie Sie es lösen können. Hier werde ich es veranschaulichen:

Ich habe beide Binärdateien durch strings geführt und sie unterschieden. Das genug zeigt einige völlig harmlose Unterschiede, insbesondere den verwendeten Compiler:

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

Einige der verwendeten privaten Namen sind auch unterschiedlich:

[email protected] | _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSERKS4_

Und einige Abschnitte scheinen gemischt zu sein, so dass das Diff nicht genau mit ihnen übereinstimmen kann.

Auch auf demselben Computer, ohne Optimierung und -O3 zeigt verschiedene Dateien:

_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6appendE | _ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEED2Ev

Sogar das Mischen interner Daten:

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

Dies beweist, dass unterschiedliche Binärdateien viele Fehlalarme auslösen und Ihnen nichts über die Sicherheit sagen.

In diesem Fall würde ich die von mir selbst kompilierte Version verwenden, da Sie nicht wissen können, welche Version hochgeladen wird, da der Autor möglicherweise vergessen hat, vor den letzten Optimierungen neu zu kompilieren.

22
Davidmh

Die Kompilierung ist kein direkt überprüfbarer deterministischer Prozess für Compilerversionen, Bibliotheksversionen, Betriebssysteme oder eine Reihe anderer Variablen. Die einzige Möglichkeit zur Überprüfung besteht darin, einen Unterschied auf Baugruppenebene durchzuführen. Es gibt viele Tools, die dies können , aber Sie müssen noch die manuelle Arbeit in.

58
Polynomial

Wenn die Software auf Quellenebene genau dieselbe ist, läuft die Frage darauf hinaus, ob Sie Ihrem Compiler, Ihren Systembibliotheken und verschiedenen Dienstprogrammen, die während der Kompilierung verwendet werden, vertrauen können. Wenn Sie Ihre Toolchain von einer vertrauenswürdigen Quelle installiert haben und darauf vertrauen, dass Ihr Computer in der Zwischenzeit nicht kompromittiert wurde, besteht kein Grund zu der Annahme, dass die von Ihnen generierte Binärdatei böswillig ist, auch wenn sie vom Build "Referenz" abweicht.

2