首页
社区
课程
招聘
[讨论]程序中显示自身exe的MD5码
发表于: 2015-3-8 13:08 7397

[讨论]程序中显示自身exe的MD5码

2015-3-8 13:08
7397
有些程序可以显示自身exe的MD5码,这是如何做到的。
比如,我编写程序的时候,留出16个字节为0,作为MD5码存放的位置。
那么,程序编译好以后,可以算出md5码,然后填写到预留的位置,那这个时候,
exe文件已经被改变,显示出来的MD5肯定是错的。
那有些程序确实可以显示自身的exe的MD5码,而且是正确的整个exe的MD5码,
并不是排除了16个字节以后算的MD5码,那么这是如何做到的呢?

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (12)
雪    币: 8
活跃值: (233)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
2
我想到了一个方法,就是联网由服务器传回我这个exe应该是正确的MD5的值,然后显示出来,如果要把这个正确的MD5值存储在exe文件本身某个位置,然后显示出来,那应该是不可能的,因为存储md5值得地方预先是不知道什么值,以后知道是某个值后,一旦填写进入,又会改变整个exe的MD5值,那填写的MD5值又不正确了。

后来我又运行了那个显示自身MD5值得程序,我改变了1个字节以后,其显示的自身md5值也随即改变了,并不是固定的初始不变的正确的值,那么原来这个显示自身md5值的程序是计算好自己的exe以后再显示出来,那么就是多此一举了,这样又不能防止程序被别人修改,别人修改以后,你显示的md5值就是修改以后的md5值,那要你显示干什么,应该能显示永远不变的一个正确的md5值才对。
2015-3-8 13:16
0
雪    币: 19
活跃值: (1086)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
可以存储在一个加密的文件里面 你读取的时候再解密比较
2015-3-8 14:53
0
雪    币: 3
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
可能是这个程序在运行的时候才计算自身exe的MD5码,然后显示出来
2015-3-8 16:14
0
雪    币: 41
活跃值: (82)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
程序运行时就可以读自己的hex 然后做hash啊。为什么一定要存起来...
2015-3-8 16:26
0
雪    币: 8
活跃值: (233)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
6
是的,自己计算自身的MD5再显示,这个MD5肯定是对的,但是不起作用。因为exe不被修改,原始有一个MD5,比如12345678xxxxxxxx。如果修改了,就不是12345678XXXX了,显示当前MD5为49baXXXXX,那这有什么意义呢?如果修改以后,仍然显示MD5是12345678xxxxxx,那样才有意思,那样,我可以用另一个校验器计算exe的md5为49baxxxxx,然后和程序显示的12345678xxxx一对比,发现不对,知道exe已经被修改。如果程序显示就是49baxxxx,我不能发现md5是错的,那也不能发现程序exe被修改了。所以,运行的时候计算自身exe的MD5码,然后再显示出来,就是一个自欺欺人的做法。或者说是程序员糊弄老板说任务完成了的做法,实际不能起到防止exe被修改而显示正确原始MD5的目的。
2015-3-8 17:06
0
雪    币: 59
活跃值: (1481)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
应该会留几个字节存放MD5值。楼主可以参考常见的壳的文件检验的写法。
2015-3-8 17:17
0
雪    币: 118
活跃值: (72)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
8
md5值由网络提供,自己在内存中的程序哈希自己硬盘上的文件仅此而已。
2015-3-8 18:36
0
雪    币: 118
活跃值: (72)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
9
md5也可以由配置文件提供。而不是自身包含。否则就是找md5冲突God
2015-3-8 18:37
0
雪    币: 245
活跃值: (93)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
10
请注意,显示的MD5是磁盘镜像文件的MD5,而显示是运行在内存里面显示的。它直接读取磁盘镜像显示出来不就行了,和所有MD5显示没有任何区别。
2015-3-8 23:02
0
雪    币: 245
活跃值: (93)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
11
你要显示那个也不难--把显示md5的部分放在外部的dll/配置文件 里面就行了............
2015-3-8 23:05
0
雪    币: 70
活跃值: (37)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
12
有些程序把MD5放在程序结尾,计算MD5的时候并没有算上结尾,只是算上程序本身部分
2015-3-12 18:00
0
雪    币: 188
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
计算MD5时排除那个几存放MD5值的字节。 这样一般用于自效验。
2015-10-22 00:52
0
游客
登录 | 注册 方可回帖
返回
//