作者:Wendy

给大家分享了一个神奇的文件,留言反馈还是很积极的,而且说的都很好!合在一起就是完美的答案了~

Android 如何查看md5指纹 安卓查看文件md5_查看文件md5

不知道正在看此文的你有没有下载下来测试,还没尝试的可以先试试再来看本文。戳链接回看 :一个神奇的文件,你敢不敢试试?

好的,本期Wendy还是按照老样子,手把手逐步演示分析过程。



Android 如何查看md5指纹 安卓查看文件md5_Android 如何查看md5指纹_02

涉及的知识点回顾

知识点 1  哈希值

知识点 2  文件签名

如果你对这两个知识点还不熟悉,可以戳以上知识点的关键词获取。

如果你已经掌握,请跟着我继续。



Android 如何查看md5指纹 安卓查看文件md5_html_03

生成5个“神奇文件”

文件的描述中提到,这个PDF文件可以变成zip、html、png、exe、MP4,我们首先依次生成这5个文件。

zip文件:

直接将扩展名「 pdf」改为「 zip」即可,能够正常打开,内容如下图。



Android 如何查看md5指纹 安卓查看文件md5_Android 如何查看md5指纹_04

zip 文件内容

html文件:

直接将扩展名「 pdf」改为「 html」即可,能够正常打开,内容如下图。



Android 如何查看md5指纹 安卓查看文件md5_查看文件md5_05

html 文件内容

页面显示大意:将文件拖到此处分析

直接将PDF文件拖到这里,得到了这样一个页面:



Android 如何查看md5指纹 安卓查看文件md5_应用程序_06

图中标记的红框中的内容,便是生成其他几个格式文件的方法,直接点击保存

png文件:

能够正常打开,内容如下图。



Android 如何查看md5指纹 安卓查看文件md5_Android 如何查看md5指纹_07

png 文件内容

exe文件:

点击「 save as PE」后,生成一个扩展名为「ex」的文件,直接改为「exe」便能够正常打开,内容如下图。



Android 如何查看md5指纹 安卓查看文件md5_扩展名_08

exe 文件内容

看样子是一个专门查看PDF的应用程序。

MP4文件:

能正常打开,内容是不到2秒的动画,如下图。



Android 如何查看md5指纹 安卓查看文件md5_html_09

mp4 文件内容

就这样,我成功地把一个文件变成了新的5个文件,把它们在桌面一字排开,方便后面逐一分析。



Android 如何查看md5指纹 安卓查看文件md5_应用程序_10

这里要注意的是,6个文件都能够正常打开,而打开之后看到的内容完全不一样。



Android 如何查看md5指纹 安卓查看文件md5_查看文件md5_11

计算比对哈希值

MD5值



Android 如何查看md5指纹 安卓查看文件md5_扩展名_12

6个文件的MD5都是一模一样的。

SHA1 值



Android 如何查看md5指纹 安卓查看文件md5_Android 如何查看md5指纹_13

有三个文件的SHA1 值竟然不一致!分别是exe、mp4、png。(刚好是通过HTML页面解析出来的三个文件)

这一点说明,这个文件存在哈希碰撞的可能性。况且,MD5值确实早已被很多专家提及,碰撞的概率较其他类型哈希还是更大的。

于是,我专门比对这三个文件,从字节级层面一一比对。



Android 如何查看md5指纹 安卓查看文件md5_应用程序_14

Android 如何查看md5指纹 安卓查看文件md5_Android 如何查看md5指纹_15

得到的结果是:有695个区别!而且两两比较都是这个结果!

看来文件作者在设计这个文件时很巧妙地做了哈希碰撞。



Android 如何查看md5指纹 安卓查看文件md5_应用程序_16

查找文件签名

分析到这里,我们应该已经能够发现一个矛盾点:

文件签名本身就是定义好的,那么一个文件的格式应该在创建的时候就是确定的,为什么同样一个文件能变成这么多不同的格式呢?

