console.log("[*] mono_base.js loaded");
var mono = Process.findModuleByName("libmono.so");
if (!mono) {
console.log("libmono.so not found");
return;
}
var mono_method_get_name_ptr = mono.getExportByName("mono_method_get_name");
var mono_runtime_invoke_ptr = mono.getExportByName("mono_runtime_invoke");
var mono_method_get_class_ptr = mono.getExportByName("mono_method_get_class");
var mono_class_get_name_ptr = mono.getExportByName("mono_class_get_name");
var mono_method_get_name = new NativeFunction(
mono_method_get_name_ptr, "pointer", ["pointer"]
);
var mono_method_get_class = new NativeFunction(
mono_method_get_class_ptr, "pointer", ["pointer"]
);
var mono_class_get_name = new NativeFunction(
mono_class_get_name_ptr, "pointer", ["pointer"]
);
var orig_mono_runtime_invoke = new NativeFunction(
mono_runtime_invoke_ptr,
"pointer",
["pointer", "pointer", "pointer", "pointer"]
);
Interceptor.replace(
mono_runtime_invoke_ptr,
new NativeCallback(function (method, obj, params, exc) {
var klass = mono_method_get_class(method);
var className = mono_class_get_name(klass).readCString();
var methodName = mono_method_get_name(method).readCString();
if (className === "Bone" && methodName === "OnCollisionEnter") {
console.log("[BLOCK] " + className + "::" + methodName);
return ptr(0);
}
return orig_mono_runtime_invoke(method, obj, params, exc);
}, "pointer", ["pointer", "pointer", "pointer", "pointer"])
);