[安全] Frida Labs 0x4

首先在 jadx 的左侧这里可以看到所有的类
这可以发现一些 MainActivity 没有调用而隐藏起来的逻辑
jadx

确定以下主要逻辑
我们需要调用 get_flag 方法

public class Check {
    public String get_flag(int a) {
        if (a == 1337) {
            byte[] decoded = new byte["I]FKNtW@]JKPFA\\[NALJr".getBytes().length];
            for (int i = 0; i < "I]FKNtW@]JKPFA\\[NALJr".getBytes().length; i++) {
                decoded[i] = (byte) ("I]FKNtW@]JKPFA\\[NALJr".getBytes()[i] ^ 15);
            }
            return new String(decoded);
        }
        return "";
    }
}

调用非静态方法的时候必须实例化, frida 中也有对应的 api

Java.perform(function() {
    var <class_reference> = Java.use("<package_name>.<class>");
    var <class_instance> = <class_reference>.$new(); // Class Object
    <class_instance>.<method>(); // Calling the method
})

依靠这个模板, 我们可以写出以下代码

import Java from "frida-java-bridge";
 
if (Java.available) {
    Java.perform(() => {
        const Check = Java.use("com.ad2001.frida0x4.Check");
        const check = Check.$new();
        const dec_s = check.get_flag(1337);
        console.log(typeof(dec_s), dec_s);
    });
} else {
    console.log("No Java VM in this process");
}