我必须以某种方式均衡两个非常相似的文件才能获得相同的 md5 哈希值。我从这部作品中汲取灵感 https://natmchugh.blogspot.co.at/2015/05/how-to-make-two-binaries-with-same-md5.html?m=1
但我必须处理 Postscript 文件。我的文件如下所示:
在哪个 block 中我必须添加一些数据才能获得相同的文件,并获得相同的哈希值。
最佳答案
早在 2005 年,两位研究人员 Magnus Daum 和 Stefan Lucks 就演示了一对具有相同 MD5 哈希值但内容不同的 PostScript 文件。请参阅 Attacking Hash Functions by Poisoned Messages, "The Story of Alice and her Boss"。
他们的一对 PostScript 语言文件是手工制作的,并具有以下形式:
%!PS-Adobe-1.0
%%BoundingBox: 0 0 612 792
(ËB¶jfiM‡’â_¯Âú¡ß/ ∑ó
F~™¿T>±˚Em3¸S‡[ԆɣxRÌZ3Œ6ô
únEZRÑyÎ/ΩïıWÂv:Ïø™Ÿ µsY»2Ù},π£v‘6 ˝Ô;É°Ú}Î 6SÜÿk»ÙîÙNa|ÑÄ`œoîµê)(ËB¶jfiM‡’â_¯Âú¡ß/ ∑ó
F~™¿T>±˚Em3¸S‡[ԆɣxRÌZ3Œ6ô
únEZRÑyÎ/ΩïıWÂv:Ïø™Ÿ µsY»2Ù},π£v‘6 ˝Ô;É°Ú}Î 6SÜÿk»ÙîÙNa|ÑÄ`œoîµê)eq{
% Code to print innocent document
}{
% Code to print evil document
}ifelse
showpage
请注意,代码有两个字符串,由括号 ()
分隔,并测试它们是否相等。如果它们相同,则文件将打印无辜的文档。否则,它会打印邪恶的文档。
打印恶意文档的 PostScript 语言文档的第一个字符串中的八位字节序列略有不同:
(ËB¶jfiM‡’â_¯Âú¡ß/ ∑
F~™¿T>±˚Em3¸S‡[Ô†É#yRÌZ3Œ6ô
únE⁄RÑyÎ/ΩïıWÂv:Ïø™Ÿ µsYH2Ù},π£v‘6 ˝Ô;É°Ú}Î 6SÜXk»ÙîÙNa|ÑÄ`œÔîµê)
两个文件具有相同的 MD5 摘要,a25f7f0b29ee0b3968c860738533a4b9
。
由于您的文件包含二进制数据和各种其他内容,因此它们使用的结构不太适合您。相反,您可以尝试在文件的前面部分插入这样的字符串。将其放在文件开头的文档结构约定(以 %
开头的行)之后。
(0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789) pop
然后使用哈希冲突查找工具来识别您需要替换该字符串正文中的哪些八位字节以及其他哪些八位字节,以便使您的一个 PostScript 语言文件与另一个的 md5 哈希相匹配。
哪个工具会发现哈希冲突不是 PostScript 特定的问题,因此超出了本答案的范围。
关于hash - 如何均衡两个 .ps 文件以获得相同的 md5 哈希值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43073492/