如何提取隐写到 jpg 中的视频信息?

331 天前
 FaiChou

http://m.dodoge.me/bangumi/8497/play/1/12/

这个视频站中的视频都是视频流地址,数据在百度云 OSS 上,每次请求的时候是一张张的 jpg ,下载下来后是全黑的照片。

有什么方法可以将视频信息从这张 jpg 中提取出来?

要下载的话可以使用 Chrome 插件 cococut ,但本帖只探讨技术。

1962 次点击
所在节点    程序员
16 条回复
AoEiuV020JP
331 天前
有个 binwalk ,可以识别出二进制文件哪部分是什么格式内容,
我猜应该可以识别出第几字节到第几字节是 jpg ,然后第几字节到第几字节是视频,
再取出来特定范围的数据就可以,
没测试,
dcty
331 天前
嗯,你下载之后,把后缀改为 mp4 就可以用播放器打开了。
misdake
331 天前
比如可以在文件尾写上隐藏文件的 offset ,或者 jpg 内容本身就是固定大小的
CloudnuY
331 天前
下载下来的 jpg 或者 gif 文件扩展名改成 mp4 就可以用播放器播放了……
shuax
331 天前
实际上是 gif ,然后在尾部添加了视频数据。
FaiChou
331 天前
@dcty 测试过 不可以
dcty
331 天前

应该是伪装成图片骗过图床的校验
dcty
331 天前
@FaiChou #6 我没有每一个都测试,根据我测试的其中一个来看,通过改文件扩展名可以直接播放,如果你不行,可能是你的播放器没容错。

通过 hexdump 查看文件前面的数据,很明显就是视频,只不过在前面插入了一些伪装成图片的信息来欺骗图床。
whoami9894
331 天前
DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
0 0x0 GIF image data, version "89a", 100 x 100
336 0x150 MPEG transport stream data
900 0x384 MPEG transport stream data
177432 0x2B518 MPEG transport stream data
365996 0x595AC MPEG transport stream data
545724 0x853BC MPEG transport stream data
724700 0xB0EDC MPEG transport stream data
FaiChou
331 天前
@dcty #8 哦哦 我测试了一下,用 iina 播放是 0 秒的视频,但微信里播放是 5 秒的视频。
totoro52
331 天前
好家伙 白嫖图床
token10086
331 天前
这个时候就要批评下 又拍云 的 form api 了,它上传的时候识别后缀,用户打开的时候是读的头文件。这样就有个有趣的操作,用户可以把 1.mp4 重命名为 1.jpg 。然后发给别人 content-type 头返回的是 mp4 !!!!

别问我意见为什么这么大,被坑过。
awolf
330 天前
@token10086 被内容 shencha 到了?
LLaMA2
330 天前
文件是一堆按照特定规则编码的字节码,一个文件是什么类型( jpg ? png ? kmv ? mp4.....)不取决于文件名或文件名后缀,而是取决于内容本身。

所以一些奇怪的网站中视频流为了绕过检查,或者是节省流量费用,自己搞一些奇怪的文件,配合定制下播放器播放的逻辑,在播放器处理下字节码还原成原本的面貌,也就不影响播放了
daimaosix
330 天前
这就是 hls 协议的视频,现在很多视频转码系统支持伪装后缀,上传到各个大厂的口子上,没啥好讨论的,一看这种类型的网站就明白了
daimaosix
330 天前
下载下来后缀改成 ts 就能播

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/945265

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX