Frida Hook Java层代码与协议分析

移动App逆向实战:Frida动态Hook与协议分析全流程解析 在移动应用安全与开发领域,理解客户端与服务器之间的通信机制是核心技能。其原理涉及网络协议分析、数据加密解密以及应用层逻辑逆向。掌握这些技术对于进行安全评估、竞品分析或自动化测试具有重要价值。常见的应用场景包括分析API接口签名算法、破解数据加密流程以及模拟客户端行为。本文以典型阅读类App为例,详细演示了如何结合Fiddler抓包与Frida动态插桩,从HTTPS流量捕获开始,通过静态分析定位关键函数,最终利用Frida脚本成功Hook签名生成与AES解密过程,完整复现了数据交互协议。 阅读详情

Hook类中普通方法

在本文中,我们继续以某嘟牛应用为例,在用户点击登录按钮后,哪个方法会被调用。我们在上一篇文章中提到,搜索关键词 “Encrypt” 后,发现两个包含该字符串的 Java 方法。接下来,我们通过 Frida 分别 Hook 这两个方法,以测试点击登录后会调用哪个方法。以下是 Frida 脚本代码:

function HookMethod() {
    Java.perform(function () {
        var JsonRequest = Java.use("com.dodonew.online.http.JsonRequest");
        console.log("JsonRequest = ", JsonRequest);
        JsonRequest.paraMap.implementation = function (addMap){
            console.log("addMap = ", addMap);
            this.paraMap(addMap);
        }
        JsonRequest.addRequestMap.overload('java.util.Map', 'int').implementation = function (arg0,arg1) {
            console.log("addRequestMap params: ", arg0, arg1);
            var HashMap_arg0 = Java.cast(arg0, Java.use("java.util.HashMap"));
            console.log("addRequestMap params: ", HashMap_arg0.toString());
            this.addRequestMap(arg0, arg1);
        }
    });
}
function main () {
    HookMethod();
}
setImmediate(main);

在终端中执行以下命令以注入我们的 JavaScript 代码:

frida -U -f com.dodonew.online -l .\demo.js --no-pause

执行结果如下所示:
在这里插入图片描述
通过结果我们可以看出,点击登录后最终执行的方法为 addRequestMap。该方法的代码如下:

public void addRequestMap(Map<String, String> addMap, int a) {
    // 获取当前系统时间的时间戳,并将其转换为字符串
    String time = System.currentTimeMillis() + "";
    // 如果传入的 addMap 为空,则初始化一个新的 HashMap
    if (addMap == null) {
        addMap = new HashMap<>();
    }
    // 将时间戳加入到 addMap 中,键为 "timeStamp"
    addMap.put("timeStamp", time);
    // 调用 RequestUtil 类的 paraMap 方法,对 addMap 进行参数处理,生成一个包含签名的字符串
    String code = RequestUtil.paraMap(addMap, Config.BASE_APPEND, "sign"); 
    // 调用 RequestUtil 类的 encodeDesMap 方法,对生成的字符串进行 DES 加密,得到加密后的字符串
    String encrypt = RequestUtil.encodeDesMap(code, this.desKey, this.desIV);
    // 创建一个新的 JSONObject 对象
    JSONObject obj = new JSONObject();
    try {
        // 将加密后的字符串放入 JSON 对象中,键为 "Encrypt"
        obj.put("Encrypt", encrypt);
        // 将 JSON 对象转换为字符串,并赋值给 mRequestBody
        this.mRequestBody = obj + "";
    } catch (JSONException e) {
        // 捕获并打印 JSON 异常
        e.printStackTrace();
    }
}

协议分析

通过以上终端的输出,我们可以得知,输入的手机号码和密码并没有进行加密。因此,我们需要继续跟进代码,首先进入 RequestUtil.paraMap 方法,代码如下:

