写了个工具将数据分块并加密后储存于 jpg 的空间域中上传至各大社交平台, 最后生成一个类似于 Magnet 的短链接 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zckevin
V2EX    分享发现

写了个工具将数据分块并加密后储存于 jpg 的空间域中上传至各大社交平台, 最后生成一个类似于 Magnet 的短链接

  •  
  •   zckevin 2024-01-08 22:45:14 +08:00 1594 次点击
    这是一个创建于 697 天前的主题,其中的信息可能已经有所发展或是发生改变。

    https://github.com/zckevin/jpeg-chan

    jpeg-chan

    Tests

    将任意数据分块并加密后储存于 jpeg 图像的空间域中, 上传至各大社交平台, 最后生成一个类似于 Magnet 的短链接.

    原理

    假定图像通道深度为 8-bit, e.g:

    |high <--> low|

    | 1 2 3 4 5 6 7 8 |

    一个字节按照 [1-8] 从高位到低, [6-8] bits 因各大社交平台普遍对 jpeg 图片进行二次处理, 其值易发生变化, 因此将 payload 数据储存于 [1-5] bits 之间.

    e.g. 上传 128KiB 数据至 Bilibili, used bits 为 [1-5], chunk size 设定为 128KiB(即分块数目为 1):

    node bin/cmd.js test -s bili -b 1-5 128k 128k 

    将生成两张图片, 一张为 Bootloader, 一张为实际文件内容(具体信息参考下一节: 文件格式):

    bootloader:

    bootloader

    payload:

    payload

    同时支持使用另一个图片作为 mask, 例如使用如下文件作为 mask, 上传 128KiB 数据至 Bilibili, used bits 为 [2-5]:

    mask

    node bin/cmd.js test -s bili -b 2-5 128k 128k 

    payload:

    payload

    修改 used bits 为: [4-5], 可以看到使用空间域的低位将减少图片的噪点(尽管对于深度学习识别系统而言没什么实际作用):

    node bin/cmd.js test -s bili -b 4-5 128k 128k 

    payload:

    payload

    文件格式

    目标存储文件根据用户提供的 chunk size 切分为 N 个 chunks, 每个 chunk 上传为一张 JPEG 图片. 每张 jpeg 图片对应着一个 FilePointer, 其中包含这个 chunk 的 meta data, 以及该图片的网络 url.

    • FilePointer
      • chunk size
      • used bits
      • checksum
      • urls

    Chunks pointers 和目标存储文件的其它 meta data 储存在 BootloadFile 中, 它也将上传为一张 JPEG 图片.

    • Bootloader
      • array of chunk pointers
      • file size
      • chunk size
      • file name
      • aes_key
      • aes_iv
      • sha256 checksum

    最后根据 BootloaderFile 上传后得到的 FilePointer, 经由 base64url 编码生成一串如下格式的 URI:

    jpegchan://CNABEgMxLTUaIBpV77TOwCh3hCedDr-n_Szv3_F-gkWeoNNXRkwTK7yIIjMSMQorCikwNDU0YTBkZTZjM2M5Nzc1MjEwZDVkZmE5MzI3ZDQxNTY5MDMwMjY1OBAEGAE?password=6060ba5bee6848c3

    password 存储在 URL 的 query 中, 用户在公开分享该 url 时可以将其隐藏并通过其它信道分享 password.

    Supported platforms

    • Bilibili(tested)
    • Weibo(untested)

    Usage

    npm i --location=global jpeg-chan jpeg-chan -h # 在当前目录创建 .env 文件或者使用环境变量 # # for bilibili # BILIBILI_SESSION=cookie.SESSDATA # BILIBILI_CSRF=cookie.bili_jct 

    具体参数参考 bin/cmd.js

    上传文件

    node bin/cmd.js upload -s bili ./package.json 90 

    下载文件

    文件将保存于/tmp目录下.

    node bin/cmd.js download \ "jpegchan://CNABEgMxLTUaIBpV77TOwCh3hCedDr-n_Szv3_F-gkWeoNNXRkwTK7yIIjMSMQorCikwNDU0YTBkZTZjM2M5Nzc1MjEwZDVkZmE5MzI3ZDQxNTY5MDMwMjY1OBAEGAE?password=6060ba5bee6848c3" 

    Todos

    • 支持更多的平台, 暂时只测试了 Bilibili
    • 支持多平台冗余上传
    • 通过兼容 BitTorrent 支持 FUSEfs

    Dev

    debug log

    Run cmd.js with DEBUG=*

    update protocol/protobuf

    • npm run build:pb

    run tests

    • jest: encoder/decoder tests on Node.js
    • karma: encoder/decoder tests on browser

    inspect decoder perf in chrome

    1. write test in //tests/e2e/
    2. run npm run e2e to start chrome and karma server
    3. open performance tab in Devtools and start recording
    4. run npx karma run -- --grep KEYWORD to run the specific test

    免责声明

    免责声明

    本项目开发仅作为科研学习使用, 请勿将本项目用作以下用途, 如若违反本软件作者概不负责,亦不承担任何法律责任.

    • 软件病毒 payload 下发, 回传 C2 服务器
    • 盗版网站 host 视频数据
    • ...
    7 条回复    2024-01-09 21:41:23 +08:00
    tuwulin365
        1
    tuwulin365  
       2024-01-08 22:51:34 +08:00
    图种 v2
    Chemist
        2
    Chemist  
       2024-01-09 09:27:08 +08:00 via iPhone
    啊,我还以为是塞到不同的图片传到不同的平台再生成一个统一的链接
    nicevoice
        3
    nicevoice  
       2024-01-09 21:27:03 +08:00
    2017 年有人写了个 python 的版本,支持百度,豆瓣,b 站等。
    nicevoice
        4
    nicevoice  
       2024-01-09 21:30:44 +08:00
    zckevin
        5
    zckevin  
    OP
       2024-01-09 21:35:13 +08:00
    @nicevoice
    感谢提醒, 我之前在 v 站上也见到过同类工具 BiliDrive
    nicevoice
        6
    nicevoice  
       2024-01-09 21:40:21 +08:00
    @zckevin 是的,作者也是他,哈哈哈。
    nicevoice
        7
    nicevoice  
       2024-01-09 21:41:23 +08:00   1
    @zckevin 是的,作者也是他 @hobbyliu ,哈哈哈。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2813 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 03:09 PVG 11:09 LAX 19:09 JFK 22:09
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86