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

如何调用99%的知乎网页端API?知乎++逆向zse96 v2签名算法Rust实现深度解析

发布时间:2026/9/25 10:46:56

资讯中心
01
ARTICLE

如何调用99%的知乎网页端API?知乎++逆向zse96 v2签名算法Rust实现深度解析

如何调用99%的知乎网页端API?知乎++逆向zse96 v2签名算法Rust实现深度解析
如何调用99%的知乎网页端API知乎逆向zse96 v2签名算法Rust实现深度解析【免费下载链接】zhihu-plus-plusZhihu | 知乎: Ad-free, low cost, AI powered zhihu android 3rd-party client. 去广告、占用低、AI大模型的新时代知乎安卓端体验项目地址: https://gitcode.com/gh_mirrors/zh/zhihu-plus-plus知乎Zhihu是一款免费、去广告、低占用的知乎第三方客户端支持 Android、macOS 和桌面端。它最硬核的能力之一是完整逆向了知乎网页端的zse96 v2 签名算法并用人人可审计的Rust 语言重新实现——这意味着知乎能像浏览器一样合法访问知乎网页端 99% 的 API 接口从而解锁搜索、话题、用户动态等大量原生 App 拿不到的数据。为什么知乎网页 API 需要签名用浏览器打开知乎任意页面如搜索、问题详情你会发现每个请求都带着三个特殊请求头请求头作用x-zse-93签名版本标识固定为101_3_3.0x-zse-96核心签名值格式为2.0_一长串密文x-requested-with模拟fetch请求来源服务器端会校验x-zse-96是否由当前 URL、你的设备 cookied_c0、请求体计算而来。签名对了网页端接口对你全部开放签名错了直接 403。这就是为什么很多第三方客户端只能调用 App 私有接口、功能受限而知乎可以做到网页级的完整体验。 关键洞察签名算法并非黑盒魔法而是藏在知乎前端加载的一个 JS 文件里仓库中保留了逆向样本 misc/zse-ck-v4-24df2abbfcb1b98cd5ce1b519f02eeabea28c83ac9d9ec2778dc5b03a3b8b710.js。知乎团队逐行读懂了它的混淆逻辑然后用 Rust 一行行还原。zse96 v2 签名算法全流程拆解整个签名可以浓缩成一条流水线共 4 步1️⃣ 拼装签名原文把 4 个要素用号拼接zse93 pathname d_c0 body其中pathname是请求 URL 去掉域名后的路径body为 POST 请求体GET 请求则为空。拼接逻辑在 ZhihuFetchSignature.kt 中不到 15 行代码。2️⃣ MD5 摘要对拼接结果做一次标准 MD5得到 32 位十六进制字符串。知乎的 ZhihuFetchSignature.kt 甚至手写了一个零依赖的 MD5 实现md5Hex函数保证跨平台行为完全一致。3️⃣ 自定义块加密算法核心这是整个算法最反常规的部分全部由 Rust 实现位于 rs-zse-sign/src/lib.rsZK密钥表32 个 32 位常量相当于加密算法的密钥轮ZB置换表256 字节的字节重排表配合左移 2/10/18/24 位的异或运算构成混淆函数g_transformr_block块加密把 16 字节输入扩展成 36 个字的寄存器组迭代 32 轮后取最后 4 字输出——结构上很像 AES 的轮函数但完全是知乎自研。多块数据之间还有链式依赖每块的密文都作为下一块的初始化向量见x_blocks函数 rs-zse-sign/src/lib.rs任何一块被篡改都会导致后续全部校验失败。4️⃣ 自定义 Base64 编码最后用一张乱序的 64 字符表6fpLRqJO8M/c3jnYxFkUVC4ZIG12SiH5v0mXDazWBTsuw7QetbKdoPyAlhN9rgE做类 Base64 编码并在编码时逐字节异或一个由常量58派生的滚动掩码见custom_encode函数 rs-zse-sign/src/lib.rs。即使你猜出了标准 Base64也解不开这层字符表掩码的双重伪装。最终拼上版本前缀就是你看到的请求头x-zse-96: 2.0_一段加密后的密文Rust 实现的三大亮点 双向加解密自带验签工具Rust 库不仅实现了encrypt_zse_v4加密签名还完整实现了逆运算decrypt_zse_v4解密验证位于 rs-zse-sign/src/decrypt.rs。配套的命令行入口 rs-zse-sign/src/main.rs 让你可以输入密文 → 自动识别并解密是调试签名问题的利器。⚡ JNI 桥接Android 零损耗调用rs-zse-sign/src/lib.rs 通过jni库导出Java_com_github_zly2006_zhihu_util_ZseRustSigner_encryptKotlin 侧一行external fun即可调用见 ZseSigner.kt。Rust 负责高性能字节运算Kotlin 负责业务组装各取所长。 单元测试守护正确性decrypt.rs 内置了三组测试ASCII 往返、中文 Unicode 往返、单块加解密互逆保证算法实现与网页端 JS 版本逐字节一致。在应用中的完整调用链知乎 App 发起 Web 请求时的完整链路非常清晰Kotlin 扩展函数signZhihuFetchRequest从 Cookie 中取出d_c0调用createZse96Header拼接原文并做 MD5通过 JNI 调用 Rust 的encrypt_zse_v4生成密文写入x-zse-96请求头请求发出。入口代码分布在 Utils.kt 和 WebviewComp.kt单元测试 ZhihuFetchSignatureTest.kt 会断言签名头以2.0_开头。自己动手编译运行 Rust 签名器克隆仓库即可在本地复现git clone https://gitcode.com/gh_mirrors/zh/zhihu-plus-plus cd zhihu-plus-plus/rs-zse-sign cargo run -- https://www.zhihu.com/api/v4/search_v3?qtest命令行工具会自动尝试解密若输入不是合法密文则原样输出加密结果。依赖只有一个jnicrate见 rs-zse-sign/Cargo.toml构建极快。模块路径速查模块路径Rust 签名/解密库rs-zse-sign/src/lib.rsRust 解密实现rs-zse-sign/src/decrypt.rsCLI 验证工具rs-zse-sign/src/main.rsKotlin 签名头组装shared/src/commonMain/kotlin/com/github/zly2006/zhihu/util/ZhihuFetchSignature.ktJNI 桥接入口shared/src/commonMain/kotlin/com/github/zly2006/zhihu/util/ZseSigner.kt逆向 JS 样本misc/zse-ck-v4-24df2abbfcb1b98cd5ce1b519f02eeabea28c83ac9d9ec2778dc5b03a3b8b710.js油猴脚本参考misc/tampermonkey.js总结知乎通过逆向知乎的zse-ck/v4JS 加密脚本拆解出原文拼装 → MD5 → 自研块加密 → 乱序表编码的完整 zse96 v2 签名流水线并用约 400 行 Rust 代码高保真复现了它。这套实现让一个开源第三方客户端突破了原生 API 的能力边界稳定调用网页端 99% 的接口——对于想学习接口逆向、密码学工程落地或 Rust 与 Android 互操作的同学来说rs-zse-sign/ 目录本身就是一份难得的教科书级案例。【免费下载链接】zhihu-plus-plusZhihu | 知乎: Ad-free, low cost, AI powered zhihu android 3rd-party client. 去广告、占用低、AI大模型的新时代知乎安卓端体验项目地址: https://gitcode.com/gh_mirrors/zh/zhihu-plus-plus创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
02
RELATED NEWS

相关资讯

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

03
WHY YAOTU

想打造同款高转化官网?

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

◈

场景化定制

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

◐

营销型架构

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

▲

全周期服务

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

免费获取你的建站方案

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