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: 输入的中文
posted @   python小李  阅读(184)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示