type
status
date
slug
summary
tags
category
icon
password
今天给大家带来的是【js逆向爬虫】-有道翻译js逆向实战
【js逆向爬虫】-有道翻译js逆向实战
今天给大家带来的是【js逆向爬虫】-有道翻译js逆向实战
网页分析

打开网页,随意输入几个单词,发现网页不是静态加载的。不着急,我们换方式,抓包。

通过查找,我们在Payload里面发现了输入的需要翻译的信息,比如我这里的“人民”,然后在Preview里面发现了返回的翻译信息,这里我没有上传图片,接着继续看Headers里面的数据,通过观察,会发现网页是post请求,大概的思路就已经出来了,先尝试写一下。
初步代码实现
如果请求携带的参数都已经添加了(如headers,cookies,data等),但仍然报错,建议重新抓取请求。我在这一点上也遇到了相似的问题,后来我换用了“生活”一词作为参数。尝试变换表达方式,寻找意思相近的词语,可能会解决问题。
例如:
- 尝试不同的参数名称或者参数值。
- 尝试调整请求顺序或请求方法。
- 检查服务器响应的信息,可能会提供更多的错误细节。
第一步基本上就成功了,看一下返回后的结果:

可是当我们想更换一个单词的时候,系统又会报错,比如,我这里换了太阳:

那怎么办呢?我们开始第二步,也就是js逆向
逆向查找参数
通过对上面的代码进行分析,我们可以发现,"salt"、"sign"、"lts"、"bv"这四个参数的生成方式尚不明确。为了确定这些参数的来源和生成逻辑,我们需要在浏览器开发者工具中打开Initiator下的JavaScript代码,逐一查找和定位相关代码。

打开后,按ctrl+f搜索,比如我这里搜索的第一个参数“salt”,这里一共12,通过观察找到这一个:

然后,将需要的代码复制到Console中,回车运行以查找生成规律。例如,在我的情况下,salt: i,其生成方式是i = r + parseInt(10 * Math.random(), 10),其中r = "" + (new Date).getTime()。通过在Console中运行这段代码,可以发现parseInt(10 * Math.random(), 10)的意思是随机生成一个0到9的数字;(new Date).getTime()则是获取当前的时间戳。继续观察发现,ts: r,bv: t,而t = n.md5(navigator.appVersion)。在Console中运行后可以得知,t实际上是我们在发起请求时的 "User-Agent"。

那么我们开始代码实现:
- 先搞定ts
可以看到ts也就是上面的r和Payload里面的“lts”已经搞定。
- 再搞定salt
先来生成parseInt(10 * Math.random(), 10)的随机数:
再来实现i = r + parseInt(10 * Math.random(), 10):
至此,我们已经拿到了三个参数,代码也可以改写一下了:
1、最后搞定sign
通过观察可以发现:

sign
是通过n.md5("fanyideskweb" + e + i + "Y2FYu%TNSbMCxc3t2u^XT")
生成的。
- 这个值是经过 MD5 加密的。
- "fanyideskweb" 是一个固定字符串。
i
的值已经生成。
- "Y2FYu%TNSbMCxc3t2u^XT" 也是一个固定字符串。
e
的值目前尚不清楚。
通过断点调试后发现,e就是我们输入的文字。
最后一步,百度md5怎么加密,这里我感觉是最难的地方,说实话这一块我也不懂,百度的结果如下:
改写代码
成功展示

- 作者:猿榜编程
- 链接:https://www.yuanbang.lol//article/d651088b-c60c-4774-a9a8-5fa832e2faf3
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。