hook_RegisterNatives.js 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. function find_RegisterNatives(params) {
  2. var symbols = Module.enumerateSymbolsSync("libart.so");
  3. var addrRegisterNatives = null;
  4. for (var i = 0; i < symbols.length; i++) {
  5. var symbol = symbols[i];
  6. //_ZN3art3JNI15RegisterNativesEP7_JNIEnvP7_jclassPK15JNINativeMethodi
  7. if (symbol.name.indexOf("art") >= 0 &&
  8. symbol.name.indexOf("JNI") >= 0 &&
  9. symbol.name.indexOf("RegisterNatives") >= 0 &&
  10. symbol.name.indexOf("CheckJNI") < 0) {
  11. addrRegisterNatives = symbol.address;
  12. console.log("RegisterNatives is at ", symbol.address, symbol.name);
  13. hook_RegisterNatives(addrRegisterNatives)
  14. }
  15. }
  16. }
  17. function hook_RegisterNatives(addrRegisterNatives) {
  18. if (addrRegisterNatives != null) {
  19. Interceptor.attach(addrRegisterNatives, {
  20. onEnter: function (args) {
  21. console.log("[RegisterNatives] method_count:", args[3]);
  22. var env = args[0];
  23. var java_class = args[1];
  24. var class_name = Java.vm.tryGetEnv().getClassName(java_class);
  25. //console.log(class_name);
  26. var methods_ptr = ptr(args[2]);
  27. var method_count = parseInt(args[3]);
  28. for (var i = 0; i < method_count; i++) {
  29. var name_ptr = Memory.readPointer(methods_ptr.add(i * Process.pointerSize * 3));
  30. var sig_ptr = Memory.readPointer(methods_ptr.add(i * Process.pointerSize * 3 + Process.pointerSize));
  31. var fnPtr_ptr = Memory.readPointer(methods_ptr.add(i * Process.pointerSize * 3 + Process.pointerSize * 2));
  32. var name = Memory.readCString(name_ptr);
  33. var sig = Memory.readCString(sig_ptr);
  34. var find_module = Process.findModuleByAddress(fnPtr_ptr);
  35. console.log("[RegisterNatives] java_class:", class_name, "name:", name, "sig:", sig, "fnPtr:", fnPtr_ptr, " fnOffset:", ptr(fnPtr_ptr).sub(find_module.base), " callee:", DebugSymbol.fromAddress(this.returnAddress));
  36. }
  37. }
  38. });
  39. }
  40. }
  41. setImmediate(find_RegisterNatives);