逆向JS小案例 之 百度翻译
分析
- 打开百度翻译
分析流程
- 将浏览器切换至手机端,这样查看请求的参数可能会较少,点击下图中的按钮:
- 查看请求接口
- 查看请求参数是否有变化
图一:
图二:
经过分析,我们发现这里有两个参数发生变化,经过推断,这里的参数可能是使用js生成的,所以我们这里要对接口进行分析,破解,得到这里的值
分析结果
分析目标 | 分析结果 |
---|---|
请求URL分析 | https://fanyi.baidu.com/basetrans |
请求方式分析 | POST |
请求参数分析 | 参看请求参数分析 |
请求头分析 | 参看请求头分析 |
请求参数分析
参数KEY | 分析结果 |
---|---|
query | 翻译单词(变化) |
from | en(固定值不变) |
to | zh(固定值不变) |
token | 6f5c83b84d69ad3633abdf18abcb030d(经过请求测试,我们发现可以为固定值) |
sign | 54706.276099 |
JS 逆向流程
注意: 在js逆向中,不是你要精通js才可以js逆向,你要懂一点js就可以做逆向,重要的逆向思维,对问题的思考方式
chrome 调试技巧
- search 打开查询面板
- 查询面板可以通过关键字查找所有出现关键字地方的代码
- 点击跟踪代码并且可以把代码格式化
- 对格式化的代码进行设置断点
- 鼠标光标移动到上面可以查看当前运行代码变量值,函数原始代码地方等等
JS 逆向流程
- 通过关键词切入到代码中,切入到发送请求的代码行,通过请求的url中提取关键字
- 在发送请求的代码添加断点,并且触发发送请求,确认寻找的代码是否正确
- 往上逆向,寻找目标参数以及生成逻辑
- 利用js2py模拟执行生成逻辑获取想要的内容
根据逆向流程查找我们所需的js代码
- 搜索关键字
- 跟进代码,分析AJAX请求
- 查找我们需要的值
- 准确的找到我们需要的值
- 复制我们需要的js代码
- 代码如下:
1 | function a(r) { |
编写爬虫代码
- 写代码之前,我们需要先了解一下
js2py
这个模块 js2py
模块的使用我会放在主要教程中,接下来我们就不浪费时间了,直接开始。
1 | import requests |
注意
- 此时我们运行代码会报错误,会讲我们缺少
r
的值
解决办法:回到浏览器,我们查找
r
的值,并将生成r
的值的函数,加入到我们之前创建的js
文件中,放在G
函数的上面
- 生成r的代码,如下所示
1 | function n(r, o) { |
我们重新运行代码,发现又会遇到一个错误,说是缺少
i
的值,所以我们的解决办法还是,继续进行js
逆向,查找i的值逆向分析
- 我们回到
function a()
中,找到需要使用i
值的地方,打上断点
- 打上断点之后刷新一下页面,我们再次将鼠标放在
i
上,我们会看到一个浮点字符串,此时我们不确定i
的值是否是变化的,所以我们换一个翻译的单词,刷新页面,再次查看i
的值,我们发现i
的值是固定的,所以我们可以在代码中,直接定义一个固定的i
值.
我们在自定义的 js 代码最上面一行写入:
1 | var i = "320305.131321201" |