hash - 如何均衡两个 .ps 文件以获得相同的 md5 哈希值

标签 hash md5 postscript

我必须以某种方式均衡两个非常相似的文件才能获得相同的 md5 哈希值。我从这部作品中汲取灵感 https://natmchugh.blogspot.co.at/2015/05/how-to-make-two-binaries-with-same-md5.html?m=1

但我必须处理 Postscript 文件。我的文件如下所示:

files

在哪个 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/

相关文章:

image-processing - 将 .eps 转换为 .jpg

c++ - 指针的最快哈希函数是什么?

php - 我可以存储散列的电话号码并将其未散列发送到电子邮件吗?

Java AWS S3 : Why S3Object. ObjectMetadata.ContentMD5 为空,而 S3Object.ObjectMetadata.Etag 不为空

objective-c - Obj-C MD5 哈希与 Java/SQL 不匹配

gnuplot - gnuplot 中的粗体增强文本

android - 我应该在哪里散列用户密码?

c# - 无法散列超过 3GB 的文件

functional-programming - 如何在 Elixir 中计算文件校验和?

iOS 将 "Hello, world"(Helv.Neue Light, 180pt) 渲染为 PDF?