通过抓包,使用frida定位加密位置

news/2024/11/28 11:56:23/

首先我们抓取一下我们要测试的app的某一个目标api,通过抓api的包,得到关键字。
例如:关键字:x-sap-ri
在这里插入图片描述
我们得到想要的关键字后,通过拦截 类,寻找我们的关键字,及找到发包收包的位置,并输出当时的调用栈,在栈里我们阔以定位到,是那个包里的类调用了。

使用 Frida 脚本用于监控 Java 中 HashMapput 方法,特别是当键为 "x-sap-ri" 时,记录调用栈和键值对。这个脚本可以帮助我们在动态分析 Android 应用时捕获特定的键值对操作。

代码分析

Java.perform(function (){// 获取 HashMap 类的引用var hashMap = Java.use("java.util.HashMap");// 重写 put 方法的实现hashMap.put.implementation = function (a, b) {// 检查键是否为 "x-sap-ri"if(a != null && a.equals("x-sap-ri")){// 打印调用栈console.log(Java.use("android.util.Log").getStackTraceString(Java.use("java.lang.Throwable").$new()));// 打印键和值console.log("hashMap.put: ", a, b);}// 调用原始的 put 方法return this.put(a, b);}
});

关键点解释

  1. Java.perform: 这是 Frida 的一个函数,用于确保在 Java 虚拟机环境中安全地执行代码。所有的 Java 相关操作都应该在这个函数内部进行。

  2. Java.use: 用于获取 Java 类的引用。在这里,我们获取了 java.util.HashMap 类。

  3. hashMap.put.implementation: 通过重写 put 方法的实现,可以在调用该方法时插入自定义逻辑。

  4. 条件判断: 检查键 a 是否为 null,并且是否等于 "x-sap-ri"。如果条件满足,则记录调用栈和传入的键值对。

  5. 调用原始方法: 使用 this.put(a, b) 调用原始的 put 方法,以确保 HashMap 的正常功能不受影响。

完整示例

以下是一个改进后的完整示例,监控 putget 方法,并增加了一些额外的日志信息:

Java.perform(function () {var hashMap = Java.use("java.util.HashMap");// 重写 put 方法hashMap.put.implementation = function (a, b) {if (a != null && a.equals("x-sap-ri")) {console.log("[INFO] hashMap.put called with key: " + a + ", value: " + b);console.log("[TRACE] Call stack: " + Java.use("android.util.Log").getStackTraceString(Java.use("java.lang.Throwable").$new()));}return this.put(a, b);};// 重写 get 方法hashMap.get.implementation = function (a) {var value = this.get(a);if (a != null && a.equals("x-sap-ri")) {console.log("[INFO] hashMap.get called with key: " + a + ", returned value: " + value);}return value;};
});

运行脚本

要运行这个 Frida 脚本,需要:

  1. 在设备上安装 Frida Server。
  2. 使用 frida -U -l your_script.js -f com.example.app 命令启动目标应用程序并加载脚本,com.example.app 替换为您要分析的应用程序的包名。

输出结果:

java.lang.Throwableat java.util.HashMap.put(Native Method)at org.json.JSONObject.put(JSONObject.java:276)at org.json.JSONTokener.readObject(JSONTokener.java:394)at org.json.JSONTokener.nextValue(JSONTokener.java:104)at org.json.JSONObject.<init>(JSONObject.java:168)at org.json.JSONObject.<init>(JSONObject.java:185)at com.shopee.shpssdk.SHPSSDK.uvwvvwvvw(Unknown Source:81)at com.shopee.shpssdk.SHPSSDK.requestDefense(Unknown Source:59)hashMap.put:  x-sap-ri 443e41678c54f44f62b70d1901d115bc703ebab92a5b4251176d

在com.shopee.shpssdk.SHPSSDK.uvwvvwvvw方法里


http://www.ppmy.cn/news/1550612.html

相关文章

[网鼎杯 2020 朱雀组]phpweb 详细题解(反序列化绕过命令执行)

知识点: call_user_func() 函数 反序列化魔术方法 find命令查找flag 代码审计 打开题目,弹出上面的提示,是一个警告warning,而且页面每隔几秒就会刷新一次,根据warning中的信息以及信息中的时间一直在变,可以猜测是date()函数一直在被调用 查看源代码发现一些信息,但是作用…

UE5 和 UE4 中常用的控制台命令总结

调用控制台 按下键盘上的 ~ 键可以调用控制台命令。 技巧 使用键盘的 ↑ 键可以查看之前输入过的指令。控制台指令并不需要打全名&#xff0c;输入空格后跟随指令的部分字符可以进行模糊搜索。按下 Ctrl Shift , 打开 GPUProfile 面板。 命令如下&#xff1a; 调试类 s…

【Rabbitmq篇】高级特性----TTL,死信队列,延迟队列

目录 一.TTL 1.设置消息的TTL 2.设置队列的TTL 3.俩者区别 二.死信队列 定义&#xff1a; 消息成为死信的原因&#xff1a; 1.消息被拒绝&#xff08;basic.reject 或 basic.nack&#xff09; 2.消息过期&#xff08;TTL&#xff09; 3.队列达到最大长度 ​编辑 …

spark 写入mysql 中文数据 显示?? 或者 乱码

目录 前言 Spark报错&#xff1a; 解决办法&#xff1a; 总结一下&#xff1a; 报错&#xff1a; 解决&#xff1a; 前言 用spark写入mysql中&#xff0c;查看中文数据 显示?? 或者 乱码 Spark报错&#xff1a; Sat Nov 23 19:15:59 CST 2024 WARN: Establishing SSL…

iOS 17.4 Not Installed

0x00 系统警告 没有安装 17.4 的模拟器&#xff0c;任何操作都无法进行&#xff01; 点击 OK 去下载&#xff0c;完成之后&#xff0c;依旧是原样&#xff01; 0x01 解决办法 1、先去官网下载对应的模拟器&#xff1a; https://developer.apple.com/download/all/?q17.4 …

聚观早报 | 知乎Q3营收;华为Mate 70系列发布

聚观早报每日整理最值得关注的行业重点事件&#xff0c;帮助大家及时了解最新行业动态&#xff0c;每日读报&#xff0c;就读聚观365资讯简报。 整理丨Cutie 11月27日消息 知乎Q3营收 华为Mate 70系列发布 iQOO Neo 10拉力橙配色 英伟达展示AI模型Fugatto vivo S20 Pro核…

3D Gaussian Splatting综述 论文笔记

文章目录 参考资料 参考资料 A Survey on 3D Gaussian Splatting精读 3DGaussianSplatting技术的影响会有多大&#xff1f; - Kedreamix的回答 - 知乎 https://www.zhihu.com/question/626506306/answer/3375816824 3DGS综述《A Survey on 3D Gaussian Splatting》 【论文笔记…

记录pbootcms提示:登录失败:表单提交校验失败,请刷新后重试的解决办法

问题描述 pbootcms后台登录的时候提示“登录失败&#xff1a;表单提交校验失败,请刷新后重试!” 解决办法 删除runtime目录&#xff0c;或尝试切换PHP版本&#xff0c;选择7.3或5.6一般就能解决了。