js逆向之——百度翻译接口

news/2024/9/21 1:49:23

逆向目标:

主页: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: 输入的中文

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/47367.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

Ocelot代理各个软件错误解决

代理identity{"DownstreamPathTemplate": "/{url}","DownstreamScheme": "https",//这里更改就行"DownstreamHostAndPorts": [{"Host": "localhost","Port": 7128}],"UpstreamPathTempl…

你还在手动操作仓库?这款 CLI 工具让你效率飙升300%!

前言 作为一名开发者,我经常会在 GitHub 和 Gitee 上 fork 各种项目。时间一长,这些仓库就会堆积如山,变成了“垃圾仓库”。每次打开代码托管平台,看到那些不再需要的仓库,我的强迫症就会发作。手动一个一个删除这些仓库不仅耗时耗力,还非常枯燥乏味。 为了彻底解决这个…

K8s高可用集群二进制部署-V1.20

一、前置知识点 1.1 生产环境部署K8s集群的两种方式 kubeadm Kubeadm是一个K8s部署工具,提供kubeadm init和kubeadm join,用于快速部署Kubernetes集群。 二进制包 从github下载发行版的二进制包,手动部署每个组件,组成Kubernetes集群。 小结:Kubeadm降低部署门槛,但屏蔽了…

openGauss MOT数据采集速度

MOT数据采集速度 该测试模拟海量物联网、云端或移动端接入的实时数据流,快速持续地把海量数据注入到数据库。本次测试涉及大量数据采集,具体如下:1000万行数据由500个线程发送,2000轮,每个insert命令有10条记录(行),每条记录占200字节。 客户端和数据库位于不同的机器上…

final关键词

被final修饰的方法不能被重写 被final修饰的变量变成常量不能进行二次赋值 被final修饰的对象地址值不能进行改变 但是对象中保存的数据可以改变 被final修饰的成员变量需要手动赋值且不能被二次赋值

类变量类型

1.局部变量:在方法、构造方法、语句块中定义的变量。其声明和初始化在方法中实现,在方法结束后自动销毁 2.成员变量:定义在类中,方法体之外。变量在创建对象时实例化。成员变量可被类中的方法、构造方法以及特定类的语句块访问。 3.类变量:定义在类中,方法体之外,但必须…

C# pythonnet(3)_Butter-worth低通滤波

Python代码如下import pandas as pd import numpy as np import matplotlib.pyplot as plt from scipy import signaldef lowpass_Butterworth(sig,fs,filter_cutoff=None,order=8,axis=0):Butter-worth低通滤波Inputs:sig --- numpy array, 输入时间序列数据fs --- int, 采样率…

C# pythonnet(1)_传感器数据清洗算法

Python代码如下import pandas as pd# 读取数据 data = pd.read_csv(data_row.csv)# 检查异常值 def detect_outliers(data):outliers = []for col in data.columns:q1 = data[col].quantile(0.25)q3 = data[col].quantile(0.75)iqr = q3 - q1lower_bound = q1 - 1.5 * iqrupper…