[安全] Frida Labs 0x6

没啥好说的, 知识点前面都提过了, 可以自己试着做一做

思路是调用 MainActivity 实例的 get_flag() 方法, 该方法需要一个 Checker 类的参数, 故实例化一个 Checker 类并对其赋值, 然后传入 get_flag() 的调用中即可

import Java from "frida-java-bridge";
 
if (Java.available) {
    Java.perform(() => {
        const MainActivity = Java.use("com.ad2001.frida0x6.MainActivity");
        const Checker      = Java.use("com.ad2001.frida0x6.Checker");
        const checker      = Checker.$new();
        checker.num1.value = 1234;
        checker.num2.value = 4321;
        MainActivity.onCreate.overload("android.os.Bundle").implementation = 
        function (savedInstanceState: any) {
            this.onCreate(savedInstanceState);
            this.get_flag(checker);
        };
    });
} else {
    console.log("No Java VM in this process");
}

frida -U -f com.ad2001.frida0x6 -l _agent.js

当然也可以使用 0x5 那里说的 Java.choose(...)

官方 Solution 的 exp

Java.performNow(function() {
    Java.choose('com.ad2001.frida0x6.MainActivity', {
        onMatch: function(instance) {
            console.log("Instance found");
 
            var checker = Java.use("com.ad2001.frida0x6.Checker");
            var checker_obj  = checker.$new();  // Class Object
            checker_obj.num1.value = 1234; // num1
            checker_obj.num2.value = 4321; // num2
            instance.get_flag(checker_obj); // invoking the get_flag method
        },
        onComplete: function() {}
    });
});