public static String paraMap(Map<String, String> addMap, String append, String sign) {
    try {
        // 获取传入的 Map 的键集
        Set<String> keyset = addMap.keySet();
        // 用于拼接字符串的 StringBuilder
        StringBuilder builder = new StringBuilder();
        // 用于存储键值对的列表
        List<String> list = new ArrayList<>();
        
        // 遍历键集,将每个键值对以 "key=value" 的形式添加到列表中
        for (String keyName : keyset) {
            list.add(keyName + "=" + addMap.get(keyName));
        } 
        // 对列表进行排序
        Collections.sort(list);
        // 遍历排序后的列表,将每个键值对拼接到 StringBuilder 中,以 "&" 分隔
        for (int i = 0; i < list.size(); i++) {
            builder.append(list.get(i));
            builder.append("&");
        }
        // 将追加字符串(append)拼接到字符串的末尾
        builder.append("key=" + append);
        // 计算字符串的 MD5 哈希值,并转换为大写
        String checkCode = Utils.md5(builder.toString()).toUpperCase();
        // 将计算出的签名(checkCode)放入传入的 Map 中,键为 "sign"
        addMap.put("sign", checkCode);
        // 将 Map 按键排序后转换为 JSON 字符串
        String result = new Gson().toJson(sortMapByKey(addMap));
        // 打印日志,调试用
        Log.w(AppConfig.DEBUG_TAG, result + "   result");
        // 返回生成的 JSON 字符串
        return result;
    } catch (Exception e) {
        // 捕获并打印异常
        e.printStackTrace();
        return "";
    }
}

在 paraMap 方法中,调用了 Utils.md5 方法(调用 Utils.md5 之前都是明文)。为了了解传入的值如何进行 MD5 加密,我们需要 Hook 这个方法,查看传入的数据和加密后的结果,代码如下:

var utils = Java.use("com.dodonew.online.util.Utils");
utils.md5.implementation = function (arg0) {
    console.log("md5 params: ", arg0);
    var retval = this.md5(arg0);
    console.log("md5 retval: ", retval);
    return retval;
}

运行结果如下:
在这里插入图片描述
通过测试可知,Utils.md5 为标准的 MD5 算法。

在执行完成 RequestUtil.paraMap 方法后,返回的为 JSON 格式的字符串。接着我们 Hook RequestUtil.encodeDesMap 方法,代码如下:

var RequestUtil = Java.use("com.dodonew.online.http.RequestUtil");
RequestUtil.encodeDesMap.overload('java.lang.String', 'java.lang.String', 'java.lang.String').implementation = function (arg0,arg1,arg2) {
    console.log("encodeDesMap arg0: ", arg0);
    console.log("encodeDesMap arg1: ", arg1);
    console.log("encodeDesMap arg2: ", arg2);
    var ret = this.encodeDesMap(arg0,arg1,arg2);
    console.log("ret = ",ret);
    return ret;
}

此时我们可以看到传入的三个参数,如下图:
在这里插入图片描述
至此我们已经看到了输入的明文账号和密码,以及加密后的数据。

逆向工程实战:突破App长连接抓包与加密协议解析 在移动应用开发与安全分析领域,网络通信抓包是理解应用行为、进行协议分析和安全评估的基础技术。其核心原理是通过拦截和解析应用与服务器之间的数据流,将网络传输的二进制或加密数据转换为可读信息。传统基于HTTP/HTTPS代理的抓包方法,在面对采用自定义TCP长连接与私有加密协议的应用时往往失效,因为这些数据流可能绕过系统代理设置或使用非标准端口。为了应对这一挑战,动态代码注入技术(如Frida)展现出极高的技术价值,它允许在应用运行时拦截关键函数调用,直接获取加密前后的明文数据或密钥。这种技术广泛应用于移动安全 阅读详情

相关推荐

App安全攻防实战:逆向分析与加固技术深度解析

