把压缩包藏到图片里

本文最后更新于 2025年4月9日 晚上

linux

1
cat example.jpg example.zip > 1.jpg

Windows

打开 CMD(不能是 PowerShell)

1
copy /b example.jpg + example.zip 2.jpg

生成的文件可以正常的用各种图片浏览器打开,也可以直接用你的压缩软件打开这个 'jpg' 文件,但有些时候可能需要给它加个 .zip 后缀才能正常识别,如果你的压缩软件不支持识别这种文件也没关系,后面会提到拆开的办法。


看一下生成的文件的校验值

1
2
3
$ md5sum *.jpg
c6a274f01e3eb53a467bb11a14102fed 1.jpg
c6a274f01e3eb53a467bb11a14102fed 2.jpg

两个平台的结果是一模一样的!

这个小“魔术”的原理很简单,就是从二进制层面强行把两个文件拼接到一起,但各种软件在默认情况下只能读出来这个缝合怪的第一个部分。没用知识 +1

有合就有分,再来试一下把文件再拆出来吧,以 Linux 上的操作为例:

拆分(Linux)

首先看一下原来图片有多大

1
2
3
4
$ stat example.jpg
File: example.jpg
Size: 112200 ... ...
... ...

喔,是 112200 字节,开搞!

只把图片拆出来直接可以用 dd 一行搞定。

1
dd if=2.jpg of=2.1.jpg bs=1 count=112200

全都拆出来就要用到其他工具了

1
2
3
4
5
mkdir split
cd split/
split -b 112200 ../2.jpg # 按照 112200 字节每段,拆分为 xaa 、xab、xac 等一大堆小文件
mv xaa ../2.2.jpg # 第一段就是那个图片
cat ./* > ../2.2.zip # 其余的按照顺序拼起来就是压缩包

PS:本文只是以 zip 和 jpg 为例,所有的压缩包格式、图片格式理论上都可以使用本文所属方法

最后的最后,贴一下中间产生的所有文件的校验值

1
2
3
4
5
6
7
8
9
$ md5sum ./* | sort -k 1
785352af167d67a06bd341617d88d3ab ./2.2.zip
785352af167d67a06bd341617d88d3ab ./2.zip
785352af167d67a06bd341617d88d3ab ./example.zip
7fc687cc6229f5cdd411f9b812bc74c7 ./2.1.jpg
7fc687cc6229f5cdd411f9b812bc74c7 ./2.2.jpg
7fc687cc6229f5cdd411f9b812bc74c7 ./example.jpg
c6a274f01e3eb53a467bb11a14102fed ./1.jpg
c6a274f01e3eb53a467bb11a14102fed ./2.jpg

把压缩包藏到图片里
https://blog.oopsky.top/post/19208f29/
作者
WEI
发布于
2025年4月9日
更新于
2025年4月9日
许可协议