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();
}
});
}