在移动应用开发领域,逆向工程与代码加固是保障App安全的核心技术。逆向工程通过静态分析和动态分析,深入理解应用内部逻辑与数据流,帮助开发者发现潜在漏洞与风险点。其技术价值在于从攻击者视角审视自身防御体系,提升应用抗攻击能力。在实际应用场景中,逆向分析常用于安全审计、漏洞挖掘与竞品研究,而加固技术则通过代码混淆、反调试等手段增加攻击门槛。本文聚焦于Frida动态插桩与SSL Pinning绕过等热词技术,结合实战案例,系统阐述如何构建有效的App安全防线。

weixin_30932215的博客 686

frida的hook代码:在python中格式,以及常用hook方法

简单的聊了一些frida在python中使用的格式: Java.perform(),以及Java.use或者Java.choose ,还有对重载方法的调用。

u011863822的博客 4117

frida hook java和so层函数常用脚本

逆向时用frida hook java层相对比较简单,找准hook点用objection就行!或则自己写脚本hook java常见的加密/编码也很简单,核心原因就是类名、函数名称得以保留,逆向人员能快速定位!java层常见的加密/编码hook脚本这里有:https://www.cnblogs.com/theseventhson/p/14852458.html ; java层的解决了? so层怎么办了? 因为so层用c/c++写的,编译后的release版本把变量名、函数名都去掉了,加密/编码算法单从名称上.

寒梅独自开 5998

Frida—HOOK 学习笔记2

frida

天在等我,菜鸟想飞 4040

Android逆向之旅—Hook神器Frida使用详解

一、前言 在逆向过程中有一个Hook神器是必不可少的工具,之前已经介绍了Xposed和Substrate了,在不同场景下面这两个框架工具具备各自的用途,当然Xposed现在也是我最常用的框架工具,不了解的同学可以看这两篇文章:Android中Hook神器Xposed工具介绍和Android中Hook神器SubstrateCydia工具介绍这两篇文章非常重要一个是Hook Java层的时候最...

尼古拉斯.赵四的博客 6602

frida加密参数通杀hook代码(免脱壳)

【代码】frida加密参数通杀hook代码(免脱壳)

云霄IT的博客 4746

技术分享 | Frida 实现 Hook 功能的强大能力

Frida 通过 C 语言将 QuickJS 注入到目标进程中,获取完整的内存操作权限,达到在程序运行时实时地插入额外代码和数据的目的。官方将调用代码封装为 python 库,当然你也可以直接通过其他的语言调用 Frida 中的 C 语言代码进行操作。

hogwarts_beibei的博客 808

python之frida安卓逆向之hook大法好

pip install frida-tools pip install frida 运行以上代码安装frida

云霄IT的博客 5981

Frida实战:逆向分析APP加密与证书绑定防护

