js逆向--有道翻译

2023-11-05

目录

1.前言

2.起因

3.经过

4.结果


1.前言

  • 分类:js逆向
  • 语言:python

2.起因

  • 记录一下js逆向入门案例

3.经过

  1. 分析案例,有道翻译是通过ajax的post请求获得的响应结果,打开开发者工具获取post请求时需要提交的表单数据,通过发现得出每次提交变化的参数有salt、sign、lts,其余的为固定参数。
  2. 首先分析下参数的规律,不难看出lts是13位的毫秒级时间戳,salt比lts多一位,sign则是经过加密的(32位字符串一般是md5加密)。
  3. 查询加密参数产生的过程,复制sign按快捷键ctrl+shift+f打开全局搜索,
  4. 点击{}格式化输出,继续寻找产生sign值的关键函数,可以通过打断点来逐一排查,因为全局不止一个sign关键字,有的sign跟我们所需要的无关,如果看不太懂js,还是打断点测试比较方便,最终测试到这里会进入断点,继续向上找关键函数。
  5. 看到这里就一目了然了,函数r传入参数e(e就是查询的参数‘你好’),鼠标放在navigator.appVersion上看到是一个user-agent,再往下,r是时间戳,i是r+上一位随机数,sign是使用e+i加上两个定值字符串再经过md5加密形成的。
  6. 现在只需要模拟出整的一个函数得到所需的参数就可以获取数据了。
  7. md5在python里有直接的库可以使用,只需要导入hashlib即可
  8. 完整代码
    # -*- coding: utf-8 -*-#
    # ---------------------------------------------------------
    # Name: 有道翻译
    # Description: 
    # Author: jiangsinan
    # Date: 2022/1/2
    # ---------------------------------------------------------
    import hashlib
    import random
    import time
    
    import requests
    
    cookies = {
        'OUTFOX_SEARCH_USER_ID': '-2126201429@10.108.160.105',
        'JSESSIONID': 'aaaLM9PoxvEI0b_iZMz4x',
        'OUTFOX_SEARCH_USER_ID_NCOO': '80978450.05360673',
        '___rl__test__cookies': '1641107918867',
    }
    
    headers = {
        'Connection': 'keep-alive',
        'sec-ch-ua': '" Not A;Brand";v="99", "Chromium";v="96", "Google Chrome";v="96"',
        'Accept': 'application/json, text/javascript, */*; q=0.01',
        'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
        'X-Requested-With': 'XMLHttpRequest',
        'sec-ch-ua-mobile': '?0',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36',
        'sec-ch-ua-platform': '"Windows"',
        'Origin': 'https://fanyi.youdao.com',
        'Sec-Fetch-Site': 'same-origin',
        'Sec-Fetch-Mode': 'cors',
        'Sec-Fetch-Dest': 'empty',
        'Referer': 'https://fanyi.youdao.com/',
        'Accept-Language': 'zh-CN,zh;q=0.9',
    }
    
    params = (
        ('smartresult', ['dict', 'rule']),
    )
    
    
    def MD5(e):
        sign = hashlib.md5(e.encode('utf-8')).hexdigest()
        return sign
    
    
    querry = input('请输入查询参数:')
    lts = str(time.time() * 1000)
    salt = lts + str(random.random() * 10)
    e = "fanyideskweb" + querry + salt + "Y2FYu%TNSbMCxc3t2u^XT"
    sign = MD5(e)
    data = {
        'i': querry,
        'from': 'AUTO',
        'to': 'AUTO',
        'smartresult': 'dict',
        'client': 'fanyideskweb',
        'salt': salt,
        'sign': sign,
        'lts': lts,
        'bv': 'fdac15c78f51b91dabd0a15d9a1b10f5',
        'doctype': 'json',
        'version': '2.1',
        'keyfrom': 'fanyi.web',
        'action': 'FY_BY_REALTlME'
    }
    
    response = requests.post('https://fanyi.youdao.com/translate_o', headers=headers, params=params, cookies=cookies,
                             data=data)
    print(response.json())

4.结果

  • 整的一个案例算是js入门级别,有什么看不懂的都可以留言,有什么比较奇怪的案例也可以加我qq:2459140452一起讨论。

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

js逆向--有道翻译 的相关文章

