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


不愿染是与非 怎料事与愿违
心中的花枯萎 时光它去不回
回忆辗转来回 痛不过这心扉
愿只愿余生无悔 随花香远飞
                     🎵 毛不易《不染》


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

Frida 框架简介

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

反编译分析源码

    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 应用程序中的加密算法:

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

相关推荐

  1. Frida逆向利用自动化

    2024-03-16 07:54:01       33 阅读
  2. app逆向-frida-rpc详解

    2024-03-16 07:54:01       57 阅读
  3. 得物sign参数逆向分析Python算法还原

    2024-03-16 07:54:01       36 阅读
  4. ios 逆向分析,某业帮逆向算法(二)

    2024-03-16 07:54:01       62 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-16 07:54:01       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-16 07:54:01       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-16 07:54:01       87 阅读
  4. Python语言-面向对象

    2024-03-16 07:54:01       96 阅读

热门阅读

  1. PMS150C系列 应广8位OTP IO单片机

    2024-03-16 07:54:01       44 阅读
  2. ASP.NET-WebFoms常见前后端交互方式

    2024-03-16 07:54:01       46 阅读
  3. AcWing 4964.子矩阵

    2024-03-16 07:54:01       40 阅读
  4. Kafka的分区(partition和副本)

    2024-03-16 07:54:01       39 阅读
  5. android studio配置gradle

    2024-03-16 07:54:01       39 阅读
  6. 什么是深度学习?

    2024-03-16 07:54:01       41 阅读
  7. 【学习】目标检测中的anchor

    2024-03-16 07:54:01       38 阅读
  8. MacOS安装Homebrew详细教程以及案例

    2024-03-16 07:54:01       40 阅读
  9. 富格林:安全交易阻挠被骗攻略

    2024-03-16 07:54:01       47 阅读
  10. SQLZoo:SELECT from WORLD Tutorial/zh

    2024-03-16 07:54:01       39 阅读