如何使程序编译后的Hash码都一样??

budded 2008-06-13 01:07:19
程序代码没有修改过,但每次编译出来的程序Hash码都不一样,
估计是文件修改时间等信息被写入程序,Delphi有没有选项能让这个时间不编译进程序呢?

同一个程序两次编译后用FC比较的结果:
正在比较文件 About.dll 和 A.DLL
00000108: 74 54
00000109: E8 E3
0000A204: 13 57
0000A205: 5B 58
0000A224: 13 57
0000A225: 5B 58
0000A264: 13 57
0000A265: 5B 58
0000A27C: 13 57
0000A27D: 5B 58
0000A294: 13 57
0000A295: 5B 58
0000A2AC: 13 57
0000A2AD: 5B 58
0000A2C4: 13 57
0000A2C5: 5B 58
0000A2DC: 13 57
0000A2DD: 5B 58
0000A2F4: 13 57
0000A2F5: 5B 58
0000A30C: 13 57
0000A30D: 5B 58
...全文
120 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
budded 2008-06-13
  • 打赏
  • 举报
回复
UltraCompare??
ly_liuyang 2008-06-13
  • 打赏
  • 举报
回复
UltraCompare~~
budded 2008-06-13
  • 打赏
  • 举报
回复
To AliasKavin: MD5也是Hash的一种
AliasKavin 2008-06-13
  • 打赏
  • 举报
回复
汗~~~~~~~你不能算程序的MD5啊``~~ 比较MD5值就知道程序是不是一样啦``
cppwin 2008-06-13
  • 打赏
  • 举报
回复
这些变化都是数据段的.真正的汇编码是不变的,这样你可以只对code segment做hash,这样你要分析PE结构.
汗,好象更加麻烦了.
budded 2008-06-13
  • 打赏
  • 举报
回复
to CppWin:
00000108: 74 54
00000109: E8 E3
// 这个确实是 时间戳

但后面的这个我就不知道了,不同文件地址不一样,期待PE高手
cnzdgs 2008-06-13
  • 打赏
  • 举报
回复
这些不同的地方是文件的前面和后面两部分吧?可以考虑在计算Hash码的时候把这两部分排除。
另外,即使不用版本号来判断,每次修改也应该改变版本号才对,如果文件过多,可以考虑用工具来处理。
cppwin 2008-06-13
  • 打赏
  • 举报
回复
我曾经发现这个问题,每次编译的目标文件都有不同,
在固定位移的某些字节每次都会"随机"变化,
只要将多次的结果做二进制比较,就可以发现.
我不认为它是时间信息.更有可能是数字水印(纯属猜测)
我当时是观察BCB的(很久前了)
budded 2008-06-13
  • 打赏
  • 举报
回复
用版本号得去判断某个DLL是否已有代码变更,大项目中DLL多,管理不来啊
stonewater 2008-06-13
  • 打赏
  • 举报
回复
用版本号不行吗
ouyh12345 2008-06-13
  • 打赏
  • 举报
回复
不会delphi
我们一般用dll的版本号来判断是否需要升级
budded 2008-06-13
  • 打赏
  • 举报
回复
恩,偶要做程序升级,用Hash码来判断程序是否需要升级,
代码里经常有某个接口被好多个DLL调用,通常情况下偶没法判断那些DLL调用了接口(DLL很多,接口很多,管理不来),所以我想偷懒,全编译,但Hash值又变了。。。
ouyh12345 2008-06-13
  • 打赏
  • 举报
回复
帮顶
Delphi?
yxz_lp 2008-06-13
  • 打赏
  • 举报
回复
帮顶,坐上沙发和你一起等ly_liuyang

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