- 简介
- 分析
- 扣代码(心态崩)
- 成果
你问我Js逆向是什么?请看:👇👇👇
分析网站:aHR0cHM6Ly9tYXRjaC55dWFucmVueHVlLmNvbS9tYXRjaC8x(base64解密)
-
打开调式,发现弹出无限Debug,有几种跳过方法就不过多说明,我这里采用最简单的方法直接在debug行号下右键,点击不在此处暂停,就能跳过debug
-
跳过之后刷新一下页面,找到数据接口,有一个m参数,毫无疑问,我们需要逆向的就是它了
-
全局搜索m,可惜找不到,从题目标题大概可以确定代码都混淆过了
-
我们直接在启动堆栈里面找调用的js,前两个都是jquery,所以我们直接从第三个开始入手
-
确实是混淆,我们在控制台打印一下_0x2268f9,看看这是个啥玩意
-
打开控制台,又一个debug,老样子行号右键,一律跳过!
-
跳过之后,继续打印,结果是一个时间戳
-
再往下看_0x57feae,里面调用了oo0O0函数,点进去看看
-
找到oo0O0函数,代码无法格式化,利用格式化工具美化一下
-
继续往下看,打印所有参数,发现_0x5d83a3[‘\x6d’]和M参数很接近,会不会就是要破解的M呢?
激动的心颤抖的手,看到代码就全身发抖 接下来就是最最最关键的扣代码环节,也是很关键的部分,要是扣不好,前面白费功夫
-
上面已经找到oo0O0函数,经过美化,我们得到:
function oo0O0(mw) { window.b = ''; for (var i = 0, len = window.a.length; i > ( - 0x2 * C & 0x6)) : 0x0) { W = m['indexOf'](W) } return A }; var t = function(w, m) { var T = [], A = 0x0, C, b = '', W = ''; w = Y(w); for (var R = 0x0, v = w['length']; R 16) + (c >> 16); return (b > ((a % 4) * 8 + 4)) & 15) + b.charAt((c[a >> 2] >> ((a % 4) * 8)) & 15) } return d } function binl2b64(d) { var c = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; var f = ""; for (var b = 0; b > 2] >> 8 * (b % 4)) & 255) 2] >> 8 * ((b + 1) % 4)) & 255) 2] >> 8 * ((b + 2) % 4)) & 255); for (var a = 0; a d.length * 32) { f += b64pad } else { f += c.charAt((e >> 6 * (3 - a)) & 63) } } } return f }; window.f = hex_md5(mwqqppz)
-
很容易理解,这里就是把 mwqqppz 替换成了 mw, 通过eval执行hex_md5(mw), 最后赋值给 window.f
-
我们将window.f 稍微改一下,就能得到m了
function get_param(ts){ var timestamp = parseInt(ts) var mwqqppz = timestamp + 100000000 var m = hex_md5(mwqqppz.toString()) + '丨' + mwqqppz / 1000; return m }
-
成功获取m参数,对比网页一致
-
py中导入execjs运行Js文件
pip install execjs
import requests import time import execjs def get_param(): ts = str(int(time.time())) + "000" with open('jm.js','r',encoding='utf8') as f: js = f.read() param = execjs.compile(js).call('get_param',ts) # response = requests.get(url=self.jm_url, params=params) # param = response.text print(param) return param
-
请求接口,获取数据
def get_data(page, param): headers = { "User-Agent": "yuanrenxue.project", } params = { "page": page, "m": param, } response = requests.get(url=self.base_url, params=params, headers=headers).json() if response["status"] == "1": data = response["data"] values = [i["value"] for i in data] print(values) return values
-
计算结果,得到平均数
import numpy as np #导入numpy计算 mean def mean(): value = [] for i in range(1, 6): param = get_param() value = get_data(page=i, param=param) value.append(value) result = np.mean(total_value) print(result)
点关注不迷路,本文若对你有帮助,烦请三连支持一下 ❤️❤️❤️ 各位的支持和认可就是我最大的动力❤️❤️❤️