我可以依赖这些 GitHub 存储库文件吗?

信息安全 逆向工程 C++ github
2021-09-08 13:37:25

我最近找到了 GitHub 存储库https://github.com/userEn1gm4/HLuna,但是在我克隆它之后,我注意到从源代码编译(使用 g++)HLuna.cxx的文件与存储库中包含的二进制文件(HLuna)之间的比较是不同:differ: byte 25, line 1提供的二进制文件是否安全?

我已经在 VirusTotal 中分析过,没有任何问题,但我不具备反编译和读取输出的专业知识,而且我之前执行过提供的二进制文件而没有考虑风险。

3个回答

编译不是跨编译器版本、库版本、操作系统或许多其他不同变量的直接可验证的确定性过程。验证的唯一方法是在程序集级别执行差异。很多工具可以做到这一点,但你仍然需要手动工作。

多项式告诉你可能发生什么,以及如何解决它。这里我将说明它:

我运行了两个二进制文件strings并对其进行了比较。这足以显示一些完全无害的差异,特别是使用的编译器:

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

使用的一些私有名称也不同:

_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_@ | _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSERKS4_

有些部分似乎被打乱了,所以差异不能完全匹配它们。

即使在同一台计算机上,没有优化和 -O3 显示不同的文件:

_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6appendE | _ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEED2Ev

甚至改组内部数据:

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

这证明了不同的二进制文件会引发许多误报,并且不会告诉您任何关于安全性的信息。

在这种情况下,我会使用自己编译的版本,因为您无法知道上传的是什么版本,因为作者可能在最后一次调整之前忘记了重新编译。

如果软件在源代码级别完全相同,那么问题归结为您是否可以信任您的编译器、系统库和编译期间使用的各种实用程序。如果您从受信任的来源安装您的工具链,并且您相信您的计算机同时没有受到损害,那么没有理由怀疑您生成的二进制文件将是恶意的,即使它与“参考”版本不同。