我最近找到了 GitHub 存储库https://github.com/userEn1gm4/HLuna,但是在我克隆它之后,我注意到从源代码编译(使用 g++)HLuna.cxx
的文件与存储库中包含的二进制文件(HLuna
)之间的比较是不同:differ: byte 25, line 1
。提供的二进制文件是否安全?
我已经在 VirusTotal 中分析过,没有任何问题,但我不具备反编译和读取输出的专业知识,而且我之前执行过提供的二进制文件而没有考虑风险。
我最近找到了 GitHub 存储库https://github.com/userEn1gm4/HLuna,但是在我克隆它之后,我注意到从源代码编译(使用 g++)HLuna.cxx
的文件与存储库中包含的二进制文件(HLuna
)之间的比较是不同:differ: byte 25, line 1
。提供的二进制文件是否安全?
我已经在 VirusTotal 中分析过,没有任何问题,但我不具备反编译和读取输出的专业知识,而且我之前执行过提供的二进制文件而没有考虑风险。
编译不是跨编译器版本、库版本、操作系统或许多其他不同变量的直接可验证的确定性过程。验证的唯一方法是在程序集级别执行差异。有很多工具可以做到这一点,但你仍然需要手动工作。
多项式告诉你可能发生什么,以及如何解决它。这里我将说明它:
我运行了两个二进制文件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
> /***
> * $$| |$$ |$$|
这证明了不同的二进制文件会引发许多误报,并且不会告诉您任何关于安全性的信息。
在这种情况下,我会使用自己编译的版本,因为您无法知道上传的是什么版本,因为作者可能在最后一次调整之前忘记了重新编译。
如果软件在源代码级别完全相同,那么问题归结为您是否可以信任您的编译器、系统库和编译期间使用的各种实用程序。如果您从受信任的来源安装您的工具链,并且您相信您的计算机同时没有受到损害,那么没有理由怀疑您生成的二进制文件将是恶意的,即使它与“参考”版本不同。