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

相关推荐
〖是♂我〗26 分钟前
自定义数据集 使用scikit-learn中svm的包实现svm分类
开发语言·python
抱抱宝1 小时前
Pyecharts之特殊图表的独特展示
python·信息可视化·数据分析
一 乐1 小时前
基于vue船运物流管理系统设计与实现(源码+数据库+文档)
前端·javascript·数据库·vue.js·spring boot·后端·船运系统
m0_528723811 小时前
在React中使用redux
前端·javascript·react.js
傻小胖1 小时前
vue3中customRef的用法以及使用场景
前端·javascript·vue.js
谦谦橘子2 小时前
手把手教你实现一个富文本
前端·javascript
deephub2 小时前
Python GIL(全局解释器锁)机制对多线程性能影响的深度分析
python·机器学习·gil
jerry6092 小时前
注解(Annotation)
java·数据库·sql
Future_yzx2 小时前
Java Web的发展史与SpringMVC入门学习(SpringMVC框架入门案例)
java·前端·学习
MatpyMaster2 小时前
基于PyQt5打造的实用工具——PDF文件加图片水印,可调大小位置,可批量处理!
python·pdf