免责声明
本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!
本文章未经许可禁止转载,禁止任何修改后二次传播,擅自使用本文讲解的技术而导致的任何意外,作者均不负责,若有侵权,请在微信公众号【小白逆向】联系作者立即删除!
前言
此次对某维语网站的电影信息进行逆向分析。其中将js算法改写为python类型的算法。
逆向目标-某维语影视网站
逆向首页:aHR0cHM6Ly9tcC5maWxpbXFpLmNuL3BhZ2VzL3Jlc291cmNlcy9yZXNvdXJjZXM=
需要wx小程序登录(可扫码登录)
参数逆向
-
打开调试页面,观察抓包记录
3.观察请求头(token,request-token)是动态更新的 每次更新页面会自动更新还,还有/api/resources?&t=是时间戳也是动态更新的 (这些就是我们逆向的目标)
js代码分析
.定位一下接口调用位置 填写地址刷新页面
往上看一下就知道调用的函数整体
我们看看这函数内容是什么,比如 控制台输入 e 打印结果( 也就是请求内容)
我们要分析的内容就这里面 比如 token ,request-token,和时间戳
如下图
继续我们看看其他调用的函数
下面是函数整体 看一下 他的返回值 return是 一个 三目表达式 大概意思是 (判断变量f是否是一个函数,如果是函数,则调用e函数并将h作为参数传递给它;如果不是函数,则调用e函数并将f和h作为参数传递给它)
下面代码可以看出函数形参是可以不指定的
打印看看arguments的内容
接着我们看看其他函数,一看就知道这函数里面字符都被混淆了
我们随便复制一个被混淆的字符控制台打印一下 果然是请求接口有关
如下图这里是接口中的时间戳有关
打印n的内容是如下图 request-token有关
打印w内容如下图是token有关
现在基本上位置和函数变量名都找到了
E是时间戳
Q=M是地址
n是request-token
w是token
先看看request-token生成用的函数a
现在看看 w是 生成token调用的函数 C,函数n,地址Q和时间戳E
目标明确了 现在 能找出 w调用所有的函数就行
如下图是调用C函数的函数内容
在这里打印出n的值都是我们需要的数据
函数中的A打印一下 看来是个request-token
被调用的函数t在上面如下图 在这个函数调用的函数是层次的 C,o,a 这些
如下图是C函数
函数a是生成token有关的函数
这些函数都在函数一个里面。
现在所有的函数都找到了可以创建个js文件把用到的函数放在里面
python 用 execjs 库运行js 生成 token,request-token,
时间戳可以直接用python time库来解决
time_stamp = int(time.time() * 1000)
2.由于调用的j函数太多 这里直接给js代码(地址aHR0cHM6Ly9tcC5maWxpbXFpLmNuLw==)
var I = function A(B, g) {
...
return void 0 === i ? (E = A["aXFxPe"](E), A["WgNtEM"][B] = E) : E = i, E
}
function get_request_token(A) {
...
return n
}
//////////////////////////token
function token(A, B, g) {
...
return o(A, B)
}
function Q_default(A, B, g) {
// return B ? g ? t(B, A) : function (A, B) {
// return p(t(A, B))
// }(B, A) : g ? F(A) : function (A) {
// return p(F(A))
// }(A)
return p(F(A))
}
function white(time_stamp) {
var request_token = get_request_token(99);
var sign = token(request_token, "https://mp.脱敏处理.cn/api", time_stamp);
return [request_token, sign]
}
js算法改写为python代码
基于js改写的算法 地址(L21wLmZpbGltcWkuY24=)
# **************************************
# --*-- coding: utf-8 --*--
# @Time : 2024-01-20
# @Author : white
# @FileName: a.py
# @Software: PyCharm
# **************************************
import execjs
import time
import requests
with open("签名.js", encoding="utf-8") as f:
js_file = f.read()
sign = execjs.compile(js_file)
time_stamp = int(time.time() * 1000)
sign_data = sign.call("white", str(time_stamp))
print(sign_data, time_stamp)
url = f"https://脱敏处理?&t={time_stamp}"
headers = {
"Host" : "地址",
"Connection" : "keep-alive",
"Content-Length" : "60",
"Pragma" : "no-cache",
"Cache-Control" : "no-cache",
"sec-ch-ua" : ""Google Chrome";v="107", "Chromium";v="107", "Not=A?Brand";v="24"",
"sec-ch-ua-mobile" : "?0",
"User-Agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36",
"content-type" : "application/x-www-form-urlencoded",
"openid" : "undefined",
"token" : sign_data[1],
"request-token" : sign_data[0],
"sec-ch-ua-platform": ""Windows"",
"Accept" : "*/*",
"Origin" : "https://地址",
"Sec-Fetch-Site" : "same-origin",
"Sec-Fetch-Mode" : "cors",
"Sec-Fetch-Dest" : "empty",
"Accept-Encoding" : "gzip, deflate, br",
"Accept-Language" : "zh-CN,zh;q=0.9",
# "Cookie" : "填写自己的"
}
body = {
"user_id": "填写自己的",
"unionid": "填写自己的",
"key" : "",
"page" : "3"
}
res = requests.post(url=url, headers=headers, data=body)
print(res.json())
成功示例图:(成功拿到数据)
相关代码已开源:
https://github.com/puboop/reverse/
原文始发于微信公众号(律图拟项):【逆向系列】27-某维语影视网站
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论