一、实验要求
本次实验主要是加深大家对MD5碰撞及其原理的理解,使用SEED实验环境中的工具及编程语言,完成以下任务:
a)使用md5collgen生成两个MD5值相同的文件,并利用bless十六进制编辑器查看输出的两个文件,描述你观察到的情况;
b)参考Lab3_task2.c的代码,生成两个MD5值相同但输出不同的两个可执行文件。
c)参考Lab3_task3.c的代码,生成两个MD5值相同但代码行为不相同的可执行文件。
d)回答问题:通过上面的实验,请解释为什么可以做到不同行为的两个可执行文件具有相同的MD5值?
二、实验步骤
(1)使用md5collgen生成两个MD5值相同的文件,并利用bless十六进制编辑器查看输出的两个文件,描述你观察到的情况;
- 首先创建prefix.txt并修改内容为hail hydra
- 生成两个MD5相同的文件
- 验证文件是否相同、MD5是否相同
- 分别查看out1.bin和out2.bin(2)参考Lab3_task2.c的代码,生成两个MD5值相同但输出不同的两个可执行文件。
- 修改Lab3_task2.c为以下内容
- 编译,利用bless定位字符串的位置
- 截取到12340位置,计算得到在 12320 到 12379 范围内,12352 为 64 的倍数,因此我们把12352 后面的截取出来:
- 然后对 prefix 生成 md5 相同的两个文件
- 把刚刚的尾巴接到这两个文件后面
- 赋予执行权限
- 运行
- 可以看到两个输出是不同的:(3)参考Lab3_task3.c的代码,生成两个MD5值相同但代码行为不相同的可执行文件:
- 将Lab3_task3.c构造如下:
- 编译后利用bless找到两个数组的位置
- 构造两个 md5 相同的文件
- 截取字符串(生成的字符串、第二个字符串后面(前面)的内容,需要填充的字符串),拼接并赋予新的文件执行权限:
- 分别运行并检查 md5 可以看到,它们运行了不同的代码,但 md5 是相同的
(4)回答问题:通过上面的实验,请解释为什么可以做到不同行为的两个可执行文件具有相同的MD5值?
答:MD5校验值的长度是固定的128Bit,其总共有2的128次方种不同的值,被MD5校验的文件长度却是任意的,可以用有限的2的128次方种不同的值去匹配正无穷个文件,结果是必然有重复的,同一个MD5值有正无穷个不同的文件,所以在实验中可以经过适当的拼接做到不同行为的两个可执行文件具有相同的MD5值。
版权归原作者 whalien__52 所有, 如有侵权,请联系我们删除。