Karim 2 Asked: 2021-02-15 23:37:34 +0800 CST2021-02-15 23:37:34 +0800 CST 2021-02-15 23:37:34 +0800 CST 怎么知道应用程序的代码与公共代码不同? 772 假设我找到了一个很酷的应用程序,但我不确定它是否是恶意软件。但是每个人都说不要担心它的安全性,因为它是开源的,但是我怎么知道实际的 exe 代码是否与 Github 上的代码不同? github malware 1 个回答 Voted Best Answer Mokubai 2021-02-16T00:31:03+08:002021-02-16T00:31:03+08:00 除非您使用可用的源代码自己编译它,否则您不会。 只要您从信誉良好的来源获得它,它很可能是相同的,但很难或几乎不可能验证。您可以自己重新编译它,但您的设置中可能存在微小差异,从而产生一个略有不同的可执行文件,因此二进制比较可能也不完美。如果您知道使用的确切编译器设置和优化,您可能会足够接近以查看是否添加了大量代码,但直接比较可能需要有经验的眼睛来区分编译器优化和有意修改之间的区别。 开源只保证代码可用于同行评审,而不是在编译之前没有修改。 如果代码在编译之前被篡改,那么您可能能够反编译它,但编译后的可执行文件可能缺少诸如人类可读函数和变量名之类的信息,这使得检索原始源变得不可能。编译器还可以通过使输出工作相同但看起来截然不同的方式优化代码,从而使比较任务变得更加困难。 举几个例子,代码函数可以与调用它们的代码内联合并,循环可以“展开”成线性流,以避免 CPU 中昂贵的分支。 开源仅意味着您可以自己获取源代码并以与原作者相同的方式构建它,前提是您可以访问相同的工具和库。
除非您使用可用的源代码自己编译它,否则您不会。
只要您从信誉良好的来源获得它,它很可能是相同的,但很难或几乎不可能验证。您可以自己重新编译它,但您的设置中可能存在微小差异,从而产生一个略有不同的可执行文件,因此二进制比较可能也不完美。如果您知道使用的确切编译器设置和优化,您可能会足够接近以查看是否添加了大量代码,但直接比较可能需要有经验的眼睛来区分编译器优化和有意修改之间的区别。
开源只保证代码可用于同行评审,而不是在编译之前没有修改。
如果代码在编译之前被篡改,那么您可能能够反编译它,但编译后的可执行文件可能缺少诸如人类可读函数和变量名之类的信息,这使得检索原始源变得不可能。编译器还可以通过使输出工作相同但看起来截然不同的方式优化代码,从而使比较任务变得更加困难。
举几个例子,代码函数可以与调用它们的代码内联合并,循环可以“展开”成线性流,以避免 CPU 中昂贵的分支。
开源仅意味着您可以自己获取源代码并以与原作者相同的方式构建它,前提是您可以访问相同的工具和库。