有没有一种方法可以检测两个从VS.Net 2008编译的C++/MFC EXE文件之间是否没有任何代码级别的更改,即为了知道是否有语句更改。
这是为了合规目的,当我的供应商向我发运一个exe时,它明显没有对代码进行任何更改,自上次我们测试以来。
有没有工具可以检查是否如此?
谢谢!
有没有一种方法可以检测两个从VS.Net 2008编译的C++/MFC EXE文件之间是否没有任何代码级别的更改,即为了知道是否有语句更改。
这是为了合规目的,当我的供应商向我发运一个exe时,它明显没有对代码进行任何更改,自上次我们测试以来。
有没有工具可以检查是否如此?
谢谢!
您可以对可执行文件执行MD5sum。这并不能告诉您它们是否在逻辑上等效或不同,仅表明存在差异。
我不确定这是否解决了您的问题,因为您可能正在寻找一种逻辑比较工具。
这个列表可以继续下去。
您建议的二进制审计是否可行?是的,有足够知识和技能的人可以做到这一点。黑客们经常这样做。如果进行分析的人足够好,他们将能够告诉您他们对其评估的信心程度。
最终问题变成了可行性的问题。您愿意在这个审计上花费多少钱?雇用或承包能够做到这一点的人可能会超出预算,是否有足够的资金来完成这项工作?您正在测试的软件有多复杂?您与供应商的关系的性质是什么?
最后一个问题很重要,因为如果通过此次审计符合他们的最佳利益,并且他们意识到这一点,他们可能愿意在一定程度上协助您。这可以采取调试符号、编译器选项列表或其他构建过程的工件形式,他们愿意披露。由于某种原因,如果源代码不可用于分析目的,则以上内容都可以对任何分析非常有帮助。如果可以访问源代码以进行此类目的,则分析变得更加容易。如果您掌控源代码,只需不发布没有与之关联的适当版本信息的exe文件。
如果由于某种原因他们自己构建exe文件,我建议设置一个构建步骤,要求将版本控制修订号嵌入到版本信息中。
如果他们不使用您的构建步骤(您可以检测到),那么您就认为它们是不同的。
大多数版本控制系统(例如SVN)都允许您设置一个构建步骤,以确定代码是否处于修改状态。您可以将此信息嵌入到exe文件的嵌入式资源字符串中,然后只需提取该资源即可。
因此,确保所有构建都从您的自定义构建脚本中进行。
从现在开始,添加一个后期构建步骤,将生成源文件的MD5并将其添加到版本资源中(这样您就可以在exe属性中看到它)。
这将耗费您2到3个人日。
在十六进制比较程序中加载exe文件(BeyondCompare非常好用!)。
如果有任何非微不足道的更改(假设编译器设置没有更改),它们应该很容易被发现。如果只是时间戳等问题,那么可能很明显。
这绝对不是万无一失的,但这将是我的第一步。