Created
November 13, 2024 06:45
-
-
Save esterTion/2e52dd4e2047c5ffc69a2f783013d01e to your computer and use it in GitHub Desktop.
Revisions
-
esterTion created this gist
Nov 13, 2024 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,52 @@ ### 触发条件: * 不含`mobi_app=iphone_comic`或`mobi_app=android_comic`(触发web加密),或 * `version`在`6.8.5`及以上(触发app加密) ### 额外需求: app加密时需要发送`m1`参数,参数不是有效的加密参数时,返回加密域名下未经加密处理的响应 ### 格式粗看: 文件头为 ```C++ bool encrypted long dataSize ``` `encrypted == false`: `dataSize`为0,响应去除5字节文件头即为图片未加密内容 `encrypted == true`: 文件头后跟随`dataSize`的内容,后跟随 aes密钥(web加密)或JWK EC公钥(app加密) ### 解密流程(web) 提取图片地址的`cpx`参数并base64解码,得到的数据中,0x1开始0x20长度数据为AES key,0x3c开始0x10长度的数据为AES IV, 对响应的内容部分前`0x5010`字节进行AES-256-CBC解密(多出来的0x10为AES padding,正常处理会自动去除) 解密得到的内容和`0x5010`后的未加密部分拼接,得到原始图片 ### 解密流程(app)(未完成) ????? 获得 ??? key 和 IV 对响应的内容部分前`0x6410`字节进行 ??? 解密 解密得到的内容和`0x5010`后的未加密部分拼接,得到原始图片 ### 额外笔记 流程逻辑来自 https://s1.hdslb.com/bfs/manga-static/manga-pc/static/js/bili.599a7faf18.js web部分为对密文 `CEpQTVYaSwsFR1dLLSQ8QyojLUVIRwUKS1c6QkRSXDFNSwsHR1cyWlFDWV88QkUFEUZbMl1NQVg8EkBDW0hTHk8IAENVTCgkPUonJydDRU8AGEpbNF1NWlk0SU8IAkNVNV9RQlBSOEhDCBlDSTNRQ15RNBcU` base64解码后,使用密钥 `shaolaijiemilaoniangdedaima` 进行循环字符异或 (haha very funny) 得到aes配置 ``` { "1":{"al":"AES-CBC","ak":[1,33],"an":[60,76],"at":[0,20]}, "2":{"al":"AES-CBC","ak":[1,33],"an":[60,76],"at":[0,20]} } ``` 在web加密配置旁边疑似有一个相似流程的配置获取函数,但是此函数内的所有变量都不存在 由于flutter反编译基本等于不存在,故而app加密逻辑若是无法推算出来,基本无法还原其逻辑 (可以猜想app和web类似,也是使用aes,但是key和iv从何而来,以及api发送的`m1`有何作用,无从知晓) ### 目前如何应对 * 现阶段只要带上`mobi_app=iphone_comic`即可获得未加密图片,在阿B切断所有旧版本app的使用前,这条路应该不会出问题 * 至于切断时间是一个月,一个季度,一年,或者永远,就要看漫画部的营收了(这么看来应该会很快,毕竟漫画快倒闭了) * web加密逻辑已经完全理解,可以正常通过web渠道拿到加密流程的图片并正常解密,并且即使更换流程逻辑应该也不难跟进修改