【求助】 关于某网站的web 逆向
本帖最后由 dmvip 于 2024-7-8 10:31 编辑目标站:http://m.fun.tv/focplay/?mid=331399&vid=1328447&malliance=fs62pxe
视频地址接口:http://papi.funshion.com/api/edgeips?ve=1.1.16&fudid=17198228882aa4a&cp=fs62pxe&infohash=0942CB03142194E9C587F78F5C216B4517994710&cl=mweb
经过测试发现 fudid 和infohash 这两个字段 是必填的
接下来就是获取这两个值了
查看源代码发现在这个地方调用 其中这个 fudid 是通过 cookie 获取的而 infohash是通过计算处理的
json:http://pm.funshion.com/v7/media/play/?id=1328447&ves=1&fudid=17198228882aa4a&cl=mweb&uc=231&user_id=0&malliance=fs62pxe
json 返回的infohash: "21A/KKUF0xAcbZJwXAQZ80zS6nFQaLmJr0EtEFwJTOC+ZavRiZYUotXzY="
来计算infohash
请问下大佬们我 现在通过http 请求发现 拿不到cookie 的FK 这个值
]
请问下 这个cookie 我通过代码 怎么获取 infohash这个值 通过Java 代码 怎么计算
fck是生成的
https://i.111666.best/image/4N9RRhdQVc1VJeQHJZw2LF.jpg
那个什么info加密位置都找到了 直接把js抠出来调用 好像使用IDM可以直接下载 本帖最后由 hebeijianke 于 2024-7-8 18:03 编辑
fudid 和 fck 是一个值,好像没什么意义,任意一个10位时间戳+随机的5个(数字和小写字母)就行,用python代码就是下面这样
import random
import time
def a():
# 生成一个介于 0 和 65535 之间的随机整数(包含0,不包含65536)
# 然后转换为十六进制字符串,并去掉开头的 '0x'
random_int = int((1 + random.random()) * 65535)
hex_str = hex(random_int).zfill(4)# 确保至少4位,不足则前面补0
return hex_str
# 获取当前时间戳(秒)
timestamp = int(time.time())
# 生成两个 a() 字符串,拼接后取前5个字符
e = str(timestamp) + (a() + a())[:5]
infohash 这个的生成机制没有研究通, 本帖最后由 FitContent 于 2024-7-9 00:10 编辑
这是抠出来的 js 代码,用于计算 `infohash` 值,楼主可以让 AI 转换成等价的 `java` 代码,我并没有 `java` 环境。
```js
function v(e, t) {
// document.mozEcName 的值似乎固定
var i = ['9b0', 'f41', '953', 'a42'],
o = 256,
n = ,
r = i;
for (var s = 0, d = r.length; d > s; s++)
n.substr(r.length - 1))] = parseInt(r.substr(0, r.length - 1), 16);
return {
z1: (e * n + t * n) % o,
z2: (e * n + t * n) % o
}
}
function m(e) {
return String.fromCharCode(e)
}
function f(e) {
for (var t = "", i = 0; i < e.length; ) {
var o = e.charCodeAt(i++),
n = e.charCodeAt(i++);
if (t += m(v(o, n).z1),
t += m(v(o, n).z2),
i == e.length - 1) {
t += m(e.charCodeAt(i));
break
}
}
return t
}
function c(e) {
// 将原本的代码复制给 GPT 可以得出
return atob(e);
};
function u(e) {
var t = "",
i = "",
o = "";
return 28 == e.length && e.lastIndexOf("0") == e.length - 1 ? (t = e.substr(0, 27) + "=",
i = c(t),
o = f(i),
y(o)) : (t = e.substr(2, e.length - 2),
i = c(t),
f(i))
}
function get_result(e) {
return {
hashid: u(e.infohash).substr(0, 40),
token: u(e.token),
}
}
// 这里根据需要填写解密的数据
const arg = {
"infohash": "21tMVk2rHWHLeD+NqFm5iTaT2NRAsuI0CuC+vaherSMGFPf+95uLtzRDY=",
"token": "21lliVp6JsGlWUXXQntn00V6QRKglwVUHG3IBO8pOsuWyzOHti6azbz/GVGQ2iW09/llgwYR0Bh+4=",
};
console.log(get_result(arg));
/* 输出{
hashid: '0942CB03142194E9C587F78F5C216B4517994710',
token: '2037FD2A018CF983052ED93240B21830A4AFC057_mweb_1720453952'
}
*/
``` FitContent 发表于 2024-7-9 00:07
这是抠出来的 js 代码,用于计算 `infohash` 值,楼主可以让 AI 转换成等价的 `java` 代码,我并没有 ` ...
document.mozEcName这个是通过2个mcore_v12_xxxxxxxx.js脚本push进去的,可以通过反混淆mcore_v12_xxxxxxxx.js脚本,提取出来合并成列表模式使用,一个很奇怪的问题是,我用python代码实现了,但是提取出的document.mozEcName最新列表不能正确解码,倒数第二次的却能解码。 hebeijianke 发表于 2024-7-9 13:56
document.mozEcName这个是通过2个mcore_v12_xxxxxxxx.js脚本push进去的,可以通过反混淆mcore_v12_xxxxxx ...
似乎这个网站的 `document.mozEcName` 会变化,今天的值是 `[ "830", "b91", "243", "872" ]`,即便清空浏览器中关于该网站缓存数据、换个浏览器访问都是这样的结果。
用 python 提取出来之后,可以先将提取出来的值放入本地的 JS 中进行测试,同时对照网页端的结果,看看是否算法变动还是怎么个情况。
我试过用上述的 `document.mozEcName` 用于计算(就是之前提交的脚本),发现没有问题,可以正常解码。不清楚你是怎么做的,可以对照网页端进行调试。
FitContent 发表于 2024-7-9 22:00
似乎这个网站的 `document.mozEcName` 会变化,今天的值是 `[ "830", "b91", "243", "872" ]`, ...
document.mozEcName每隔一段时间会变化,我使用python把2个mcore_v12_xxxxxxxx.js读取出来,反混淆后,能提取出来,这个好像是手机端网页特有的,
PC端的网页里面也有段代码,
var ue = function(t, e) {
return {
z1: (230 * t + 255 * e) % 256,
z2: (137 * t + 37 * e) % 256
}
这段代码不同的时段,t和e的参数也会变化
参数正确才能正确解码
页:
[1]