26.安卓逆向2-frida hook技术-解密响应

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!

内容参考于:图灵Python学院

工具下载:

链接:https://pan.baidu.com/s/1bb8NhJc9eTuLzQr39lF55Q?pwd=zy89

提取码:zy89

复制这段内容后打开百度网盘手机App,操作更方便哦

上一个内容:25.安卓逆向2-frida hook技术-拦截弹框事件(拦截强制更新弹框和解决jadx加载dex文件不全问题)

如下图的数据包,它是一个被加密后的数据包

首先使用jadx反编译apk(apk没办法反编译的,看上一个内容砸壳,通过内存获取源码)反编译之后搜索下图红框的encrypt_data

搜索完后有两个结果,它俩都在一个类中,随便双击一个就可以了

然后就来到下图红框位置

代码说明

jSONObject.has("encrypt_data")表示jSONObject中是否存在encrypt_data这个内容

下方的代码表示如果jSONObject中存在encrypt_data这个内容,就执行Des3.ees3DecodeECB(jSONObject.getString("encrypt_data"))这行代码,jSONObject.getString("encrypt_data")这个代码的意思是从jSONObject里面获取encrypt_data它的值也就是加密数据,然后调用 Des3.ees3DecodeECB方法

if (jSONObject.has("encrypt_data")) {return Des3.ees3DecodeECB(jSONObject.getString("encrypt_data"));
}

通过上方的初步分析,可以使用frida调试查看它的入参,首先选择复制为firda片段

然后注入frida(注意如果有强制更新弹框的时候,注入代码直接写到关闭强制更新弹框里面),然后就能看到入参了,入参是通过 Charles 抓到的数据

然后带着执行了dealCallBackResult方法后就能得到明文数据,也就是执行了ees3DecodeECB方法后得到明文数据

然后分析它使用什么加密算法,然后双击下图红框的ees3DecodeECB方法

然后就进入了ees3DecodeECB方法,如下图红框

然后开始分析

首先使用 Base64.decode 进行解码

然后使用 SecretKeyFactory.getInstance("desede") 获取一个desede的算法

然后调用 generateSecret(new DESedeKeySpec(SECRET_KEY.getBytes())) 传入一个key

然后Cipher.getInstance("desede/ECB/PKCS5Padding");获取一个ECB加密模型

然后new IvParameterSpec(IV.getBytes());创建一个IV

然后 cipher.init(2, generateSecret); 初始化算法

然后 cipher.doFinal(decode) 解密,然后就返回了

算法需要的key和iv都在这个类中,如下图红框,可以直接破了

Python还原算法

desede算法可以使用DSE3算法代替,Python代码

from Crypto.Cipher import DES3
from Crypto.Util.Padding import unpad
import base64
import jsondef decrypt_des3(params):"""使用DES3算法解密数据参数:params (dict): 包含解密所需参数的字典- ciphertext (str): 待解密的Base64编码密文- key (str): 密钥字符串(必须是24字节长度)- iv (str): 初始化向量(仅CBC模式需要,必须是8字节长度)- mode (str): 加密模式,支持'ECB'或'CBC'(默认'CBC')- encoding (str): 解密后明文的编码格式(默认'utf-8')返回:dict: 解密并解析后的JSON数据"""# 1. 提取并验证密钥key = params['key'].encode(params.get('encoding', 'utf-8'))if len(key) != 24:raise ValueError("密钥长度必须为24字节(192位)")# 2. 解码Base64密文ct = base64.b64decode(params['ciphertext'])# 3. 根据模式创建解密器if params.get('mode') == 'ECB':# ECB模式不需要IV,但安全性较低cipher = DES3.new(key, DES3.MODE_ECB)else:  # CBC模式(默认)# CBC模式需要IV来增加加密随机性iv = params['iv'].encode(params.get('encoding', 'utf-8'))if len(iv) != 8:raise ValueError("IV长度必须为8字节")cipher = DES3.new(key, DES3.MODE_CBC, iv)# 4. 执行解密并去除填充decrypted_bytes = cipher.decrypt(ct)plaintext_bytes = unpad(decrypted_bytes, DES3.block_size)# 5. 转换为字符串并解析JSONplaintext = plaintext_bytes.decode(params.get('encoding', 'utf-8'))return json.loads(plaintext)# 使用示例
encrypted = {'ciphertext': '',  # 填入实际的Base64密文'key': 'sjdqmp20161205#_316@gfmt',  # 24字节密钥'iv': '01234567',  # 修正为8字节长度(原示例中长度错误)'mode': 'ECB',  # 加密模式,ECB或CBC'encoding': 'utf-8'  # 明文编码
}try:print(f"解密结果: {decrypt_des3(encrypted)}")
except ValueError as ve:print(f"参数错误: {ve}")
except json.JSONDecodeError:print("JSON解析失败: 解密结果不是有效的JSON格式")
except Exception as e:print(f"解密失败: {e}")

