js逆向实战之weibotop.cn返回数据解密
1.爬虫基础内容回顾2.js逆向基础知识3.python执行JavaScript代码出现编码问题的解决方案4.初识JavaScript逆向——以网易云音乐和招标网站为例5.JavaScript逆向之md5算法6.JavaScript逆向之AES和DES加解密7.JavaScript逆向之RSA算法8.JavaScript逆向之手撸ob混淆9.JavaScript逆向之有道翻译加解密全过程解析10.JavaScript逆向之iwencai请求头参数加密过程解析11.JavaScript逆向之七麦数据实战12.JavaScript逆向之代码补环境(以iwencai为例)13.js逆向实战之微信公众平台pwd参数解密14.js逆向实战之一品威客signature参数解密15.js逆向实战之莫莫铺子sign参数解密16.js逆向实战之智通财经网token参数解密17.js逆向实战之喜马拉雅Xm-Sign参数解密18.js逆向实战之中国男子篮球职业联赛官方网站返回数据解密19.js逆向实战之企名片返回数据解密
20.js逆向实战之weibotop.cn返回数据解密
21.js逆向实战之集思录登录参数加密解析22.js逆向实战之数位观察响应数据解密23.js逆向实战之某证信Accept-Enckey参数加密解析24.js逆向实战之Bitcoin浏览器交易x-apikey参数加密逻辑25.js逆向实战之烯牛数据请求参数加密和返回数据解密26.js逆向实战之酷我音乐请求参数reqId加密逻辑27.js逆向实战之某市场监管公告服务平台返回数据解密28.js逆向实战之某乐网登录参数pwd加密29.js逆向实战之某天下登陆参数pwd加密逻辑30.js逆向实战之某网游登录参数password加密31.js逆向实战之某古加响应数解密逻辑32.js逆向实战之某数据平台响应数解密逻辑33.js逆向实战之某二手平台请求参数加密逻辑34.js逆向实战之某预约票网站请求参数加密35.js逆向实战之某监管平台请求参数加密36.js逆向实战之某某查响应数据解密url:https://www.weibotop.cn/2.0/
分析过程
-
打开开发者工具,页面直接进入了debugger模式。
想要跳过这个debugger模式,可以在debugger这行代码的前面右键,选择never pause here
。
重新刷新界面,就不会进入debugger模式了。抓流量包。
主要关注currentitems
,它的响应数据是加密字符串,需要找到其的解密过程。 -
由于还是寻找响应数据的解密过程,经过前面两篇文章,立马去搜索
interceptors
,但是很遗憾,这里没有。
这个方法行不通,只能搜索url关键字了,只有一条记录。
-
定位到该函数,上下文看看,就看到了加密和解密的地方。
-
是老朋友了,AES算法,主要需要找到
key
,iv
和mode
,在解密的地方打断点,刷新界面。
单步调试。
i = t = String(t)
,把加密的字符串赋值给i
。
o = n.enc.Base64.parse(i)
,对i
进行base64解码,赋值给o
。
r = a
,a
在上面有定义,是通过一个固定字符串计算SHA1值之后截取前32位得到,是一个固定值。
下面就是AES解密,o
是需要解密的字符串,r
是key,mode
是ECB
,iv
不需要。
n.AES.decrypt({
ciphertext: o
}, r, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
}).toString(CryptoJS.enc.Utf8)
- 编写python代码,开始爬取数据,但是这里没成功,经过不断的调试,是python的base64解码和JS中的base64解码的结果不一致导致,暂时没找到解决办法,所以只能采用python调用js代码的方式实现。
var CryptoJS = require("crypto-js");
let s = CryptoJS.SHA1(CryptoJS.enc.Utf8.parse("tSdGtmwh49BcR1irt18mxG41dGsBuGKS"))
, a = CryptoJS.enc.Hex.parse(s.toString(CryptoJS.enc.Hex).substr(0, 32));
function h(t) {
let e = (i = t = String(t),
o = CryptoJS.enc.Base64.parse(i),
r = a,
CryptoJS.AES.decrypt({
ciphertext: o
}, r, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
}).toString(CryptoJS.enc.Utf8));
var i, o, r;
return JSON.parse(e)
}
from functools import partial # 锁定参数
import subprocess
subprocess.Popen = partial(subprocess.Popen, encoding="utf-8")
import requests
import execjs
url = "https://api.weibotop.cn/currentitems"
resp = requests.get(url, headers={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
"AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36"})
mi_str = resp.text
# print(mi_str)
file_object = open("解密.js", mode="r")
exec_code = file_object.read()
exec_js = execjs.compile(exec_code)
call = exec_js.call("h", mi_str)
print(call)
运行结果如下:
成功获取到数据。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通