【逆向】使用 Frida 进行 Android 应用程序动态分析与加密算法逆向


不愿染是与非 怎料事与愿违

心中的花枯萎 时光它去不回

回忆辗转来回 痛不过这心扉

愿只愿余生无悔 随花香远飞

🎵 毛不易《不染》


在移动应用程序开发中,保护用户数据的安全至关重要。加密算法是保护数据安全的重要手段之一。然而,对于开发者而言,了解应用程序中的加密算法是至关重要的,因为这有助于发现潜在的安全漏洞或进行安全审计。本文将介绍如何使用 Frida 框架来动态分析 Android 应用程序,并逆向其中的加密算法。

Frida 框架简介

Frida 是一个功能强大的动态分析工具,可以用于跟踪、修改和分析 Android 和 iOS 应用程序。它提供了一套强大的 API,允许用户使用 JavaScript、Python 或其他语言编写脚本,与目标应用程序进行交互。

反编译分析源码

java 复制代码
    public final boolean B(String str, String str2) {
        Intrinsics.checkNotNullParameter(str, "str");
        Intrinsics.checkNotNullParameter(str2, "str2");
        if (!(str.length() == 0 && str2.length() == 0) && StringsKt.startsWith$default(str2, "flag{", false, 2, (Object) null) && StringsKt.endsWith$default(str2, "}", false, 2, (Object) null)) {
            String substring = str2.substring(5, str2.length() - 1);
            Intrinsics.checkNotNullExpressionValue(substring, "this as java.lang.String...ing(startIndex, endIndex)");
            C c = C.INSTANCE;
            MD5Utils mD5Utils = MD5Utils.INSTANCE;
            Base64Utils base64Utils = Base64Utils.INSTANCE;
            String encode = B.encode(str + "Wuaipojie2023");
            Intrinsics.checkNotNullExpressionValue(encode, "encode(str3)");
            byte[] bytes = encode.getBytes(Charsets.UTF_8);
            Intrinsics.checkNotNullExpressionValue(bytes, "this as java.lang.String).getBytes(charset)");
            return Intrinsics.areEqual(substring, c.cipher(mD5Utils.MD5(base64Utils.encodeToString(bytes)), 5));
        }
        return false;
    }

代码示例

下面是一个使用 Frida 框架的 Python 脚本,用于动态分析 Android 应用程序中的加密算法:

python 复制代码
# -*- coding:utf-8 -*-
import frida

jsCode = """
function test(data) {
    var result = "";
    Java.perform(function () {
        let B = Java.use("com.zj.wuaipojie2023_1.B");
        var data_1 = data + "Wuaipojie2023";
        console.log("data_1:");
        console.log(data_1);
        var step_0 = B.encode(data_1);
        console.log("step_0:");
        console.log(step_0);
        let J = Java.use("java.lang.String");
        step_0 = J.$new(step_0);
        var step_1 = step_0.getBytes();
        console.log("step_1:");
        console.log(step_1);
        let Base64Utils = Java.use("com.zj.wuaipojie2023_1.Base64Utils");
        var step_2 = Base64Utils.INSTANCE.value.encodeToString(step_1);
        console.log("step_2: " + step_2);
        let MD5Utils = Java.use("com.zj.wuaipojie2023_1.MD5Utils");
        var step_3 = MD5Utils.INSTANCE.value.MD5(step_2);
        console.log("step_3: " + step_3);
        let C = Java.use("com.zj.wuaipojie2023_1.C");
        var step_4 = C.INSTANCE.value.cipher(step_3,5);
        console.log("step_4: " + step_4);
        result = step_4;
        
    });
    return result;
}


    
rpc.exports = {
    getEncode: test
    
};
"""



process = frida.get_usb_device().attach('com.zj.wuaipojie2023_1')
script = process.create_script(jsCode)
script.load()

ret = script.exports.get_encode("1")
print(ret)
# data_1: 1Wuaipojie2023
# step_0: bGT[E]_[P
# step_1: [object Object]
# step_2: A2JHVFtFXV9bUA==
# step_3: aca82615e348d61e7d1614cc6633d509
# step_4: fhf82615j348i61j7i1614hh6633i509
# fhf82615j348i61j7i1614hh6633i509

代码说明

上述代码通过 Frida 框架连接到目标 Android 应用程序,并执行 JavaScript 代码。JavaScript 代码中通过调用 Java 类和方法来执行加密算法,并通过 RPC 机制将加密结果暴露给外部调用。

结论

通过使用 Frida 框架,我们可以方便地进行 Android 应用程序的动态分析,并深入了解其中的加密算法。这有助于开发者发现潜在的安全漏洞,并加强应用程序的安全性。Frida 框架的强大功能为移动安全研究提供了有力的工具支持。

以上就是使用 Frida 框架进行 Android 应用程序动态分析与加密算法逆向的介绍,希望对您有所帮助。

相关推荐
2301_809204701 小时前
bootstrap怎么实现鼠标悬停切换图片预览功能
jvm·数据库·python
Tigshop开源商城4 小时前
『物流设置+SEO优化』Tigshop开源商城系统 JAVA v5.8.26 版本更新!
java·开源商城系统·tigshop
小徐学编程-zZ5 小时前
量产测试数据
python·压力测试·数据库架构
QQ8057806515 小时前
django基于机器学习的电商评论情感分析系统设计实现
python·机器学习·django
wx09095 小时前
stata实现机器学习的环境配置
python·机器学习·stata
Tigshop开源商城6 小时前
『订单税率+收货地址校验国家字段』功能上新|跨境运营更高效,Tigshop开源商城系统 JAVA v5.8.23 版本更新
java·开源商城系统·tigshop
不会敲代码16 小时前
手写 Zustand:三十分钟带你搞懂状态管理库的核心原理
前端·javascript·源码
神奇的程序员6 小时前
重构了自己5年前写的截图插件
前端·javascript·架构
REDcker6 小时前
C++变量存储与ELF段布局详解 从const全局到rodata与nm_readelf验证实践
java·c++·面试
橙淮6 小时前
从优化到安全再到未来 ——JavaScript 全维度技术指南
javascript