【逆向百例】百度翻译js逆向

news2024/10/6 0:30:29

关注它,不迷路。

本文章中所有内容仅供学习交流,不可用于任何商业用途和非法用途,否则后果自负!

前言

目标

分析某度翻译接口,使用python获取翻译结果,并用pyinstaller打包成单文件可执行程序。

工具

chrome、pycharm、nodejs 18.16.1、python3.10

模块

  • requests:2.31.0
  • re
  • PyExecJS:1.5.1
  • js2py:0.74
  • pyinstaller:6.6.0

基本流程

分析方法

如何分析呢?

举个例子

进到某度翻译网站:aHR0cHMlM0EvL2ZhbnlpLmJhaWR1LmNvbS8=,f12进行抓包,尝试输入翻译的句子或词语,抓取的包如图:

接着我们看下该请求的具体参数:

我们发现,这是个post请求,payload中除了query字段是我们要翻译的数据,还多了其它的参数,如sign,token,ts等。

此时我们会想这些参数是如何产生的?

我们直接上手看看其是如何构造的。

所有的请求都是一个套路,所以这些参数必然是在js代码里生成,并在最终发起请求的时候带上这些参数。

因此我们可以全局搜索(ctrl+shift+f)诸如:simple_means_flag:、token:sign:ts:等关键信息。

我们直接搜索接口关键字v2transapi:

我们发现一个有三个疑似请求的接口,分别点击这三个链接打上断点调试,使用控制变量法定位哪里的断点有效。

发现只有第二个断点有效:

去掉另外两个断点,重点调试第二个断点的上下文。

参数生成解析

我们采取这样的方式重点分析下主要参数的生成。

获取sign值

直接搜索sign的预计会有多个,我们搜索下simple_means_flag:发现,有两个地方,其它参数包括sign刚好在其附近,分别打断点调试:

这里猜测signts应该是变化的值,其中ts初步猜测是时间戳,其它大概率是固定值或枚举值。

鼠标放在这个函数上,跳到这个函数所在的位置:

function(t) 就是我们需要的函数,也就是b函数具体实现:

我们找到了参数生成的地方了,剩下的就是调试,将具体的代码抠出。

运行发现报错,r 没有定义!

继续在网页端断点调试,发现r是一个具体的值,多次测试后其是一个固定值。

我们查看源代码,r是这么定义的:

var r = null;

这就奇怪了,r的固定值320305.131321201是哪来的呢?函数b()中,还有这么一段代码:

var h = (null !== r ? r : (r = window[d] || "") || "").split(".");

这段代码的意思是:

  1. 首先,检查变量r是否不为null,如果是,则直接使用r,否则执行下一步。
  2. 如果rnull,则尝试从window对象中获取属性名为d的属性的值。如果该属性不存在或者为undefined,则将r设置为空字符串。
  3. 接着,如果r为空字符串,则将r设置为一个空字符串。
  4. 最后,将r使用.进行分割,并将结果存储在变量h中。

这段代码主要的目的是从window对象中获取一个键为d的属性的值(如果存在),并将其按.进行分割存储到数组h中。

我们在Watch中查看rd,或者在Scope中查找,发现d为字符串gtk:

我们再来看这个d的值,d就在这条赋值语句的前面:

var d = "".concat(String.fromCharCode(103)).concat(String.fromCharCode(116)).concat(String.fromCharCode(107))

103、116、107 其实分别是g、t、k这三个字符的 ASCII 码值,也就是说,d = "gtk"

全局搜索r的值,发现其刚好是gtk的值:

继续在pycharm中运行,报错window未定义:

补充模拟window对象:

// 模拟 window 对象
var window = {
    gtk: "320305.131321201"
};

再次运行,还是报错缺少依赖函数n:

回到网页js,拿到n函数:

n函数具体实现:


再次运行:

和页面请求一致:

至此,sign解析完成。

获取token

同样,我们仍然先全局搜索token,发现其可能是个固定值。

果然,token参数是也从window全局对象common中获取的,通过搜索发现,token其实和gtk是在同一个页面,那么一样使用正则匹配就能拿到。

获取翻译结果

偷个懒,使用现成的网站小工具实现代码转换。https://curlconverter.com/python/

copy翻译接口的curl代码:

curl转python代码生成某度翻译接口的python请求代码:

https://curlconverter.com/python/

然后整合js代码,并稍作封装,即可得到翻译结果。

打包

基本功能没问题,我们可以进一步打包成exe文件进行分发使用,采用tkinter进行ui可视化(yyyy.py):

将python文件和js文件打包成单文件可执行程序:

pyinstaller --onefile --windowed --add-data="某度翻译.js;." -F -i .\xxxx.png .\yyyy.py

或者使用spec配置打包:

# -*- mode: python ; coding: utf-8 -*-


a = Analysis(
    ['yyyy.py'],
    pathex=[],
    binaries=[],
    datas=[('sign.js', '.')],  # 替换为实际的js文件名
    hiddenimports=[],
    hookspath=[],
    hooksconfig={},
    runtime_hooks=[],
    excludes=[],
    noarchive=False,
    optimize=0,
)
pyz = PYZ(a.pure)

exe = EXE(
    pyz,
    a.scripts,
    a.binaries,
    a.datas,
    [],
    name='bd翻译_公众号:海哥python',
    debug=False,
    bootloader_ignore_signals=False,
    strip=False,
    upx=True,
    upx_exclude=[],
    runtime_tmpdir=None,
    console=False,
    disable_windowed_traceback=False,
    argv_emulation=False,
    target_arch=None,
    codesign_identity=None,
    entitlements_file=None,
    icon=['xxxx.png'],  # 替换为实际的照片
)

最后

本文只提供一些思路,随着时间的推移,网站会维护,以上代码不会一直都有效,需要重新分析。

本文章中所有内容仅供学习交流,不可用于任何商业用途和非法用途,否则后果自负!

今天的分享就到这里。如果觉得不错,点赞,在看,关注安排起来吧。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1632836.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

云端飞翔,一触即达 —— 100G网卡,连接未来

关于100G网卡,这是一种高速网络接口控制器,主要用于数据中心和高性能计算环境,以支持更快的数据传输速率。100G网卡可以提供每秒100吉比特的传输速率,适用于需要处理大量数据和高速网络通信的场合。 在选择100G网卡时,…

排序算法(2)快排

交换排序 思想:所谓交换,就是根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置,交换排序的特点是:将键值较大的记录向序列的尾部移动,键值较小的记录向序列的前部移动。 一、冒泡排序 public static…

【C++】stack queue的介绍使用以及模拟实现

目录 01.容器适配器 02.栈(stack) 1.stack的介绍 2.stack的使用 3.stack的模拟实现 03.队列(queue) 1.queue的介绍: 2.queue的使用 3.queue的模拟实现 04.双端队列(deque) 1.介绍 2.…

LeetCode1017题:负二进制转换(原创)

【题目描述】 给你一个整数 n ,以二进制字符串的形式返回该整数的 负二进制(base -2)表示。注意,除非字符串就是 "0",否则返回的字符串中不能含有前导零。 示例 1: 输入:n 2 输出&…

深度学习-N维数组和访问元素

目录 N维数组访问元素 N维数组 N维数组是机器学习和神经网络的主要数据结构 访问元素 最后一个子区域中的::是跳的意思,这个区域说明的是从第一个元素(即第一行第一列那个)对行开始跳3下循环下去直到行结束、对列开始跳2下循环下去直到列…

springboot拦载器

1、拦载器 package com.Interceptor;import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView;import javax.security.auth.login.Log…

如何快速申请SSL证书实现HTTPS访问?

申请SSL证书最简单的方法通常涉及以下几个步骤,尽量简化了操作流程和所需专业知识: 步骤一:选择适合的SSL证书类型 根据您的网站需求,选择最基础的域名验证型(DV SSL)证书,它通常只需验证域名所…

技术融合与创新大象机器人水星Mercury X1人形机器人案例研究!

引言 在科技迅速发展的当下,人形机器人正变得日益重要,其应用范围从工业自动化到服务业不断扩展。本文将通过Mercury X1大象人形机器人的案例,探讨如何利用尖端技术如大型语言模型(LLM)、同时定位与映射(SL…

雅思(IELTS)优秀小作文分享

IELTS优秀小作文分享 柱状图 本篇范文个人评分是8分或者8.5分,属于能找到的最优质的范文了 题目如下: The two sets of bar charts illustrate the amount of time that teenagers (boys, girls, and all) in the UK spend chatting online and playing game c…

2024 java使用Graceful Response,告别自己去封装响应,可以接收数据异常,快看我这一篇,足够你用!

参考官网手册地址&#xff1a;快速入门 | Docs 一、导入依赖&#xff08;根据springboot查看对应依赖版本&#xff09; <!-- Graceful --><dependency><groupId>com.feiniaojin</groupId><artifactId>graceful-response</artifactId&g…

GaussDB数据库事务管理

一、引言 事务管理是数据库系统中至关重要的一部分&#xff0c;它确保了数据库的一致性和可靠性。在GaussDB数据库中&#xff0c;事务管理不仅遵循传统的ACID特性&#xff0c;还提供了一些高级功能。本文将深入探讨GaussDB数据库事务管理的各个方面。 二、事务的基本概念 2.1…

CSS Position定位(详解网页中的定位属性)

目录 一、Position介绍 1.概念 2.特点 3.作用 4.应用 二、Position用法 1.position属性 2.static定位 3.fixed定位 4.relative定位 5.absolute定位 6.sticky定位 7.重叠的元素 三、CSS定位属性 四、总结 一、Position介绍 1.概念 文档流&#xff08;Document Fl…

C++ 之 string类的模拟实现

这学习我有三不学 昨天不学&#xff0c;因为昨天是个过去 明天不学&#xff0c;因为明天还是个未知数 今天不学&#xff0c;因为我们要活在当下&#xff0c;我就是玩嘿嘿~ –❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀-正文开始-❀–❀–…

springboot笔记一:idea社区版本创建springboot项目的方式

社区idea 手动maven 创建springboot项目 创建之后修改pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:sc…

Microsoft Edge浏览器:高效、简洁、个性化的网页浏览体验

Microsoft Edge是微软公司推出的一款网络浏览器&#xff0c;它是基于Chromium开源项目开发的&#xff0c;因此与Google Chrome有很多相似之处。以下是一些使用Microsoft Edge的心得体会&#xff1a; 1. 界面简洁&#xff1a;Microsoft Edge的界面设计非常简洁&#xff0c;用户…

R语言--图形绘制

一&#xff0c;绘制简单图形 c1<- c(10,20,30,40,50) c2<-c(2,7,15,40,50) plot(c1,c2,typeb) 具体参数请参考R语言中的绘图技巧1&#xff1a;plot()函数参数汇总_r语言plot参数设置-CSDN博客 c1<- c(10,20,30,40,50) c2<-c(2,7,15,40,50) plot(c1,c2,typeb,col#…

【北京迅为】《iTOP龙芯2K1000开发指南》-第四部分 ubuntu开发环境搭建

龙芯2K1000处理器集成2个64位GS264处理器核&#xff0c;主频1GHz&#xff0c;以及各种系统IO接口&#xff0c;集高性能与高配置于一身。支持4G模块、GPS模块、千兆以太网、16GB固态硬盘、双路UART、四路USB、WIFI蓝牙二合一模块、MiniPCIE等接口、双路CAN总线、RS485总线&#…

信息化还是数字化?

从 PC 互联网到移动互联网&#xff0c;再到物联网和最近流行的人工智能&#xff0c;科技的进步正在不断地改变着我们的生活和工作方式。这个过程实际上也是信息化和数字化的演进过程&#xff0c;许多人会问那信息化和数字化有啥区别&#xff1f;作为企业&#xff0c;如何在浪潮…

机器人操作系统ROS2学习—编译工作空间colcon build报错问题

在ROS2中&#xff0c;工作空间创建完成后&#xff0c;会经常需要编译工作空间。在工作空间dev_ws 下打开一个终端&#xff0c;通过指令Colcon build来编译工作空间。 1、这个过程有可能会出现如下错误: "colconbuild:Duplicate package names not supported" 根据…

openstack-自动化部署 9

所使用的kolla-ansible版本文档&#xff1a; Quick Start — kolla-ansible 14.10.1.dev21 documentation (openstack.org) 创建一个新的虚拟机 配置主机 安装docker 拉取openstack所需的组件镜像 安装ansible 配置ansible 启用lvm需要将另一个磁盘打成pv&#xff0c;以创建成…