小伙伴们有没有遇到过这样一个场景,两台设备之间只可以通过一个通讯软件进行通讯。软件只能发送图片,其他格式的文件是被限制下载的。如下面所示:

image-1655642142661

在这种情况下,一些小伙伴可能会想用修改文件后缀名的方式,将文件后缀名改成 pngJPG 等格式。

有这种想法,对文件这个概念可能不太熟悉。


修改后缀名会修改文件的类型吗?

文件名及后缀名与文件里的内容无关,在 windows 中,后缀名只区分在你双击分件的时候,默认打开的方式。

严格来说,文件是没有类型的。在没有与程序关联前,文件里的内容就是一串编码字符,单独的一个文件是没有意义的。

通常的,一个被具有特定意义地文件,会有一套与之对应地程序对该文件地进行解析,例如,office 中的一个程序能够对 docpdf 文件解析,视频播放器能够对MP4 等文件进行解析。

修改文件后缀名,文件里的内容并没有被改变。将本应是 doc 内容的文件使用播放器程序进行打开,视频播放器不能识别文件的内容,导致执行出错。


直接将文件后缀名修改成图片相关的后缀名( pngjpg 等)行不通,是否可以将其他文件放到图片中呢?

这个还真的可以。

先看一下图片的内容长什么样子,使用 notepad++ 开打图片文件:

image-1655706763686

图片文件有个特点是,在图片文件内容后面追加数据,如在 png 文件尾部 添加一些信息,再用图像工具打开该文件,是能够正确打开的。

image-1655707140935

因此可以将需要传输的文件追加到图片内容后。

image-1655708102713

现在我需要传输 context.zip 文件,可以将 content.zip 文件的内容,追加到carrier.png 文件后。

请不要直接将 zip 文件的内容,复制到粘贴板,再粘贴到 png 文件中!
由于编码格式等问题,得到的内容不一致,最终导致操作失败。

下图是直接从粘贴板复制粘贴过来的,可以看到内容已经发生了变化。
image-1655708562723

正确的做法是,使用命令行的方式:

#  copy /b  <file1> + <file2>  <file3> 将file2 追加到file1后面,生成file3.
# 图片要放在file1的位置
$ copy /b carrier.png + content.zip oupt .png

image-1655709126280

可以看到这样复制过来的内容就是无误了,这样就可以将 zip 伪装成图片的形式传输过去了。
image-1655710212623

传输过去后,再将 output.png 中前面的内容删了,即是一个 zip 文件。(目前是 png 结尾,将 png 改成 zip 就默认以压缩工具打开 output.zip 了)
image-1655710315850


如果觉得有收获的话,就请作者喝杯咖啡吧!


daydream
1 声望0 粉丝

引用和评论

0 条评论