效果图:


img

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

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

相关文章

人工智能与人工智障———仙盟创梦IDE

<!-- 桌面导航 -->&#x3C;nav class&#x22;hidden md:flex items-center space-x-8&#x22;&#x3E;&#x3C;a href&#x22;#home&#x22; class&#x22;nav-link text-gray-700 hover:text-primary font-medium&#x22;&#x3E;&#x9996;&…

车载通信架构 --- 以太网相关网络安全

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 做到欲望极简,了解自己的真实欲望,不受外在潮流的影响,不盲从,不跟风。把自己的精力全部用在自己。一是去掉多余,凡事找规律,基础是诚信;二是…

行业实践案例:金融行业数据治理体系全景解析

“金融行业是数据治理的试金石。” ——高密度数据、高合规要求、高业务依赖,决定了金融治理的复杂度和先进性。 📘 本文目录 为什么金融行业对数据治理要求高? 金融行业数据治理的独特挑战 金融行业治理框架搭建实践 典型治理能力案例详解 工具与平台选型经验 总结与启示 …

C#读取modbus值,C#读写modbus,支持读写uint32值,Modbus TCP工具类

C#读取modbus值&#xff0c;C#读写modbus&#xff0c;支持读写uint32值&#xff1b;Modbus TCP工具类 需要首先安装nuget包Modbus using Modbus.Device; using System; using System.Collections.Generic; using System.Linq; using System.Net.Sockets; using System.Text; us…

Oracle注释详解

在Oracle SQL中&#xff0c;注释是用于解释代码逻辑、提高可读性的文本&#xff0c;不会被数据库执行。Oracle支持两种类型的注释语法&#xff1a; 1. 单行注释&#xff08;--&#xff09; 使用双连字符--在一行中添加注释&#xff0c;从--开始到行末的所有内容都会被视为注释。…

关于 scrapy框架 详解

scrapy 是一个纯 Python 编写的异步爬虫框架&#xff0c;具备以下特点&#xff1a;优势说明异步高效基于 Twisted&#xff0c;非阻塞 IO模块化各部分可灵活配置/替换中间件机制支持代理、UA、cookie 控制等强大的解析内置 XPath、CSS 提取器自动去重Scheduler 内部维护请求 fin…

DHCP中继实验及其核心原理

DHCP 中继&#xff08;DHCP Relay&#xff09;是一种允许跨网段分配 IP 地址的技术&#xff0c;无需在每个子网部署 DHCP 服务器。以下是其原理和配置方法的详细说明&#xff1a;一、核心原理1. 为什么需要 DHCP 中继&#xff1f;问题&#xff1a;DHCP 客户端通过广播&#xff…

ABP VNext + RediSearch:微服务级全文检索

ABP VNext RediSearch&#xff1a;微服务级全文检索 &#x1f680; &#x1f4da; 目录ABP VNext RediSearch&#xff1a;微服务级全文检索 &#x1f680;&#x1f4da; 一、背景与动机 &#x1f680;&#x1f6e0;️ 二、环境与依赖 &#x1f433;2.1 Docker Compose 启动 R…

TensorFlow深度学习实战——基于自编码器构建句子向量

TensorFlow深度学习实战——基于自编码器构建句子向量 0. 前言1. 句子向量2. 基于自编码器构建句子向量2.1 数据处理2.2 模型构建与训练 3. 模型测试相关链接 0. 前言 在本节中&#xff0c;我们将构建和训练一个基于长短期记忆 (Long Short Term Memory, LSTM) 的自编码器&…

C语言使用Protobuf进行网络通信

