js逆向破解百度翻译

破解百度翻译

1. 首先要分析浏览器是怎么发送请求的。

图片

2. 构造请求

找到关键请求以后,就要分析请求,而后去构造请求。分析请求有一下几个要素,url,请求方法,请求头,请求参数。html

图片

请求参数有七个,能够经过反复请求而后比较的方法得出from,to是表示翻译语言的,transtype,simple_means_flags这两个的值没有变。最关键的是query,sign,token参数,其中query是要查询的单词字符串。signtoken须要分析。python

3. 关键参数token的分析

请求的参数有三个来源ajax

  1. 第一个请求返回的页面html源码中浏览器

  2. 前面的某次请求返回的数据cookie

  3. 请求以前由js动态生成ide

打开百度翻译页面源码,复制上面请求中token的值而后搜索,果真在页面源码中发现了token的值。函数

图片

4. 关键参数sign的分析

通过分析,发现sign的值随着单词的不一样而不一样,而且由于当前请求是ajax的,因此sign必定是js动态生成的。工具

js逆向的三种方法测试

  1. 经过页面元素触发函数进行定位请求执行js代码url

  2. 经过开发者调试工具network选项中的initiator栏进行定位

  3. 经过搜索参数名进行定位

我把sign搜它出来image.png发现sign函数image.png去这是js看下

图片

打断点,回车,运行下js

图片

最后一步一步来调试

图片

很快找到了来源

图片

发现处理的方法就是e,n两个函数,经过PyExecJS模块进行js测试。由于这js函数看不懂,不建议改写成python函数,将这两段函数代码复制到文本中,保存为baidu.js文件

5. PyExecJS模块

PyExecJS是一个实现经过python执行js代码的库。

安装:

$ pip install PyExecJS

PyExecJS入门

图片

直接运行e,n两个函数

图片

分析js代码,发现其中有个window的变量,原来window没定义

图片

不知道它是啥,打断点,看下啥东西

图片

window[gbk] ,window不就是一个变量来的,去看下local变量

图片

local没有,看global

图片

在window中寻找gbk

图片

在js先用"320305.131321201" 代替window[l],运行

图片

这就是我找了很久的的sign

5. 分析window[l]

是否是每一个单词的sign都是同样的呢?

尝试到html页面中去查找,发现是一个在html页面中定义的变量。

图片

这是个固定值,能够直接写成常量,也能够取页面获取。

6. 代码编写

思路

  • 利用正则将页面的token拿下来

  • window[gbk]是固定的,封装函数来获得sign

  • 这里有个神坑:发现页面请求了两次,第一次的页面token不是合法token

  • 用seesion来访问保存cookie这样成功率高点


image.png声明:本文只作技术交流,不提供源码,若有侵权,请告知删除,谢谢。

image.png

一直原创,从未转载

请认准我,将我置标

图片


转发,好看支持一下,感谢

相关文章
相关标签/搜索