天天看點

Frida注冊接口類

Frida注冊接口類要用到​

​Java.registerClass(spec)​

​。

Java.registerClass(spec): create a new Java class and return a wrapper

for it, where spec is an object containing:

name: String specifying the name of the class. superClass: (optional)

Super-class. Omit to inherit from java.lang.Object. implements:

(optional) Array of interfaces implemented by this class. fields:

(optional) Object specifying the name and type of each field to

expose. methods: (optional) Object specifying methods to implement.

APK源碼:

package com.github.androiddemo.Activity;

import android.content.Intent;

public class FridaActivity9 extends BaseFridaActivity {

    public interface Frida9Interface {
        boolean check();
    }

    private Frida9Interface getInstance() {
        return null;
    }

    @Override // com.github.androiddemo.Activity.BaseFridaActivity
    public String getNextCheckTitle() {
        return "目前第9關";
    }

    @Override // com.github.androiddemo.Activity.BaseFridaActivity
    public void onCheck() {
        try {
            if (getInstance().check()) {
                CheckSuccess();
                startActivity(new Intent(this, FridaActivity10.class));
                finishActivity(0);
                return;
            }
            super.CheckFailed();
        } catch (Exception unused) {
            super.CheckFailed();
        }
    }
}      
function hook_FridaActivity9() {
    Java.perform(function() {
        var Frida9Interface = Java.use("com.github.androiddemo.Activity.FridaActivity9$Frida9Interface");
        console.log(Frida9Interface);
        var Frida9InterfaceImpl = Java.registerClass({
            name : "com.github.androiddemo.Activity.FridaActivity9.Frida9InterfaceImpl",
            implements : [Frida9Interface],
            methods: {
                check () {
                    console.log("Frida9InterfaceImpl.check");
                    return true;
                }
            }
        })

        var FridaActivity9 = Java.use("com.github.androiddemo.Activity.FridaActivity9");
        FridaActivity9.getInstance.implementation = function() {
            console.log("FridaActivity9.getInstance");
            return Frida9InterfaceImpl.$new();
        }
    });
}