我们来用X-Ways查看一下这个文件的全貌,找一下它的签名究竟是什么。

结果,我竟然在这一个文件内找到了多个签名!如下面几个图所示:

Android 如何查看md5指纹 安卓查看文件md5_应用程序_17

Android 如何查看md5指纹 安卓查看文件md5_Android 如何查看md5指纹_18

Android 如何查看md5指纹 安卓查看文件md5_查看文件md5_19

继续下拉,应该会找到另外3个签名。(由于文件ASCII码窗口实在太长,就不一个个找了,感兴趣的可以自己去试试)

从这一点我们可以知道,其实这一个文件内含有多个文件签名,不同的应用程序在读取这个文件时,只找对应的文件签名部分读取就好了。

这就是为什么在把文件后缀改为不同的扩展名时,都能够读取的原因。



Android 如何查看md5指纹 安卓查看文件md5_应用程序_20

组合文件与隐写术

有了上述关于「文件签名」的分析,很自然地我们会联想到「组合文件」,即把不同格式的文件组合成一个文件。

怎么理解这个组合文件呢?这里我画了一个示意图:



Android 如何查看md5指纹 安卓查看文件md5_查看文件md5_21

每个应用程序都只读取对应格式的部分,而无法看到这个文件的全貌,但我们在传输时是将整个文件算作整体的。

当然,不要被这个示意图所局限了,这个“组合”不一定是连续的文件组合在一起,也有可能是重叠的合并,就像这样:



Android 如何查看md5指纹 安卓查看文件md5_html_22

这就不禁让人想到了 「隐写术」。

隐写术, Steganography,是一门关于信息隐藏的技巧与科学,所谓信息隐藏指的是不让除预期的接收者之外的任何人知晓信息的传递事件或者信息的内容,常见的是将一个文件隐藏到另一个文件中去。

这个文件可以算作是一种隐写技术的文件。不过我们不跑远了,隐写术的介绍先到这里,大家有兴趣的话我们之后再开专题讲。



Android 如何查看md5指纹 安卓查看文件md5_Android 如何查看md5指纹_23

对取证的启示

现在梳理一下我们整个分析过程,可以总结这么几个知识点:

知识点总结

  1. 更改文件扩展名并不会更改文件内容,而哈希值只和文件内容有关,更改文件属性并不会影响哈希值。所以,前3个通过更改扩展名的文件的MD5值和SHA1值一样。
  2. 虽然文件的格式不同、内容不同,那只是因为相应的应用程序只读取了对应的部分,但我们计算哈希值的时候却是将整个完整的文件一起计算的。
  3. MD5的碰撞概率还是很高的,MD5 相同不一定SHA1或其他哈希函数值也相同。
  4. 文件签名的局限性在于,一个文件不一定只有一个文件签名,所以找到某个格式的签名不能作为判断这个文件的唯一标准。

通过这个案例的学习,以后,在取证过程中,不妨养成这样几个习惯:

取证Tips

  • 留心文件大小:超出正常格式大小太多的文件,很可能隐藏了其他文件。
  • 针对可疑文件进行签名扫描:查找一个文件中是否存在多种格式的文件签名。
  • 计算哈希值的时候,少用MD5,且使用多种哈希函数校验,而非仅仅一种。

这次的文件测试,让我有一个很深刻的感受,即便相关的知识点能够想到,但在实际动手分析的过程中还是会发现一些问题并没有考虑周全。取证不能想当然,还是要深入实践中一点一点地分析才行。



Android 如何查看md5指纹 安卓查看文件md5_应用程序_24

彩蛋

其实,关于这个神奇的文件究竟是如何形成的,作者早已经给出了非常详细的答案。不知道你有没有注意到呢~

彩蛋就是那个PNG图片!看!

Android 如何查看md5指纹 安卓查看文件md5_Android 如何查看md5指纹_07

其中还描述了相同的段,在不同的文件格式中读取的情况。不得不叹服作者的妙思!有兴趣的大佬,不妨进一步研究一下