Tag: 二元可重复性

如何在重建C#应用程序时始终生成逐字节相同的.exe文件?

我先给大家介绍一下为什么我会问这个问题: 我目前正在一个严格监管的行业工作,因此我们的代码由官方测试机构仔细查看。 这些测试机构希望能够构建代码并生成.exe或.dll,每次都完全相同(显然不会更改任何代码!)。 他们检查MD5和他们创建的可执行文件的SHA1以确保这一点。 到目前为止,我主要使用C ++进行编码,其中(在几个项目设置调整之后)我设法让项目能够相同地重建到相同的MD5 / SHA1。 我现在正在一个项目中使用C#,并且在重建之后很难让MD5匹配。 我知道文件的PE头中有“Time-Stamps”,它们已经被清除为0.我也知道.exe有一个GUID,它已被清除为00 00 00 …等等但是文件仍然不匹配。 我正在使用CFF资源管理器查看和编辑PE标头以删除时间和日期戳。 使用二进制比较工具后,.exe中只有2个字节块不同(都非常小)。 其中一个不一致的块出现在一些二进制代码之前,在ASCII中详细说明了*Project*\obj\Release\xxx.pdb文件的路径。 编辑:现在已知这是* .pdb文件的GUID,但我仍然不知道是否可以修改它而不会导致任何错误!? 另一个块出现在看起来是函数名称的中间,即。 (典型部分) AssemblyName.GetName.Version.get_Version.System.IO.Ports.SerialPort.Parity.Byte.{ 那么不同的代码块: 4A134ACE-D6A0-461B-A47C-3A4232D90816 其次是: “} .ValueType .__ StaticArrayInitTypeSize = 7. $$ method0x60000ab-1.RuntimeFieldHandle.InitializeArray` …等。 任何想法或建议将是最受欢迎的!