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

相关推荐
xiaogg36789 分钟前
阿里云k8s1.33部署yaml和dockerfile配置文件
java·linux·kubernetes
逆光的July25 分钟前
Hikari连接池
java
微风粼粼37 分钟前
eclipse 导入javaweb项目,以及配置教程(傻瓜式教学)
java·ide·eclipse
番茄Salad38 分钟前
Spring Boot临时解决循环依赖注入问题
java·spring boot·spring cloud
天若有情6731 小时前
Spring MVC文件上传与下载全面详解:从原理到实战
java·spring·mvc·springmvc·javaee·multipart
祈祷苍天赐我java之术1 小时前
Redis 数据类型与使用场景
java·开发语言·前端·redis·分布式·spring·bootstrap
Gitpchy1 小时前
Day 20 奇异值SVD分解
python·机器学习
MediaTea2 小时前
Python 第三方库:matplotlib(科学绘图与数据可视化)
开发语言·python·信息可视化·matplotlib
草莓熊Lotso2 小时前
C++ 方向 Web 自动化测试入门指南:从概念到 Selenium 实战
前端·c++·python·selenium
JS.Huang2 小时前
【JavaScript】原生函数
开发语言·javascript·ecmascript