SEEDLAB2.0-MD5 Collision Attack Lab
2021/4/16 18:56:35
本文主要是介绍SEEDLAB2.0-MD5 Collision Attack Lab,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
MD5 Collision Attack Lab
Task1生成有相同md5hash的两个不同文件
首先两个文件有相同的前缀,使用md5collgen就可以实现这一点,不论任意内容都可以有相同前缀,该程序工作流程如下
给出一个前缀文件prefix.txt,将会输出两个文件out1.bin,out2.bin
然后可以使用md5sum校验每个输出文件的hash是否相同
Task2理解md5的性质
Md5将输入的数据按照64字节一组进行切分,然后在这些分组上进行迭代地计算。其狠心是压缩函数,其接受两个输入,分别是64字节的数据分组和前一次迭代的输出,压缩函数compression function会输出128位的IHV(intermediate hash value),这个输出将在下一次迭代时参与运算。如果当前的迭代是最后一次,IHV就是最终的hash值。而第一次迭代IHV0的IHV的输入是固定值。
基于其如何工作的,我们可以得到md5算法的性质:给两个输入M和N,如果MD5(M)=MD5(N),那么对于任意输入T,都有MD5(M||T) =MD5(N||T),||表示拼接。
这意味着如果M和N有相同的hash,添加相同的后缀T将会让两个输出有相同的hash值。不仅md5有这个性质,其他的hash算法也有。
可以使用cat命令来连接两个文件(二进制文件、文本文件都可以)
Task3
可以把可执行文件分成三部分
我们可以使用md5collgen生成两个有相同md5hash值的文件,使用P和Q分别代表其output的第二部分(各有128字节)
因此我们有
基于前面提到的性质,给他们加上相同的后缀,得到的hash值依然是相同的,即
所以我们只需使用P和Q来提到数组的128字节,这样我们就可创建有相同hash的两个不同二进制文件。它们的输出是不同的,因为他们每个都会打印出有不同内容的数组。
可以使用bless查看二进制文件并找到数组的位置。
在切分二进制文件时可以使用head,tail。
Task4 制作两个行为不同的程序
Task3中只是打印的内容不容,其执行的还是相同的指令序列。
对于那些先是对文件md5,然后对hash进行签名的证书来说,通过hash碰撞就有可能实现给恶意软件签名的效果。
方法类似于task3,原理如下
这篇关于SEEDLAB2.0-MD5 Collision Attack Lab的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-25【机器学习(二)】分类和回归任务-决策树(Decision Tree,DT)算法-Sentosa_DSML社区版
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享