笔者前面博文Go语言网络游戏服务器模块化编程介绍了Go语言在开发网络游戏时如何进行模块化编程&#xff0c;在其中使用了Protobuf进行网络通信。在Protobuf官方实现中并没有生成C语言的实现&#xff0c;不过有一个开源的protobuf-c可以使用。 先来看看protobuf-c生成的代码&am…

vue3 随手笔记12--组件通信方式9/5--useAttrs

一 什么是useAttrsuseAttrs 是 Vue 3 Composition API 中提供的一个函数&#xff0c;它属于 Vue 的组合式 API 工具集的一部分。通过 useAttrs&#xff0c;你可以访问传递给组件但未被声明为 props 的所有属性。这对于处理非 prop 特性&#xff08;attributes&#xff09;特别有…

HumanRisk-自动化安全意识与合规教育平台方案

权威数据显示&#xff0c;74%以上的数据泄露与网络安全事件归根结底与人为因素有关&#xff0c;60%以上的网络安全事件是由内部人员失误造成的。这一现状揭示了一个核心命题&#xff1a;网络安全威胁正从技术漏洞转向“人为因素风险”。Gartner的调查发现&#xff0c;即便接受了…

2025年食品科学与健康大数据国际会议(SHBD 2025)

2025年食品科学与健康大数据国际会议 2025 International Conference on Food Science and Health Big Data&#xff08;一&#xff09;大会信息 会议简称&#xff1a;ICFSHBD 2025 大会地点&#xff1a;中国上…

CompareFace人脸识别算法环境部署

一、docker 安装 步骤1&#xff1a;启用系统功能 右键开始菜单 → 应用和功能 → 点击 程序和功能 → 勾选 Hyper-V 和 Windows子系统Linux 步骤2&#xff1a;获取安装包 访问Docker官网安装包下载页 &#xff0c;下载「Docker Desktop Installer.rar」压缩包 步骤3&#…

STM32固件升级设计——内部FLASH模拟U盘升级固件

目录 一、功能描述 1、BootLoader部分&#xff1a; 2、APP部分&#xff1a; 二、BootLoader程序制作 1、分区定义 2、 主函数 3、配置USB 4、配置fatfs文件系统 5、程序跳转 三、APP程序制作 四、工程配置&#xff08;默认KEIL5&#xff09; 五、运行测试 结束语…

操作系统引导过程

操作系统引导是指计算机利用 CPU 运行特定程序&#xff0c;通过程序识别硬盘&#xff0c;识别硬盘分区&#xff0c;识别硬盘分区上的操作系统&#xff0c;最后通过程序启动操作系统。 引导流程&#xff08;8步核心环节&#xff09; 1. 激活CPU 加电后CPU自动读取 ROM中的Boot…

Safetensors与大模型文件格式全面解析

Safetensors是一种专为存储大型张量数据设计的文件格式&#xff0c;由Hugging Face团队开发&#xff0c;旨在提供安全高效的模型参数存储解决方案。下面将详细介绍Safetensors格式及其特点&#xff0c;并全面梳理当前主流的大模型文件格式。 一、Safetensors格式详解 1. 基本概…

分布式理论:CAP、Base理论

目录 1、CAP理论 1.1、介绍 1.2、CAP的三种选择 1.3、CAP的注意事项 2、BASE理论 2.1、定义介绍 2.2、最终一致性的介绍 2.3、BASE的实现方式 2.4、与ACID的对比 3、CAP与BASE的联系 4、如何选择CAP 前言 在分布式系统中&#xff0c;CAP理论和BASE理论是指导系统设计…

【最新】飞算 JavaAl安装、注册,使用全流程,让ai自己给你写代码,解放双手

目录 飞算 JavaAl 产品介绍 安装飞算 JavaAl 第一步&#xff1a;点击 File->Setting 第二步&#xff1a;点击 Plugins 第三步&#xff1a;搜索 CalEx-JavaAI 第四步&#xff1a;点击 Install 进行安装 第五步&#xff1a;点击 Install &#xff0c;查看安装好的飞算…

无人设备遥控器之姿态控制算法篇

无人设备遥控器的姿态控制算法通过传感器数据融合、控制算法优化和执行机构调节实现动态平衡&#xff0c;核心算法包括PID控制、自适应控制、模型预测控制&#xff08;MPC&#xff09;&#xff0c;以及数据融合中的互补滤波和卡尔曼滤波&#xff0c;同时涉及四元数算法和深度强…