[toc]
js 逆向
- 寻找关键点 -> 网络请求的一霎那
- 对网络请求之前的代码进行分析
- 比较难的js代码可以利用 js2py 让他去执行
-
url
https://logindict.youdao.com/login/acc/login
-
请求方式
POST
-
请求参数
'app': 'web', 'tp': 'urstoken', 'cf': 3, 'fr': 1, 'product': 'DICT', 'type': 1, 'um': 'true', 'username': username, 'password': context.aaa, 'ru': 'http://dict.youdao.com/search?q=as&tab=#keyfrom=${keyfrom}'
-
请求头
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'
- 登录接口和请求方式
- 请求参数
- 找到对应的函数,并对js进行优化输出
- 找到加密的方法,并打上断点进行调试
- 找出
hex_md5
对应的js文件,保存下来
# 导入使用的模块
import js2py
import requests
# 请求的url接口地址
url = 'https://logindict.youdao.com/login/acc/login'
# 利用js2py构造一个上下文中间变量
context = js2py.EvalJs()
# 需要登录的用户名和密码
username = 'username@163.com'
password = 'pasword'
# 需要执行加密的已下载的js文件
with open('logincom.js', 'r') as f:
context.execute(f.read())
# 把密码放在js中间变量
context.password = password
# 需要执行的js代码,这里我自己改了,感觉没有必要用那么多参数,里面的aaa我任意定义的
js_string = '''
var aaa = hex_md5(password);
'''
# print(js_string)
context.execute(js_string)
# 打印测试加密后的密码数据
print(context.aaa)
# 请求参数(把构造后的完整的请求参数放到data字典中去)
data = {
'app': 'web',
'tp': 'urstoken',
'cf': 3,
'fr': 1,
'product': 'DICT',
'type': 1,
'um': 'true',
'username': username,
'password': context.aaa,
'ru': 'http://dict.youdao.com/search?q=as&tab=#keyfrom=${keyfrom}'
}
# 设置请求头,模拟浏览器
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'
}
response = requests.post(url, headers=headers, data=data)
# 把解析后的数据保存在youdao.html
with open('youdao.html', 'wb') as f:
f.write(response.content)