我是靠谱客的博主 笨笨硬币,最近开发中收集的这篇文章主要介绍python有道翻译js逆向前言一、JS逆向是什么?二、分析和编写代码总结,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

文章目录

  • 前言
  • 一、JS逆向是什么?
  • 二、分析和编写代码
    • 1.分析
    • 2.编写代码
  • 总结


前言

js逆向第一战。


一、JS逆向是什么?

抓取网页端数据时,经常被加密参数、加密数据所困扰,获取不到想要的数据。这个时候需要根据JavaScript的代码逆向进行解决问题。

二、分析和编写代码

1.分析

地址:有道翻译
在输入框内输入英文,抓包工具中新增一个接口:
在这里插入图片描述
显而易见,这就是我们想要的数据,那么我们来看看请求头。
在这里插入图片描述
对比多个请求头的参数后发现,salt,sign,和lts是一直动态变化的,我们去搜索一下sign在js文件中出现的位置,并初步排除一下代码段。
在这里插入图片描述
搜到一条结果,格式化一下,再在其中搜索sign:
在这里插入图片描述
有十五个值,我们根据特征逐条查看一下,找到了其中的关键片段:
在这里插入图片描述
这里可以很清楚的看到:

  • 调用了工具md5加密
  • (new Date).getTime() 时间戳
  • parseInt(10 * Math.random(), 10) 10以内的随机数
  • n.md5(“fanyideskweb” + e + i + “Tbh5E8=q6U3EXe+&L[4c@”) 拼接字符串后,进行md5加密
    于是,打断点进行测试,注意在语句运行之后打断点:
    在这里插入图片描述
    于是这里的e就是我们输入的英文字符串,r是时间戳,i是时间戳后加一个随机数,对应关系为:
  • ts: r
  • salt: i
  • sign: 拼接并加密后的e
    与我们的请求头对应上了,接下来我们只需要在python中模仿其做出相同的操作即可。

2.编写代码

代码如下:

import requests
import random
import hashlib
import time


class TranslationSpider:
    def __init__(self, word):
        # 先请求基本页面再请求接口,session中会存在对应的cookie等参数
        self.base_url = 'http://fanyi.youdao.com/?keyfrom=fanyi-new.logo'
        # 接口地址
        self.url = 'http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'
        # 初始化session
        self.session = requests.session()
        # 初始化伪装头
        self.headers = {
            'Referer': 'http://fanyi.youdao.com/',
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
                          'Chrome/87.0.4280.88 Safari/537.36 Edg/87.0.664.66 '
        }
        # 初始化参数
        self.word = word
        self.data = {}

    def generator_data(self):
        # 获得时间戳
        ts = str(int(time.time() * 1000))
        # 时间戳加随机数
        salt = ts + str(random.randint(0, 10))
        # md5加密
        sign = "fanyideskweb" + self.word + salt + "Tbh5E8=q6U3EXe+&L[4c@"
        md5 = hashlib.md5()
        md5.update(sign.encode())
        sign = md5.hexdigest()
        # post请求的参数
        self.data = {
            "i": self.word,
            "from": "AUTO",
            "to": "AUTO",
            "smartresult": "dict",
            "client": "fanyideskweb",
            "salt": salt,
            "sign": sign,
            "lts": ts,
            "bv": "b286f0a34340b928819a6f64492585e8",
            "doctype": "json",
            "version": "2.1",
            "keyfrom": "fanyi.web",
            "action": "FY_BY_REALTlME"
        }

    def get_request(self):
        # 请求初始界面
        self.session.get(url=self.base_url, headers=self.headers)
        # 再请求接口地址 并返回json
        response = self.session.post(url=self.url, data=self.data, headers=self.headers).json()
        return response

    def parse_json(self, json):
        # 解析传过来的json数据
        tgt = json['translateResult'][0][0]['tgt']
        entries = json['smartResult']['entries']
        print('英文{}翻译结果为:{}'.format(self.word, tgt))
        print(''.join(entries))

    def run(self):
        # 调用封装好的方法
        self.generator_data()
        self.parse_json(self.get_request())


if __name__ == '__main__':
    # 循环翻译
    while True:
        w = input('输入需要翻译的英文:')
        # 输入exit0退出
        if w == 'exit0':
            print('退出成功!')
            break
        # new一个对象
        spider = TranslationSpider(w)
        # 运行
        spider.run()


总结

第一个js逆向的项目结束,以后再见。

最后

以上就是笨笨硬币为你收集整理的python有道翻译js逆向前言一、JS逆向是什么?二、分析和编写代码总结的全部内容,希望文章能够帮你解决python有道翻译js逆向前言一、JS逆向是什么?二、分析和编写代码总结所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部