JS逆向初探之有道翻译

论坛 期权论坛 期权     
算法与数据之美   2019-7-13 18:32   2635   0

有道翻译在咱们的日常学习工作中也是经常被用到,有道翻译提供即时免费的中文、英语、日语、韩语等多种语言的翻译,今天我们就来研究一下有道翻译的网页版,是否能通过对网页的爬取做一个简易的翻译小工具呢,一起来看看吧!


用Chrome浏览器打开有道的在线翻译,按下F12并在框中输入任意中文来观察其网页变化。


该页面被我们轻松找到,可以看到tgt对应的内容就是我们的爬取目标。观察其Headers,发现这是一个post请求,我们都知道post需要提交表单数据,从下图中的Form Data可以看到我们需要的信息,乍一看竟有如此多的参数,我们换个输入重新看看,哪些参数是固定的,哪些是随着输入而发生改变的。





可以多尝试几次,观察其参数变化,显然这些参数之中只有i、salt、sign、ts、bv这几个是发生变化的,那我们就重点来关注这些参数是如何发生变化的。打开其js代码,观察其代码是如何来得到这些变量的。在搜索框内输入salt。


data构造的字典,我们需要的参数尽数都在其中,继续查看js代码,想要找到其加密的函数,想知道其如何生成的,就需要用到JS调试了。
给代码打上断点之后,发现其e就是我们输入的文字,这和Form Data也是一致的,其中t也就是bv是代理的md5值,这里navigator.appVersion的值是5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36,鼠标悬停在该变量上就会显示。ts表示时间戳(timestamp),而i也就是salt则是构造出来的一个字符串,具体方法也在下面代码中给出了。sign也是一个构造出来的参数,前后两端加入固定字符串,中间拼接了e和i,通过md5加密形成新字符串。


  1. ts = str(int(time.time()*10000))
复制代码
  1. salt = str(int(time.time()*10000) + random.random()*10 + 10)
复制代码
  1. sign = 'fanyideskweb' + word + salt + '97_3(jkMYg@T[KZQmqjTK'
复制代码
  1. sign = hashlib.md5(sign.encode('utf-8')).hexdigest()
复制代码
  1. bv = '5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36'
复制代码
  1. bv = hashlib.md5(bv.encode('utf-8')).hexdigest()
复制代码
上述代码是整个解密的关键,有了他们我们就有了所有需要发送请求的参数,编写剩余部分代码,下面来看看实现结果吧!




输入中英文都能够互相转换,其他语种也支持翻译查询喔!



全部代码后台回复“有道”,即刻送达喔~
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:
帖子:
精华:
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP