某山词霸翻译js逆向分析

一、基础知识

1、post的几种发包的方式

2、query string和form data的区别

Query String Parameters:
GET请求时,参数会以url string 的形式进行传递,即?后的字符串则为其请求参数,并以&作为分隔符。(有时候post也可以携带请求参数)

​FormData:
当发起一次Post请求,若未指定Content-type,则默认content-type为application/x-www-form-urlencoded,即参数会以FormData的形式进行传递,不会显示出现在请求URL中。

Request Payload:
当发起一次post请求,若Content-Type为application/json,则参数会以Request Payload的形式进行传递(数据格式为json),不会显示出现在请求url中

3、抓包后预览数据包

1)post/get & 请求的网址

2)请求标头,是否携带cookie

3)查询字符串参数

4)表单数据

5)响应/预览 (预览返回的响应数据)

如果没有看到应该看到的内容说明可能是加密数据 / 使用类似protobuf格式进行了编码处理,需要对数据进行解析

二、逆向分析实战

输入要翻译的单词进行抓包

这些参数之后写代码都能直接使用的 

 

我们发现只有参数sign是动态生成的,需要特殊处理,根据经验sign是通过加密生成

根据url的特点:https://ifanyi.iciba.com/index.php?c=trans&m=fy&client=6&auth_user=key_web_new_fanyi&sign=B4oBzjcIE%2FCsviWvuvdQbdRriqVIAJSQ%2BxmfU0q7dIE%3D

不难想象最后需要将加密后的结果拼接到sign=后面,所以我们可以搜索sign=,在附近应该会出现加密的算法

进行全局搜索参数位置:

进行局部搜索,找到关键点所在位置

 

分析附近的js代码:

var r = u()("6key_web_new_fanyi".concat(s.LI).concat(t.q.replace(/(^\s*)|(\s*$)/g, ""))).toString().substring(0, 16);return r = (0,_.$Q)(r),v("/index.php?c=trans&m=fy&client=6&auth_user=key_web_new_fanyi&sign=".concat(encodeURIComponent(r)), {baseURL: "//ifanyi.iciba.com",method: "post",headers: {"Content-Type": "application/x-www-form-urlencoded"},data: e})

发现sign参数来自于r,上面找到r,在这个函数打下断点

这里很明显是取参数特征,作为sign的字符串输入

返回的r="2d1e9a93d434e9da"是一个16位16进制,怀疑是使用md5生成的hash值

 

不妨在控制台输出一波,发现1对应c4ca4,基本就是md5了,注意:控制台测试的时候要在保护u函数的当前作用域当中进行

 

如果你实在不放心可以在u内部打断点,然后一路f9进行单步走,直到找到MD5之类的特征

函数关系复杂,这样进入u内部:

 

这一路上走走停停.....一会就找到了

 

 

 因此第一步就是对参数字符串:"6key_web_new_fanyi".concat(s.LI).concat(t.q.replace(/(^\s*)|(\s*$)/g, ""))进行md5加密,然后取前16位

但是这并不是我们真正的r,真正的r还进行了一步处理:

我们继续跟进l函数 

喵的很明显是使用AES对md5值进行再次加密,直接断点安排上

其实我们发现解密函数就在下面😂😂

调试发现e是明文(md5),r是对称加密的密钥(128位(16B)),AES填充参数:mode: n.mode.ECB、padding: n.pad.Pkcs7

 

加密之后得到正确的sign:

 

同时我们发现加密函数都统一放到一个文件当中了,如果你想扣代码,也可

 

同样的,解密函数就是加密的逆过程了

 

从返回参数来看,我们已经得到解密之后的结果了

 

然后接下来就是愉快的代码实现过程了! 

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

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

相关文章

修改 app id - 鸿蒙 HarmonyOS Next

修改项目 app id 后通过真机 build run 的时候抛出了如下异常; 项目中更改后的配置与真机的不匹配; {app: {bundleName: "com.xxxxxx.xxx_harmony",vendor: "xxxxxx",versionCode: 1,versionName: "3.5.00",icon: "$media:app_icon",…

有什么简单易上手的CRM系统推荐?五款CRM软件评测

在数字化时代,企业急需一个能全面展示客户、销售和分析数据的CRM系统。当然,简单易用的CRM系统成了企业首选。选择系统时,同时要关注它的实际功能是否满足需求,是否容易上手,能否根据企业需求灵活定制,能否…

一种自定义SPI通信协议

本文介绍一种自定义SPI通信协议。 项目开发过程中,有时候会涉及到主处理器或FPGA和MCU之间的SPI通信,涉及到通信就需要考虑通信协议,本文给出一种简单的通信协议。 1.协议格式 协议格式如下图。 其中,将40 bit划分为2大部分&am…

【uniapp】上传附件+Java后端

一、背景 移动端项目使用uniapp开发,项目有上传附件的需求。现在分享给大家,一起进步 二、前端 关键代码: uni.chooseFile({type: "all",count: this.count,success: res > {let len 0;res.tempFiles.forEach((item, index…

【HDFS】关于Hadoop的IPC.Client类的一些整理

org.apache.hadoop.ipc.Client 类是IPC服务的一个客户端。 IPC请求把一个Writable对象当做参数,返回一个Writable对象当做结果value。 一个IPC服务运行在某个端口上,并且由参数class和value class定义。 Router里的IPC.Client对象就两个 有这样一个类:ClientCache 看名字就…

springboot加载注入bean的方式

在SpringBoot的大环境下,基本上很少使用之前的xml配置Bean,主要是因为这种方式不好维护而且也不够方便。 springboto注入bean主要采用下图几种方式,分为本地服务工程注解声明的bean和外部依赖包中的bean。 一、 springboot装配本地服务工程…

Maven deploy上传远程私服失败

Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.8.2:deploy (default-deploy) on project 你的项目: Cannot deploy artifacts when Maven is in offline mode 解决方案&#xff1a; 1.IDEA把这个钩子去掉 2. settings.xml里把 <offline>标…

云计算【第一阶段(23)】Linux系统安全及应用

一、账号安全控制 1.1、账号安全基本措施 1.1.1、系统账号清理 将非登录用户的shell设为/sbin/nologin锁定长期不使用的账号删除无用的账号 1.1.1.1、实验1 用于匹配以/sbin/nologin结尾的字符串&#xff0c;$ 表示行的末尾。 &#xff08;一般是程序用户改为nologin&…

[英语单词] standpoint

The way cancellation works, from an application standpoint, is that when thread A no longer needs the work that thread B is performing, thread A calls pthread_cancel on thread B. 驻足点 from an application standpoint&#xff1b;从应用的驻足点来说。 这个和…

c/c++语言MCU学习笔记

程序数据结构算法 算法&#xff1a;解决问题的方法的步骤 算法的分类&#xff1a; 数值运算法和非数值运算法 算法的表示方法&#xff1b; 自然语言表示法、流程图 N/S NS流程图&#xff0c;又被称为N-S图&#xff0c;或者是盒图&#xff0c;它是一种可视化建模…

SAMformer创新点

SAMformer 提供了一种新的方法来改进变换器&#xff08;Transformer&#xff09;在时间序列预测任务中的性能&#xff0c;特别是针对泛化能力和训练稳定性问题。具体来说&#xff0c;SAMformer结合了两个关键技术&#xff1a;锐度感知最小化&#xff08;Sharpness-Aware Minimi…

鸿蒙登录页面及页面跳转的设计

目录 任务目标任务分析任务实施1.新建工程项目HMLogin2.设计登录页面Index.visual3.设计第二个页面SecondPage4.修改Index.ets代码5.修改SecondPage.ets代码6.运行工程 任务目标 设计一个简单的登录页面&#xff0c;要求可以将第一页的登录信息&#xff0c;传递到第二个页面&a…

Cesium 在加载 3dTiles 如何如何获取ID

文章目录 问题分析问题 加载的 3dTiles 打印content.getFeature(i)出来后如图所示,想获取到id值 分析 var tileset = mapLayer.init3dTileLayer({url:it.url,maximumMemoryUsage: it.maximumMemoryUsage,

一起学Hugging Face Transformers(7) - 使用Transformers 库进行机器翻译(Machine Translation)

文章目录 前言一、 环境准备二、 导入库并加载预训练模型三、 进行翻译四、 支持多语言对五、 调整翻译参数六、 使用具体任务的模型总结 前言 机器翻译&#xff08;Machine Translation&#xff09;是自然语言处理&#xff08;NLP&#xff09;中的一个重要任务&#xff0c;它…

关于RAG优化的几个小技巧

一、背景说明 RAG技术为大型语言模型&#xff08;LLMs&#xff09;提供了从数据源检索到的信息&#xff0c;以支撑其生成的答案。简而言之&#xff0c;RAG就是搜索加上LLM提示&#xff0c;你让模型在提供的信息上下文中回答问题。查询和检索到的上下文都被注入到发送给LLM的提…

Spring Boot 启动流程是怎么样的

引言 SpringBoot是一个广泛使用的Java框架&#xff0c;旨在简化基于Spring框架的应用程序的开发过程。在这篇文章中&#xff0c;我们将深入探讨SpringBoot应用程序的启动流程&#xff0c;了解其背后的机制。 Spring Boot 启动概览 SpringBoot应用程序的启动通常从一个包含 m…

求生之路史低入手 教你怎么使用求生之路创意工坊提高体验性

求生之路是一款抵御丧尸的第一人称射击游戏&#xff0c;四名幸存者联机配合&#xff0c;在现代的城市中&#xff0c;击败各种丧尸还有强大的变种人BOSS&#xff0c;虽然是十几年前的游戏&#xff0c;但是毫不夸张的说&#xff0c;游戏丝毫不过时&#xff0c;目前steam夏促&…

理解SurfaceFlinger在Android中的作用

理解SurfaceFlinger在Android中的作用 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们来探讨Android系统中一个关键的组件——SurfaceFlinger&#xff…

Spring Boot实现多环境配置

1.为什么需要多环境配置&#xff1f; 在实际项目开发过程中&#xff0c;我们往往需要区分开发&#xff0c;测试&#xff0c;联调,预发布&#xff0c;生产等不同的应用环境。这些应用环境用途不同&#xff0c;对应环境的配置项,稳定性,数据质量,保障性,可接触人群等要求也不同&…

Redis持久化(RDB AOF)

Redis持久化 MySQL的事务&#xff0c;有四个比较核心的特性&#xff1a; 原子性一致性持久性&#xff08;和持久化一样&#xff09;&#xff0c;将数据存储在硬盘上&#xff0c;重启主机之后数据仍然存在隔离性 redis是一个内存数据库&#xff0c;把数据存储在内存中&#xff0…