关联的帖子在这里
个人有个不太好的习惯,有人发这个解密游戏,非要搞出来不可,否则心里别扭!
第一个网站真实的播放地址,用的是 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 2023-08-22 18:01:22 +08:00
牛
|
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
yyf1234 2023-09-02 22:38:07 +08:00 via iPhone
@hsuehliuyang 这个算法挺复杂的,前 9 个字节是 3 固定➕6 随机,真正的密文是后面的,
每 16 个字节一组经过了两次变换,中间各种查表位运算,应该是凯撒密码的变种? 不得不说 wasm 让前端逆向难度上升了许多,跟汇编差不多,但指令比汇编少 |