有道翻译接口:有道翻译_文本、文档、网页、在线即时翻译
目录
1.发起请求观察接口
如图所示:
自己简单观察一下 可以知道请求头中没有加密 而在表单数据中的 sign 和 mysticTime 是加密的
再思考下 sign 是32位(试试后发现)可以猜测是MD5加密 但还不能确定
mysticTime 一看就是时间戳
该接口的响应值也是加密的 如图所示
所以我们整个解密过程就是:
1.先找到 参数sign 的加密位置 并逆向出来
2.请求翻译接口 获取请求返回的加密值
3.找到这加密值的位置 并逆向出来
2.解析sign的加密
2.1>.找到sign的加密位置
这里提供两个方法(经测试两种皆可实现)
1.xhr断点 跟栈一步一步分析
2.检索加密参数名:sign
该过程就不赘述了
通过我们的断点调试发现这 sign值生成过两次
如图 两次加密的e的值不同
所以我们回过头来再看请求的数据接口 是不是忽略了什么
果然 之前还请求了一个接口
而且里面也有sign 和 mysticTime 两个参数
而且根据请求顺序 也肯定是先请求了这个接口再请求webtranslate接口的
我们再来观察一下这接口的返回值 如图
里面有key和aesIv 虽然暂时还不清楚有什么用 但肯定之后会用到 先请求获取到再说
所以这个接口的sign是第一次生成的sign请求得到的
这个参数的加密方式比较简单 它就是该图片上的两个函数生成的
2.2>.解析sign的加密方式
发现最后就是MD5的加密方式 来 让我们通过自己的代码来完成
如图所示 函数运行过程已标出 过程比较简单 最后就是函数_ 来实现MD5的加密
又我们知道该函数运行过两次 每次加密的值不同 生成的sign值也不同
我们在实现pyhton调用时 就可以通过字典实时传入数据 来获取sign值并取出
如图所示
对应的js代码 如下
3.获取响应加密值并解析
3.1>.获取到响应的加密值
经过之前之前的解析 我们知道webtranslate的接口也是需要 sign和mysticTime 这两个加密参数
而我们又知道 sign的加密函数位置那重复运行了两次 正好与我们的请求的两个接口一样 所以我们可以判断这第二次运行得到的sign就是我们webtranslate接口的sign
现在我们去分析第二次的sign加密 发现其实这跟第一次的sign加密 唯一的区别就是 加密常数和时间戳不同 它加密的常数是 "Vy4EQ1uwPkUoqvcP1nIu6WiAjxFeA3Y3" 而这干好又是前一个数据接口的返回值
欧克 接下来就简单了 传入不同的参数来加密获取对应的sign值就行 如图所示
3.2>.解析加密值
首先还是得先找到数据的加密位置,这里也还是提供两个方法(经测试都没问题)
1.检索或hook-json.parse这个函数
因为这种返回值大部分都是以字典数据传出来的,而要实现这个肯定要用到json.paese函数
2.直接xhr断点,跟栈解析即可
过程就直接跳过了 我们来看加密函数
进入解密函数
我们分析下可知 这 e是加密值而 t和a 正好就是上一个接口的aesKey和aesIv的值 好接下来都对了
我们先把代码扣下来 通过node.js来运行
接下来我们来分析一下T函数的运行过程 进入函数
我们直接将之前的函数扣过来就行
解密没有问题 接下来就是实现我们的python调用
因为加密值每次都不同 我们这里也是将数据以字典格式传入 如图所示
最后最后就是 通过python来调用该文件
经过测试没有问题 以上就是全部
如果想实现翻译成其他语言的文字 则改变data数据即可
代码用途
本代码仅供学习、研究和交流使用,禁止用于任何商业用途或非法用途。使用者应对其行为负责,作者不对代码的滥用或不当使用承担任何责任。