尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

命令行看番工具 ani-cli 源码解析(三):揭秘纯 Shell 实现的 XOR 混淆解密 deobfuscate_blob

发布时间:2026/9/19 14:00:16

资讯中心
01
ARTICLE

命令行看番工具 ani-cli 源码解析(三):揭秘纯 Shell 实现的 XOR 混淆解密 deobfuscate_blob

命令行看番工具 ani-cli 源码解析(三):揭秘纯 Shell 实现的 XOR 混淆解密 deobfuscate_blob
命令行看番工具 ani-cli 源码解析三揭秘纯 Shell 实现的 XOR 混淆解密 deobfuscate_blob【免费下载链接】ani-cliA cli tool to browse and play anime项目地址: https://gitcode.com/gh_mirrors/an/ani-cliani-cli 是一款纯 Shell 编写的命令行看番工具让你在终端里搜索、播放、下载动漫。它的嵌入播放器页面并不会直接给出视频地址而是把配置加密后藏在一行 JavaScript 里。本文深入 ani-cli 源码拆解 deobfuscate_blob 函数如何用 base64 解码、XOR 运算和od命令零依赖地解开这串混淆数据恢复出可播放的 m3u8 链接。 背景解密发生在抓取流程的哪一步ani-cli 的整体抓取逻辑在官方开发文档 hacking.md 中有完整说明搜索 → 选番 → 选集 → 下载播放器页面 → 提取并后处理链接 → 选画质播放。在links are extracted (and post-processed) from the player这一步post-processed正是本文的主角——对加密的window.__P载荷做 XOR 解密。想看完整工具交互模型的可以翻阅 hacking.md 末尾的 UX 状态机规范图 加密载荷从哪来window.__P 与 ZokoAnime 嵌入页解密不是凭空发生的先看看密文是怎么来的。调用链位于 hianime_m3u8请求该集的播放服务器列表只认ZokoAnime服务器取其data-hash字段ani-clidata-hash本身是 base64b64_decode 解码后得到一个嵌入页 URL用 hianime_curl 抓取嵌入页用 sed 正则抠出window.__P...这一串密文ani-cli密文交给deobfuscate_blob解密得到的 JSON 里藏着src:….m3u8和字幕地址。源码里一行注释点破了全部机关ani-cli嵌入页配置按base64(json XOR otaku-embed-v1)的格式下发。注意 ani-cli 的另一行注释目前只有 ZokoAnime 嵌入页能被deobfuscate_blob理解其他服务器用的是不同的播放器。 deobfuscate_blob 逐行拆解函数本体只有 12 行ani-cli完整代码如下deobfuscate_blob() ( _bytes$(b64_decode $1 | od -v -An -tu1) set -- 111 116 97 107 117 45 101 109 98 101 100 45 118 49 _output for _byte in $_bytes; do _char$((_byte ^ $1)) _output${_output}\\0$((_char / 64))$(((_char / 8) % 8))$((_char % 8)) set -- $ $1 shift done printf %b $_output )第一步base64 解码 字节展开b64_decode 是个小巧的跨平台函数依次尝试 GNU 的base64 -d、BSD/macOS 的base64 -D、最后兜底openssl base64 -d -A保证 Linux、macOS 都能解。解码后的二进制不能直接进 shell 变量所以管道接od -v -An -tu1-An去掉地址列-tu1按无符号十进制输出每个字节的值。密文就此变成一串可以用 for 循环逐个处理的数字。第二步把密钥藏进位置参数做轮转set -- 111 116 97 ...看起来像天书其实是密钥的 ASCII 码密钥数值1111169710711745101109981011004511849对应字符otaku-embed-v1连起来正是密钥otaku-embed-v1。妙处在于密钥的轮转完全没用数组。函数头部的()让它跑在子 shell 里主脚本的位置参数不受污染循环末尾两行set -- $ $1 shift效果是把$1挪到参数列表末尾再shift一位——一个纯位置参数实现的环形缓冲区让$1永远指向下一个密钥字节密钥不足 14 字节时自动循环使用。第三步XOR 解密 八进制转义安全编码循环主体一行_char$((_byte ^ $1))完成 XOR密文字节异或当前密钥字节得到明文字节。为什么不直接拼进变量因为明文字节可能是任意值。这里用$(( _char / 64 ))、$(( (_char / 8) % 8 ))、$(( _char % 8 ))三个位段运算把每个字节编码成\0XYZ形式的三位八进制转义追加到_output最后printf %b一次性还原成真实字节输出 JSON。这样任意字节都能安全地穿过 shell 变量不触发词分割或转义问题。 解密之后一路 sed 到 m3u8 链接拿回 JSON 后hianime_m3u8 继续用 sed 链式提取src主播放列表再请求它获得各画质分链交给select_quality按-q参数挑选。解密环节到此收工剩下的就是常规选画质与交给播放器。 这套实现给 Shell 开发者的 3 个启发子 shell 是免费的隔离舱deobfuscate_blob() (...)一行()就让用位置参数存密钥这种非常规写法零副作用set/shift可以替代数组POSIX sh 没有数组位置参数轮转是纯 sh 环境下实现环形缓冲的经典技巧八进制转义搬运任意字节用od -tu1读二进制、用\0XYZ写二进制配合printf %b往返是 shell 里处理非文本数据的可移植方案。 延伸阅读抓取与解密的整体思路hacking.mdGetting the player embed 一节完整参数与用法手册ani-cli.1安装与依赖说明README.mdHomebrew 打包配方依赖清单一目了然Formula/ani-cli.rb【免费下载链接】ani-cliA cli tool to browse and play anime项目地址: https://gitcode.com/gh_mirrors/an/ani-cli创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。