0x01. 问题背景

最近研究图片的图片数字水印技术,发现很简单的两个文件合并成一个文件功能,然而还不影响原始文件的内容,我们将其称为图片文件的隐写。当然,小秘密或者私人文件需要隐藏但是又逃不过别人的多层“扫描”,那也可以通过简单的几行命令实现隐藏。一起来试试吧~~~

0x02. 命令说明

copy 是一个基础的DOS命令,也许在今天已经很少有人使用,但它仍然很实用。我们先看看文档说明,如图:
在这里插入图片描述
于是,我们基本的命令格式如下:

copy /B 文件名1+文件名2 合并后的文件名

0x03. 玩转copy

0x03_1. 素材准备

如图,一张res.jpg图片,一个要被隐藏的secret.py文件。
在这里插入图片描述

0x03_2. 把文件藏进图片里

打开cmd命令框, 一定处于当前文件目录下,使用如下命令:

copy /B res.jpg+secret.py out.jpg

如图:
在这里插入图片描述
表示成功,我们对比一下,左图res.jpg是原图,out.jpg是生成图。
在这里插入图片描述
是不是看不出什么差别!再也不担心我的种子被兄弟们要走啦~~~
我们细心求证,真的隐藏了嘛?再看看细节:
在这里插入图片描述
out藏入的信息后,内容确实变大了!

0x03_3. 此处有坑

什么坑?那就是如何还原的坑,如果没有专业的工具,我们还是将要隐藏的secret.py转换成zip文件,一方面能再次减小合并后的文件大小,另一方面恢复隐藏内容只需要手动提取即可。因此,我们合并时候命令改变如下:

copy /B res.jpg+secret.zip out.jpg

产生同样的结果,但是我们对比一下文件属性,如图:
在这里插入图片描述
右边输出的out.jpg文件大小是不是变小了~~~

0x04. 文件恢复

我们如何将隐藏的文件恢复呢?很简单,只需要将out.jpg改成out.zip,如图:
在这里插入图片描述
直接解压即可得到被隐藏的文件secret.py.

0x05. 探索原理

我们将合并后的文件,使用winhex打开,如图:
在这里插入图片描述
发现原始文件的前面部分一点不变化,我们拖到最后面,查找十六进制FFD9,它是jpg文件的结束标识,如图:
在这里插入图片描述
那后面的一堆内容是什么呢,我们将其复制出来,创建新的文件,发现是一个名为secret.zip的文件,里面包含secret.py。

那么很容易解释原理了,copy /B命令其实就是将两个文件的二进制结合即可,形成了一个新的二进制文件,但是window环境下,jpg文件只识别到文件末尾的FFD9标识符后即不再往后识别展示。因此后面添加什么只要不是FFD9,都是可以正常解析出来看到。

0x06. 写在最后

如果各位看官熟悉kali,当然这种问题也属于CTF杂项中的隐写问题,那么可以直接使用工具:
binwalk查看是否隐写,foremost进行文件的分离即可。又或者用StegSolve去分析文件信息又或者使用winhex查看文件的表示段字符方式进行分离。(想到这里,我感觉我也可以出题去了哈哈哈哈~~~)

上述方法对于MP3文件的组合也可以起到作用,实现音乐的大串烧,如果想用java实现,详细代码请戳:传送门

如果觉得写的不错,麻烦给个关注吧!

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