随机推荐

  • mysql count 测试

    从执行结果来说 count 1 和count 之间没有区别 因为count count 1 都不会去过滤空值 但count 列名 就有区别了 因为count 列名 会去过滤空值 从执行效率来说 count 1 和 count 一样 24 6
  • 自动登录脚本

    为了解决不同网络空间的问题 本来是想通过改变环境变量的方式 不过最终还是 选择了在shell脚本下 选择了网络空间后执行脚本 同时这个库 还可以实现相应的文件传输功能 这也是比较划算的一个功能 usr bin python coding u
  • chatgpt赋能python:Python获取微信群聊天记录

    Python获取微信群聊天记录 微信是目前中国最受欢迎的社交聊天应用程序之一 许多人都习惯在微信群中进行聊天和信息交流 然而 有时我们需要保存一些重要的聊天记录 以备日后查看和备份 Python可以帮助我们实现获取微信群聊天记录的目的 为什
  • java中对于类的了解

    1 java中的万事万物都由类组成 而类可以说是对象的载体 相当于类 2 类由属性与行为组成 属性 成员变量 行为 成员方法 相当于函数 举个例子 人 对象 高 矮 瘦 胖 成员变量 走路 吃饭 上班 成员方法 calss person S
  • 锂电池为啥会爆炸

    前段时间 三星公司的旗舰智能手机GalaxyNote 7一直牢牢占据着新闻头条 这倒不是因为它的性能或是设计有多么出众 当然Note7的性能和设计的确很好 而是因为其在上市后的短时间内 即被发现内置电池存在重大安全隐患 手机无故发生爆炸的几
  • JSP基本语法

    JSP基本语法 1 1 JSP页面的基本结构 1 在传统的HTML页面文件中加入Java程序片和JSP标记就构成了一个JSP页面 JSP页面有五种元素组成 普通的HTML标记和JavaScript标记 JSP标记 如指令标记 动作标记 变量
  • 3.1 简单变量

    为把信息存储在计算机中 程序必须记录3个基本属性 信息将存储在哪里 要存储什么值 存储何种类型的信息
  • java.lang.NoClassDefFoundError: org/apache/commons/fileupload/FileUploadException

    IDEA也没提示错误 但是跑单元测试的时候报错 加入以下依赖正常 gt
  • Linux上快速安装软RAID详细步骤

    物理环境 虚拟机CentOS6 4 配置 8G内存 2 2核cpu 3块虚拟硬盘 sda sdb sdc sdb和sdc是完全一样的 在实际生产环境中 系统硬盘与数据库和应用是分开的 这样有利于系统的维护和对数据应用的使用 本环境中将sda
  • tcp/udp建立连接并通信的过程

    基于TCP的socket编程的服务器程序流程如下 1 创建套接字 SOCKETsockSrv socket AF INET SOCK STREAM 0 2 将套接字绑定到本地地址和端口上 SOCKADDR INaddrSrv addrSrv
  • 利用Android Studio自带的模拟器联网

    Android Studio自带的模拟器本身默认是不能上网的 因为默认DNS为10 0 2 3 使用这个DNS是不能上网的 网上很多帖子已经给出了解决办法 但是会遇到下面这种情况 通过继续查询得知 通过shell命令设置 获取 IP 网关
  • 蓝桥杯真题系列:C语言A组奇妙的数字

    小明发现了一个奇妙的数字 它的平方和立方正好把0 9的10个数字每个用且只用了一次 你能猜出这个数字是多少吗 请填写该数字 不要填写任何多余的内容 这个题题意比较简单 解决办法也是非常简单 暴力即可 主要数据结构哈希表的运用 哈希表用来记录
  • 烟波钓叟赋注解。

    先理解一下烟波钓叟赋 奇门遁甲 的排盘过程 前言 基本数制系统 中国文化 12个数以内叫掌握 一掌內还可以握更多的数 易有太极 是生两仪 两仪生四象 四象生八卦 太极为1 两仪为阴阳 三奇就是乙丙丁 四象 左青龙 右白虎 南朱雀 北玄武 五
  • Qt将十二位整形十进制转换成十六进制,在转为ascii字符,并下发串口。在接受端完整还原这个十二位的十进制数。

    可以按照以下步骤进行操作 将十进制数123456789012转换成十六进制字符串 QString hexString QString 1 arg 123456789012ull 0 16 其中 1表示替换第1个参数 0表示输出的最小位数为0
  • 微信小程序环境配置过程

    微信小程序简介 可以通过阅读微信官方文档对小程序有一个初步的了解 在官方文档内也可以学习到如何进行小程序的环境配置 官方文档链接如下 https developers weixin qq com miniprogram dev framew
  • jsonEdit编辑器

    json格式化编辑器 源码做了部分修改 支持导入及手动编辑
  • 再论PID,PID其实很简单。。。

    0 PID前言 PID已经有105年的历史了 它并不是什么很神圣的东西 大家一定都见过PID的实际应用类似于这种 需要将某一个物理量 保持稳定 的场合 比如维持平衡 稳定温度 转速等 PID都会派上大用场 那么问题来了 比如 我想控制一个
  • 【汽车电子】浅谈汽车四大总线:LIN、CAN、FlexRay、MOST

    目录 1 前言 2 汽车四大总线 2 1 LIN总线 2 1 1 LIN总线概述 2 1 2 LIN总线工作原理 2 2 CAN总线 2 2 1 CAN总线概述 2 2 2 CAN总线工作原理 2 2 3 CAN总线的优点 2 3 Flex
  • 【前端

    图 先看一个例子 html div class container div class item 内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容 内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容
  • js逆向--有道翻译

    目录 1 前言 2 起因 3 经过 4 结果 1 前言 分类 js逆向 语言 python 2 起因 记录一下js逆向入门案例 3 经过 分析案例 有道翻译是通过ajax的post请求获得的响应结果 打开开发者工具获取post请求时需要提交