CleasbyCode/jdvrif
GitHub: CleasbyCode/jdvrif
一款基于 JPG 应用数据段的隐写术命令行工具,支持加密压缩并兼容主流社交平台传输。
Stars: 64 | Forks: 1
# jdvrif
***jdvrif*** 是一个快速、易用的隐写术命令行工具,用于通过 **JPG** 图像隐藏和提取任何文件类型。
此外还有一个 [***Web 版本***](https://cleasbycode.co.uk/jdvrif/app/),你可以立即使用,作为下载和编译 CLI 源代码的便捷替代方案。Web 文件上传限制为 **20MB**。

*演示图像:**“藏身之处”** / ***PIN: 2190398302048725932****
与常见的在载体图像像素内隐藏数据的隐写方法([***LSB***](https://ctf101.org/forensics/what-is-stegonagraphy/))不同,***jdvrif*** 将文件隐藏在 ***JPG*** 图像的 ***application segments*** 中。
你可以隐藏最大 ***2GB*** 的任何文件类型,尽管兼容站点(*如下所列*)有各自 ***更小*** 的大小限制和 *其他要求。
为了增加存储容量和安全性,你嵌入的数据文件会使用 ***zlib*** 进行压缩,并使用 ***libsodium*** 加密库进行加密。
***jdvrif*** 部分源于安全研究员 ***[David Buchanan](https://www.da.vidbuchanan.co.uk/)*** ***[实施的技术](https://www.vice.com/en/article/bj4wxm/tiny-picture-twitter-complete-works-of-shakespeare-steganography)***。
## 用法 (Linux)
```
Note: Compiler support for C++23 required.
$ sudo apt install libsodium-dev libturbojpeg0-dev
$ chmod +x compile_jdvrif.sh
$ ./compile_jdvrif.sh
Compiling jdvrif...
Compilation successful. Executable 'jdvrif' created.
$ sudo cp jdvrif /usr/bin
$ jdvrif
Usage: jdvrif conceal [-b|-r]
jdvrif recover
jdvrif --info
$ jdvrif conceal your_cover_image.jpg your_secret_file.doc
Platform compatibility for output image:-
✓ X-Twitter
✓ Tumblr
✓ Mastodon
✓ Pixelfed
✓ PostImage
✓ ImgBB
✓ ImgPile
✓ Flickr
Saved "file-embedded" JPG image: jrif_129462.jpg (143029 bytes).
Recovery PIN: [***2166776980318349924***]
Important: Keep your PIN safe, so that you can extract the hidden file.
Complete!
$ jdvrif recover jrif_129462.jpg
PIN: *******************
Extracted hidden file: your_secret_file.doc (6165 bytes).
Complete! Please check your file.
```
## 兼容平台
*发布大小限制以 ***载体图像*** + ***压缩数据文件*** 的 ***组合*** 大小衡量:*
● ***Flickr*** (**200MB**), ***ImgPile*** (**100MB**), ***ImgBB*** (**32MB**),
● ***PostImage*** (**32MB**), ***Reddit*** (**20MB** | ***-r 选项***), ***Pixelfed*** (**15MB**).
*大小限制 ***仅*** 按 ***压缩数据文件大小*** 衡量:*
● ***Mastodon*** (**~6MB**), ***Tumblr*** (**~64KB**), ***X-Twitter*** (**~10KB**).
例如,对于 ***Mastodon***,如果你的载体图像是 **1MB**,你仍然可以嵌入最大 **~6MB** 大小限制的数据文件。
**其他:***Bluesky*** 平台对 ***载体图像*** 和 ***压缩数据文件*** 有 ***单独的*** 大小限制:**
● ***Bluesky*** (***-b 选项***)。载体图像大小限制 (**800KB**)。压缩数据文件大小限制 (**~171KB**)。
● 需要 "***bsky_post.py***" 脚本才能在 ***Bluesky*** 上发布图像。*更多信息在页面下方。*
对于像 ***X-Twitter*** 和 ***Tumblr*** 这样有较小大小限制的平台,你可能需要关注压缩效果好的数据,例如文本文件等。
https://github.com/user-attachments/assets/8d21cdbb-30f0-424c-aeb8-bcacca8c4255
https://github.com/user-attachments/assets/b2cc33ff-b2c2-46c2-960b-f7b9ba65223d
jdvrif ***mode*** 参数:
***conceal*** - 压缩、加密你的秘密数据文件,并将其嵌入到 ***JPG*** 载体图像中。
***recover*** - 从 ***JPG*** 载体图像中解密、解压并提取隐藏的数据文件。
jdvrif ***conceal*** 模式 ***platform*** 选项:
"***-b***" 要创建用于在 ***Bluesky*** 平台上发布的兼容“*嵌入文件*” ***JPG*** 图像,你必须在 ***conceal*** 模式下使用 ***-b*** 选项。
```
$ jdvrif conceal -b my_image.jpg hidden.doc
```
这些图像仅兼容在 ***Bluesky*** 上发布。如果在其他平台上发布,你嵌入的数据文件将被移除。
你还需要使用 Python 脚本 ***"bsky_post.py"***(位于仓库 ***src*** 文件夹中)将图像发布到 ***Bluesky***。
如果你通过浏览器网站或移动应用将图像发布到 ***Bluesky***,它将无法工作。
要使用该脚本,你需要从你的 ***Bluesky*** 账户创建一个 [***app password***](https://bsky.app/settings/app-passwords)。
以下是 ***bsky_post.py*** 脚本的一些基本用法示例。
发布到你的 bsky 个人资料的标准图像帖子:
```
$ python3 bsky_post.py --handle you.bsky.social --password xxxx-xxxx-xxxx-xxxx --image your_image.jpg --alt-text "alt-text here (optional)" "standard post text here (required)"
```
如果你想发布多张图像(最多 4 张):
```
$ python3 bsky_post.py --handle you.bsky.social --password xxxx-xxxx-xxxx-xxxx --image img1.jpg --image img2.jpg --alt-text "alt_here" "standard post text..."
```
如果你想把图像作为对另一个帖子的回复发布:
```
$ python3 bsky_post.py --handle you.bsky.social --password xxxx-xxxx-xxxx-xxxx --image your_image.jpg --alt-text "alt_here" --reply-to https://bsky.app/profile/someone.bsky.social/post/8m2tgw6cgi23i "standard post text..."
```
https://github.com/user-attachments/assets/b4c72ea7-40e3-49b0-89aa-ae2dd8ccccb9
"***-r***" 要创建用于在 ***Reddit*** 平台上发布的兼容“*嵌入文件*” ***JPG*** 图像,你必须在 ***conceal*** 模式下使用 ***-r*** 选项。
```
$ jdvrif conceal -r my_image.jpg secret.mp3
```
在 ***Reddit*** 网站上,选择 "***Create Post***",然后选择 "***Images & Video***" 标签,以附加并发布你的 ***JPG*** 图像。
这些图像仅兼容在 ***Reddit*** 上发布。如果在其他平台上发布,你嵌入的数据文件将被移除。
要正确地从 ***X-Twitter*** 或 ***Reddit*** 下载图像,请先点击帖子中的图像使其完全展开,然后再保存。
https://github.com/user-attachments/assets/f56f54bb-658f-4b0e-a2f3-7d3428333304
## 第三方库
本项目使用了以下第三方库:
- **libsodium**: 用于加密功能。
- [**LICENSE**](https://github.com/jedisct1/libsodium/blob/master/LICENSE)
- Copyright (C) 2013-2025 Frank Denis (github@pureftpd.org)
- libjpeg-turbo (参见 [***LICENSE***](https://github.com/libjpeg-turbo/libjpeg-turbo/blob/main/LICENSE.md) 文件)
- {本软件部分基于 Independent JPEG Group 的工作。}
- Copyright (C) 2009-2024 D. R. Commander. All Rights Reserved.
- Copyright (C) 2015 Viktor Szathmáry. All Rights Reserved.
- **zlib**: 通用压缩库
- License: zlib/libpng license (参见 [***LICENSE***](https://github.com/madler/zlib/blob/develop/LICENSE) 文件)
- Copyright (C) 1995-2024 Jean-loup Gailly and Mark Adler
##
标签:C++23, CLI, CTF工具, DNS 反向解析, JPG图片, libsodium, meg, Steganography, Web版, WiFi技术, zlib, 信息安全, 加密, 图像隐藏, 图片伪装, 数字取证, 数据压缩, 数据脱敏, 数据隐藏, 文件隐藏, 漏洞扫描器, 漏洞搜索, 网络安全, 自动化脚本, 逆向工具, 隐写术, 隐私保护, 隐蔽数据