js逆向之——百度翻译接口
逆向目标:
主页:https://fanyi.baidu.com/translate?aldtype=16047&query=&keyfrom=baidu&smartresult=dict&lang=auto2zh&ext_channel=Aldtype#auto/zh/
接口URL:https://fanyi.baidu.com/v2transapi?from=en&to=zh
接口参数:ts、token、sign
逆向过程:
-
1.进入网址
-
2.F12打开开发者工具,点击网络
-
3.输入翻译内容、点击立即翻译
-
4.因为百度翻译为局部刷新,是Ajax请求,我们点击Fetch/XHR请求,找寻翻译的接口,最终我们发现接口为v2transapi这个名称
- 5.发现接口为post请求,观察表单数据:
from:en 这个是区分翻译的是中文还是英文
to:zh 这个是区分翻译的是中文还是英文
query: 这个是要翻译的内容
transtype:realtime 这个是固定格式
simple_means_flag:3 这个是固定格式
sign: 这个是加密的内容
token: 这个是加密的内容
domain:common 这个是固定格式
ts: 这是加密的内容
获取参数的加密
- token 由于token的值每次在一定时间内请求是固定的,所以我们尝试在网页源代码里搜索一下token的值
发现token的值在网页源代码里面,我们只要获得网页源码里面的token值就可以,但是token值在script标签里,我们点击网页,使用正则获得token的值,或者直接复制,将token的值写死。这里我使用的是selenium自动化获取token的值,但不知为什么,每次token的值都会发生变化,导致请求翻译接口失败。最后我将token的值写死了才请求成功。
- sign参数加密的获取过程
全局搜索(ctrl+shift+f)
使用全局搜索():搜索sign:这个参数 如图下
在每个文件夹里进行搜索sign: 分别打上断点 重新发起请求,观察是否断住
最终找到的加密位置如下
通过观察sign是由b函数里传入一个参数e生成的
通过控制台打印,发现e的就是我们要翻译的内容
接下来我们分析b函数,鼠标选中b函数,我们直接进去b函数里观察b函数的方法,通过移除第一次打的断点,我们将b函数的方法打住断点,重新发起请求,如图
通过控制台打印发现b函数里面传入的是我们要翻译的内容
分析b函数的方法,我们发现返回值就是sign值,如图所示
- 接下来就是扣代码环节:
发现r未定义,我们该怎么做呢?回到源代码处,在报错的地方打断点,分析r的变化
第一的r的值
第二次r的值
我们发现r的值不会发生变化,所以我们可以在js代码里直接定义r的值
再次运行,发现n没有被定义
老方法:直接去网页源代码里找到报错地方,打断点进行分析
我们发现n是一个方法,直接跳转,将n函数全部扣下来,在js运行,发现没有报错,结果也出来了!
到这里,我们的sign参数的加密过程也已经还原了! - 最后一个参数是ts。有经验的人一眼发现,ts就是13位时间戳,所以我们直接模拟请求的时间,直接开始向目标URL发起请求
到此为止,我们在python中调用js文件需要使用execjs模块,具体调用方法我已经写出来了,可以自行观看。
返回的json格式由于我的懒惰,我直接使用jsonpath进行提取。
最后的结果已经出来了。当然,我们的程序还不是特别完整,我们还可以继续完善。
判断是否输入的是英文还是中文,使用编码判断,如果长度为1:输入的英文;如果长度为3: 输入的中文
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)