在移动应用安全领域,逆向工程是理解应用内部逻辑、分析数据流与通信协议的核心技术。其基本原理是通过静态与动态分析相结合的方法,解析应用代码与运行时行为。这项技术的核心价值在于帮助安全研究人员、开发人员深入理解应用工作机制,识别潜在漏洞,并用于安全评估与协议研究。在实际应用场景中,常需应对代码混淆、加密算法和反调试机制等防护措施。以Frida这一动态插桩工具为例,它允许在应用运行时注入脚本,实时监控和修改函数行为,成为突破防护的关键。本文聚焦于使用Frida解决两个典型难题:绕过HTTPS证书绑定(SSL Pi

weixin_30681121的博客 410

从零到一:DETR模型在自定义数据集上的实战部署与调优

本文详细介绍了DETR模型在自定义数据集上的实战部署与调优过程,包括环境准备、数据转换、模型配置、训练技巧及问题排查。通过具体代码示例和实用建议,帮助开发者高效完成从零到一的DETR模型部署,特别适合目标检测领域的实践应用。

weixin_42524100的博客 463

IMU660RA姿态解算实战:从传感器滤波到欧拉角输出的完整实现

本文详细介绍了IMU660RA姿态解算的完整实现过程,从传感器滤波到欧拉角输出。通过实战案例和代码示例,展示了如何有效处理陀螺仪和加速度计的噪声问题,并选择合适的算法进行数据融合和姿态解算。特别强调了欧拉角输出中的坐标系对齐和动态补偿技巧,帮助工程师快速掌握IMU660RA的应用。

weixin_42524762的博客 386

Frida实战Android协议分析:从Hook到算法还原完整指南

协议分析是移动安全与逆向工程中的核心技术,它通过动态插桩、代码注入等手段,深入理解应用与服务器间的通信机制。其原理在于运行时监控和修改应用行为,从而揭示数据加密、签名生成等关键逻辑。这项技术的价值在于提升应用安全评估能力、支持合规的自动化测试与数据采集,并深化对移动架构的理解。典型的应用场景包括安全审计、爬虫开发和漏洞挖掘。本文聚焦于使用Frida进行Android应用协议分析的完整实战流程,涵盖环境搭建、关键方法定位、算法还原及对抗策略,并深入探讨了Hook技术和堆栈回溯法在破解混淆代码中的应用。

weixin_33694620的博客 409

ICC2 实战秘籍:create_workspace 命令全解析

必选项:工作区名称,这可是创建工作区的 “身份证”,必不可少。技术数据选项匹配:优先考虑用 -technology 直接加载技术文件,这是获取最新、最准确技术数据的首选路径;要是已经有合适的技术库了,那 -use_technology_lib 引用现有技术库也能快速上手。精度设置优先规则:技术文件自动配置排在第一位,能自动适配就别手动操心;要是自动配置不理想,那就显式指定 scale_factor;实在没要求,就用默认配置,但得清楚它的精度限制。

weixin_50820814的博客 1124

Android应用签名算法逆向:从抓包到Native层Hook实战

在移动应用安全与协议分析领域,签名算法是保障客户端与服务器通信安全的核心机制。其基本原理是通过对请求参数、时间戳等关键信息进行哈希运算和加密混淆,生成唯一的身份验证令牌,从而防止数据篡改和未授权访问。这项技术的核心价值在于为API接口提供身份认证与防重放攻击能力,是构建高安全性移动应用架构的基石。典型的应用场景包括短视频、社交、金融等应用的网络请求签名验证。本文以热门的sig3签名参数为具体分析对象,通过Frida动态插桩与IDA Pro静态分析相结合的方式,详细拆解了从应用层抓包、Java层定位到深入Na

weixin_34163553的博客 457

Abaqus复合材料层合板仿真

由于复合材料的损伤失效问题过于复杂,解析方法受到数学工具的限制难以实现,而实验也需要高昂的费用和时间成本难以广泛应用,Abaqus针对复合材料提供了专业的建模工具和损伤分析理论来模拟复合材料层合板在各种工况下的失效行为。

JXHXHL的博客 2541

MT4/MT5 第三代移动平均线(MetaTrader 指标)

第三代移动平均线(3G-MA)是传统MA指标的升级版本,通过"时滞压缩"算法将信号滞后降至理论极限(λ=2)。该指标在保留平滑性的同时,信号速度比EMA快1.5-2.3倍,适用于MT4/MT5平台。核心参数包括计算周期(默认34)、滞后压缩系数(2-10)和应用价位选择,支持斜率变色功能。安装简单,无需外部依赖,通过多周期共振可提升12-18%胜率。指标代码包含完整的MT4/MT5实现方案,采用双缓冲计算结构,通过相位前移算法抵消群延迟。风险提示:需配合其他技术指标和严格风控(≤2%账户

JanLEE 580

大麦抢票协议逆向实战指南

使用大麦App协议抢票是一项涉及。

2401_87822903的博客 2599

【MERRA-2数据集】M2I1NXASM (5.12.4) 和 M2I1NXINT (5.12.4)概述

M2I1NXASM (5.12.4) 和 M2I1NXINT (5.12.4)概述

WW、forever的博客 683

app decode1174算法分析

webview、app逆向、app算法分析、sign、deocde1174

看我名字、介绍或者查看文章总结处、置顶文章2766958292/ff2766958292 314

DCMM评估报告模板样例

这篇DCMM评估报告对某数据管理公司2020年的数据管理能力进行了全面分析。报告显示,该公司在数据战略方面取得初步进展,但在数据治理和数据架构方面仍存在明显不足,包括缺乏有效治理流程、数据质量监控不足,以及数据标准化和转换灵活性不足等问题。评估报告提出了针对性改进建议,包括完善数据战略、建立治理流程、加强质量监控和提升数据转换灵活性等,为提升数据管理成熟度提供了重要指导。

cdfunlove的博客 166

2017年全国大学生电子设计竞赛综合测评题目解析——Multisim仿真

1.题目 给定两个单电源的双运放芯片READ2302G芯片(当时记得增益带宽积好像是6M),一片HD74LS74数字芯片双D触发器,需要详细电路图、手写报告,5个波形输出,测频,测幅,8:00公布题目,15:00停止答题,中间可以吃饭(也可以不吃继续做),15:00清场,休息一段时间后开始进场测试,打分。 2.要求 (1)一片运放搭建方波振荡电路,频率 20 KHz,误差 0.1 KHz,幅度 3...

DengFengLai123的博客 2万+

Android App逆向工程实战:从环境搭建到算法还原的完整流程

逆向工程是理解软件内部工作原理的关键技术,通过分析程序的结构和行为来揭示其实现逻辑。其核心原理包括静态分析和动态分析,静态分析通过反编译工具查看代码结构,动态分析则通过运行时监控观察程序行为。这项技术的价值在于帮助开发者学习优秀架构设计、优化技巧,同时协助安全研究者评估应用的数据安全和通信规范。在实际应用场景中,逆向工程常用于移动应用安全评估、协议分析和兼容性开发等领域。以某信息流App为例,使用Jadx进行静态代码分析可以定位网络请求和签名逻辑,而Frida动态插桩则能实时Hook关键函数,验证算法实现。

weixin_30521161的博客 358

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

5、frida进阶-Android逆向之旅---Hook神器家族的Frida工具使用详解

本文转载自:https://www.cnblogs.com/qwangxiao/p/9255328.html 一、前言 在逆向过程中有一个Hook神器是必不可少的工具,之前已经介绍了Xposed和Substrate了,不了解的同学可以看这两篇文章:Android中Hook神器Xposed工具介绍和Android中Hook神器SubstrateCydia工具介绍这两篇文章非常重要一个...

键盘的起始页 1万+

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

frida hook so层方法大全

文章转载,仅供学习,如有需要请支持原文章创作:https://kevinspider.github.io/fridahookso/ 1.感谢 2. frida env https://github.com/frida/frida-java-bridge/blob/master/lib/env.js 3.IDA 判断 Thumb 指令集和 Arm 指令集 IDA - Options - General - number of opcode bytes - 设置为 4 此时查看 IDA VIew 中 op.

菜鸡小白的成长记录 2万+

Frida Hook 常用函数、java 层 hook、so 层 hook、RPC、群控

Frida Hook 常用函数、java 层 hook、so 层 hook、RPC、群控

freeking101的博客 2万+

Frida Hook 入门(3)| Native 层代码 Hook 实战

在 Android 应用中,Native 层代码(通常用 C/C++ 编写)是很多安全研究和动态分析的重点领域,尤其是处理加密、解密、JNI 调用的场景。相比 Java 方法,Native 层 Hook 分析的难度更高,但 Frida 的强大功能让这一切变得简单。理解 Native 层 Hook 的基本原理使用 Frida Hook Native 函数实战案例:Hook JNI 函数Native 层 Hook 的常见挑战与解决方案。

weixin_65409651的博客 1938
上一篇: app逆向实战之定位关键代码
下一篇: Frida Hook String构造函数
LittleFishC
博客等级 码龄10年 163粉丝 70原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值