【逆向】使用 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 应用程序动态分析与加密算法逆向的介绍,希望对您有所帮助。

相关推荐
yunsr2 分钟前
python作业3
开发语言·python
历程里程碑3 分钟前
普通数组-----除了自身以外数组的乘积
大数据·javascript·python·算法·elasticsearch·搜索引擎·flask
曦月逸霜4 分钟前
Python快速入门——学习笔记(持续更新中~)
笔记·python·学习
摸鱼的春哥4 分钟前
春哥的Agent通关秘籍07:5分钟实现文件归类助手【实战】
前端·javascript·后端
4311媒体网5 分钟前
C语言操作符全解析 C语言操作符详解
java·c语言·jvm
淡忘_cx6 分钟前
使用Jenkins自动化部署spring-java项目+宝塔重启项目命令(2.528.2版本)
java·自动化·jenkins
喵手6 分钟前
Python爬虫实战:采集菜谱网站的“分类/列表页”(例如“家常菜”或“烘焙”频道)数据,构建高可用的美食菜谱数据采集流水线(附CSV导出)!
爬虫·python·爬虫实战·零基础python爬虫教学·采集菜谱网站数据·家常菜或烘焙频道·构建高可用食谱数据采集系统
念念不忘 必有回响7 分钟前
viepress:vue组件展示和源码功能
前端·javascript·vue.js
喵手7 分钟前
Python爬虫实战:硬核解析 Google Chrome 官方更新日志(正则+文本清洗篇)(附 CSV 导出)!
爬虫·python·爬虫实战·零基础python爬虫教学·csv导出·监控谷歌版本发布历史·获取稳定版更新日志
小邓睡不饱耶10 分钟前
实战|W餐饮平台智能化菜品推荐方案(含Spark实操+算法选型+完整流程)
python·ai·ai编程·ai写作