当前位置: 首页 > news >正文

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.lryc.cn/news/582859.html

相关文章:

  • LoRaWAN 有几种入网方式?
  • DMA技术与音频数据的存储和播放
  • LLM视觉领域存在模型视觉识别不准确、细粒度视觉任务能力不足等科学问题
  • (四)机器学习小白入门YOLOv :图片标注实操手册
  • C#中封装halcon函数的报错
  • 用基础模型构建应用(第七章)AI Engineering: Building Applications with Foundation Models学习笔记
  • Google AI 刚刚开源 MCP 数据库工具箱,让 AI 代理安全高效地查询数据库
  • 推荐系统中的相似度
  • JAVAEE 代理
  • 短视频电商APP源码开发技术栈解析:音视频、商品链路与互动设计
  • 怪物机制分析(有限状态机、编辑器可视化、巡逻机制)
  • DCL学习
  • SpringAI学习笔记-MCP客户端简单示例
  • C#Halcon从零开发_Day18_OCR识别
  • SpringAI系列 - 基于Spring AI 1.0.0 的AI助手实现示例
  • 图像梯度处理与边缘检测:OpenCV 实战指南
  • Apache Atlas编译打包,可运行包下载地址
  • VM上创建虚拟机以及安装RHEL9操作系统并ssh远程连接
  • 7月8日星期二今日早报简报微语报早读
  • XSLT注入与安全修复方法
  • 人工智能与人工智障———仙盟创梦IDE
  • 【Note】《Kafka: The Definitive Guide》第11章:Stream Processing
  • 【Bluedroid】BLE 地址解析列表的初始化与清除机制(btm_ble_resolving_list_init)
  • MySQL 8.0 OCP 1Z0-908 题目解析(23)
  • Kafka消息倾斜
  • 编码器(Encoder)和解码器(Decoder)
  • Spring注解驱动开发
  • window wsl 环境下编译openharmony,HarmonyOS 三方库 FFmpeg
  • Flutter基础(前端教程④-组件拼接)
  • Ansible 介绍及安装