
关联的帖子在这里
个人有个不太好的习惯,有人发这个解密游戏,非要搞出来不可,否则心里别扭!
第一个网站真实的播放地址,用的是 wasm 这种解密方式,研究了半天,最后找不到入口函数
就这样放弃?不,我默默的拿出来自己曾经看到过的 RPC 框架
具体步骤如下:
1 、RPC 框架下载地址
https://pan.baidu.com/s/19TyURN-wpqGUYBy1P025ew?pwd=6mu3
解压缩后,如果是 windows ,那就 bat 直接启动即可,注意需要 java 环境
2 、随便打开一个视频网页,F12 ,然后添加 XHR 断点 ,然后去刷新网页,不出意外会被断住
https://api.yangtu.link/v2/jx1

然后在控制台 console 输入下面的代码
(function() { 'use strict'; // Your code here... var _mscript=document.createElement("script") _mscript.src="https://sekiro.iinti.cn/sekiro-doc/assets/sekiro_web_client.js" document.body.appendChild(_mscript); function sek_start(){ function guid() { function S4() { return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1); } return (S4() + S4() + "-" + S4() + "-" + S4() + "-" + S4() + "-" + S4() + S4() + S4()); } var client = new SekiroClient("ws://127.0.0.1:5620/business-demo/register?group=test&clientId=" + guid()); client.registerAction("ojbk", async function (request, resolve, reject) { try { var e=request['url'] const s = window.encrypt(`${e}|${Math.floor(Date.now() / 1e3)}`); const n = await Ut(`/v2/jx1`, s, "POST"); if (n.code == 200) { var sss = window.decrypt(n.url); } var jsOnResult= {url:sss} console.log(JSON.stringify(jsonResult)); resolve(JSON.stringify(jsonResult)); } catch (e) { reject("error: " + e); } }); } setTimeout(sek_start,2000) })(); 然后把断点取消掉,直接点放行,注意网页别关闭

3 、直接就拿到真实地址了
import requests r=requests.Session() pdata={ 'group':'test', 'action':'ojbk', 'url':'https://v.qq.com/x/cover/mzc002003rpvd4j/w0046a3hh1v.html' } respOnse=requests.get("http://127.0.0.1:5620/business-demo/invoke",params=pdata) print(response.text) 
4 、进阶的玩法
把框架部署到服务器,那个 F12 别关,就可以一直薅它的 API 接口了,
上面 js 脚本也可通过别的方式注入,例如油猴之类

所谓的最强加密播放器也不是没办法破解
1 danbai PRO 牛 |
2 MeMoDiv 2023-08-22 18:21:12 +08:00 围观吃瓜 |
3 hsuehly 2023-08-22 18:32:57 +08:00 如果上 debugger 断点你怎么办 |
4 kuanat 2023-08-22 19:44:39 +08:00 RPC 对于没有混淆的代码来说很好用。 @hsuehliuyang 过 debugger 方法太多了,浏览器内的话方法重载、条件断点、源文件 overrride 都行。浏览器之外的话,重编译一个修改了 js 引擎 debugger 方法的版本。 |
5 gzlock 2023-08-22 20:08:47 +08:00 @hsuehliuyang #3 debugger 的断点功能 在开发者工具里可以禁用的 以 edge 为例,最右的按钮点下去后,debugger 的断点功能就废了 https://dd.ci/file/69df3e23a66ebaa496ee0.png |
6 bigha OP @hsuehliuyang 上面两个大佬都说了,过 debugger 的方法确实很多,这里就总结下遇到的各种类型吧 1 、时间类型,就是判断你打开 F12 时间,如果停留几秒,马上关闭你浏览器 解决:这种调试时直接修改下时间就能解决 2 、代码里穿插各种的 debugger ,各种乱入 解决:js 全局替换掉 debugger 关键字 ,然后源文件 overrride 3 、打开 F12 就开始疯狂往内存里写东西,然后让你浏览器卡死 解决:从加载 js 代码就开始调试,慢慢找到相关代码,然后按照上面大佬说的搞掉 4 、常规的 debugger hook 方法 ``` Function.prototype.constructor_ = Function.prototype.constructor; Function.prototype.cOnstructor= function (a) { if(a == "debugger") { return function (){}; } return Function.prototype.constructor_(a); }; ``` |
8 bigha OP @hsuehliuyang 估计后端有啥限制,目测是请求 10 次就不行了 用下面这个代码替换掉 [https://img.huxiucdn.com/article/content/202308/19/230935899090.js] https://code.ping8.top/KOJuh-yUAZc/raw 然后随便打开个播放页,用油猴让网页 30 秒自动刷新一次即可 |
9 chancat 2023-08-23 16:26:59 +08:00 via Android 看看干嘛的 |
10 PlG5sBkXD1ziLeGB 2023-09-02 22:38:07 +08:00 via iPhone @hsuehliuyang 这个算法挺复杂的,前 9 个字节是 3 固定6 随机,真正的密文是后面的, 每 16 个字节一组经过了两次变换,中间各种查表位运算,应该是凯撒密码的变种? 不得不说 wasm 让前端逆向难度上升了许多,跟汇编差不多,但指令比汇编少 |