假设我发现了一个很酷的应用程序,但我不确定它是否是恶意软件。但每个人都说不用担心,因为它是开源的,所以很安全,但我怎么知道实际的 exe 代码是否与 Github 上的代码不同呢?
答案1
除非您使用可用的源代码自己编译它,否则您无法做到。
只要您从信誉良好的来源获得它,它很可能是相同的,但很难或几乎不可能验证。您可以自己重新编译它,但您的设置中可能会有细微的差异,从而产生略有不同的可执行文件,因此二进制比较可能也不完美。如果您知道所使用的确切编译器设置和优化,您可能会足够接近以查看是否添加了大量代码,但直接比较可能需要经验丰富的眼睛才能分辨出编译器优化和故意修改之间的区别。
开源仅保证代码可供同行评审,但不保证在编译之前没有被修改。
如果代码在编译之前被篡改,那么您可能能够对其进行反编译,但编译后的可执行文件可能缺少诸如人类可读的函数和变量名称之类的信息,这使得检索原始源代码变得不可能。编译器还可以优化代码,使输出工作方式相同但看起来截然不同,这使得比较任务更加困难。
举几个例子,代码函数可以与调用它们的代码内联合并,并且循环可以“展开”为线性流,以避免 CPU 中昂贵的分支。
开源仅意味着您可以自己获取源代码并以与原作者相同的方式构建它,假设您可以使用相同的工具和库。