js混淆
- js混淆:
- 将js核心的相关代码进行变相加密, 加密后的数据就是js混淆之后的结果。
- js反混淆:
- 反混淆的线上工具(不理想, 不方便调试)
- 浏览器自带的反混淆工具设置
- 开发者工具的 settings -> Sources -> 第一项勾选上
- 进行关键字的全局搜索 -> VMxx (就是反混淆后的代码)
空中网逆向分析案例
在针对空中网进行逆向分析后 (分析反混淆后 的代码)
将加密对应的js的进行了拷贝
- 发现了一个data[‘dc’]不知道是什么, 后续处理:
- 先全局搜索,(让页面刷新,然后再登录一次 ,获取页面完整全部的数据包) 结果太多不方便定位
- 通过search搜索 data[‘dc’] 依然没有结果 分析可能是通过请求 拿到的 data[‘dc’]
- 通过抓包工具 看每个包的Response 看哪个是返回一串字符串
- 最后找到该包 后续再单独请求 获取到加密的最后一个参数 data[‘dc’]
import re
import execjs
import requests
url = 'https://sso.kongzhong.com/ajaxLogin?j=j&jsonp=j&service=https://passport.kongzhong.com/&_=1632367795997'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36',
'Referer': 'https://passport.kongzhong.com/',
}
dc = requests.get(url=url, headers=headers).content.decode('utf-8')
# print(dc)
ex = 'dc":"(.*?)","kzmsg"'
dc = re.findall(ex, dc)[0] # 获取 密钥
print(dc)
node = execjs.get()
pwd = '123456789'
ctx = node.compile(open('./空中网.js', encoding='utf-8').read())
funcName = 'getPwd("{0}","{1}")'.format(pwd, dc)
password = ctx.eval(funcName)
print(password)