Il2cppBridgeApi.js 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. import {Il2cppHacker} from "./Il2cppHacker";
  2. import {Il2cppMetadataUsageObj} from "../struct/Il2cppMetadataUsageObj";
  3. import {Il2cppGenericInstObj} from "../struct/Il2cppGenericInstObj";
  4. let nativeFunMap = new Map();
  5. export var Il2cppBridgeApi = {
  6. nativeFunNotExistMap: new Map(),
  7. il2cpp_usage_obj_get_usage(medataUsage){
  8. let getusage = this.load("_ZN14MetadataParser26il2cpp_usage_obj_get_usageEP22IL2CppMetadataUsageObj","uint32",['pointer']);
  9. return getusage(medataUsage);
  10. },
  11. il2cpp_usage_obj_get_obj(medataUsage){
  12. let il2cpp_usage_obj_get_obj = this.load("_ZN14MetadataParser24il2cpp_usage_obj_get_objEP22IL2CppMetadataUsageObj","pointer",['pointer']);
  13. return il2cpp_usage_obj_get_obj(medataUsage);
  14. },
  15. il2cpp_usage_obj_get_addr(medataUsage){
  16. let addr = this.load("_ZN14MetadataParser25il2cpp_usage_obj_get_addrEP22IL2CppMetadataUsageObj","uint64",['pointer']);
  17. return addr(medataUsage);
  18. },
  19. il2cpp_usage_obj_get_metadataUsageIndex(medataUsage){
  20. let metadataIndex = this.load("_ZN14MetadataParser39il2cpp_usage_obj_get_metadataUsageIndexEP22IL2CppMetadataUsageObj","uint32",['pointer']);
  21. return metadataIndex(medataUsage);
  22. },
  23. il2cpp_usage_obj_get_stringLiteralIndex(medataUsage){
  24. let il2cpp_usage_obj_get_stringLiteralIndex = this.load("_ZN14MetadataParser39il2cpp_usage_obj_get_stringLiteralIndexEP22IL2CppMetadataUsageObj","uint32",['pointer']);
  25. return il2cpp_usage_obj_get_stringLiteralIndex(medataUsage);
  26. },
  27. il2cpp_usage_obj_get_stringLiteral(medataUsage){
  28. let il2cpp_usage_obj_get_stringLiteral = this.load("_ZN14MetadataParser34il2cpp_usage_obj_get_stringLiteralEP22IL2CppMetadataUsageObj","pointer",['pointer']);
  29. return il2cpp_usage_obj_get_stringLiteral(medataUsage);
  30. },
  31. getIl2cppConstantOffset(addr){
  32. let getIl2cppConstantOffset = this.load("_ZN14MetadataParser23getIl2cppConstantOffsetEm","uint64",['uint64']);
  33. return getIl2cppConstantOffset(addr);
  34. },
  35. getStringLiteralCount(){
  36. let getStringLiteralCount = this.load("_ZN14MetadataParser21getStringLiteralCountEv","uint",[]);
  37. return getStringLiteralCount();
  38. },
  39. getStringLiteralObjFromIndex(index){
  40. let getStringLiteralObjFromIndex = this.load("_ZN14MetadataParser28getStringLiteralObjFromIndexEj","pointer",['uint32']);
  41. return new Il2cppMetadataUsageObj(getStringLiteralObjFromIndex(index));
  42. },
  43. setGetTypeInfoFromTypeIndexAddr(addr){
  44. let setGetTypeInfoFromTypeIndexAddr = this.load("_ZN14MetadataParser31setGetTypeInfoFromTypeIndexAddrEm","void",['uint64']);
  45. return setGetTypeInfoFromTypeIndexAddr(addr);
  46. },
  47. getIl2CppMetadataRegistrationTypeCount(){
  48. let getIl2CppMetadataRegistrationTypeCount = this.load("_ZN14MetadataParser38getIl2CppMetadataRegistrationTypeCountEv","uint",[]);
  49. return getIl2CppMetadataRegistrationTypeCount();
  50. },
  51. getIl2CppMetadataTypeInfoFromIndex(index){
  52. let getIl2CppMetadataTypeInfoFromIndex = this.load("_ZN14MetadataParser34getIl2CppMetadataTypeInfoFromIndexEj","pointer",['uint32']);
  53. return new Il2cppMetadataUsageObj(getIl2CppMetadataTypeInfoFromIndex(index));
  54. },
  55. getIl2CppTypeInfoFromIndex(index){
  56. let getIl2CppTypeInfoFromIndex = this.load("_ZN14MetadataParser26getIl2CppTypeInfoFromIndexEj","pointer",['uint32']);
  57. return new Il2cppMetadataUsageObj(getIl2CppTypeInfoFromIndex(index));
  58. },
  59. getFieldRefsCount(){
  60. let getFieldRefsCount = this.load("_ZN14MetadataParser17getFieldRefsCountEv","uint",[]);
  61. return getFieldRefsCount();
  62. },
  63. getFieldInfoObjFromIndex(index){
  64. let getFieldInfoObjFromIndex = this.load("_ZN14MetadataParser24getFieldInfoObjFromIndexEj","pointer",['uint32']);
  65. return new Il2cppMetadataUsageObj(getFieldInfoObjFromIndex(index));
  66. },
  67. getIl2cppGenericInstObjCount(){
  68. let getIl2cppGenericInstObjCount = this.load("_ZN14MetadataParser28getIl2cppGenericInstObjCountEv","int32",[]);
  69. return getIl2cppGenericInstObjCount();
  70. },
  71. getIl2cppGenericInstObjFromIndex(index){
  72. let getIl2cppGenericInstObjFromIndex = this.load("_ZN14MetadataParser32getIl2cppGenericInstObjFromIndexEj","pointer",['uint32']);
  73. return new Il2cppGenericInstObj(getIl2cppGenericInstObjFromIndex(index));
  74. },
  75. il2cpp_genericInst_obj_get_method_addr(obj){
  76. let il2cpp_genericInst_obj_get_method_addr = this.load("_ZN18Il2cppBridgeHelper38il2cpp_genericInst_obj_get_method_addrEP20Il2cppGenericInstObj","uint64",['pointer']);
  77. return il2cpp_genericInst_obj_get_method_addr(obj);
  78. },
  79. il2cpp_genericInst_obj_get_class_name(obj){
  80. let il2cpp_genericInst_obj_get_class_name = this.load("_ZN18Il2cppBridgeHelper37il2cpp_genericInst_obj_get_class_nameEP20Il2cppGenericInstObj","pointer",['pointer']);
  81. return il2cpp_genericInst_obj_get_class_name(obj);
  82. },
  83. il2cpp_genericInst_obj_get_class_spaze(obj){
  84. let il2cpp_genericInst_obj_get_class_spaze = this.load("_ZN18Il2cppBridgeHelper38il2cpp_genericInst_obj_get_class_spazeEP20Il2cppGenericInstObj","pointer",['pointer']);
  85. return il2cpp_genericInst_obj_get_class_spaze(obj);
  86. },
  87. il2cpp_genericInst_obj_get_method_name(obj){
  88. let il2cpp_genericInst_obj_get_method_name = this.load("_ZN18Il2cppBridgeHelper38il2cpp_genericInst_obj_get_method_nameEP20Il2cppGenericInstObj","pointer",['pointer']);
  89. return il2cpp_genericInst_obj_get_method_name(obj);
  90. },
  91. getMethodTableCount(){
  92. let getMethodTableCount = this.load("_ZN14MetadataParser19getMethodTableCountEv","int32",[]);
  93. return getMethodTableCount();
  94. },
  95. getIl2cppMethodObjFromIndex(index){
  96. let getIl2cppMethodObjFromIndex = this.load("_ZN14MetadataParser27getIl2cppMethodObjFromIndexEj","pointer",['uint32']);
  97. return new Il2cppGenericInstObj(getIl2cppMethodObjFromIndex(index));
  98. },
  99. start64(base, size) {
  100. let _ZN8SoDumper7start64Emm = this.load("_ZN8SoDumper7start64Emm","void",["uint64","uint64"]);
  101. return _ZN8SoDumper7start64Emm(base,size);
  102. },
  103. getMetadataMethodTableCount(){
  104. let getMetadataMethodTableCount = this.load("_ZN14MetadataParser27getMetadataMethodTableCountEv","int32",[]);
  105. return getMetadataMethodTableCount();
  106. },
  107. getMetadataMethodObjFromIndex(index){
  108. let getMetadataMethodObjFromIndex = this.load("_ZN14MetadataParser29getMetadataMethodObjFromIndexEj","pointer",['uint32']);
  109. return new Il2cppMetadataUsageObj(getMetadataMethodObjFromIndex(index));
  110. },
  111. startInject(il2cppHandler) {
  112. let _Z6injectPv = this.load("_Z6injectPv","void",['pointer']);
  113. return _Z6injectPv(il2cppHandler);
  114. },
  115. /**
  116. * 使用内存缓存加快dump速度
  117. * @param exportName
  118. * @param reType
  119. * @param argTypes
  120. * @returns {any}
  121. */
  122. load: function (exportName, reType, argTypes) {
  123. // new NativeFunction(Module.findExportByName(soName, "il2cpp_domain_get"), 'pointer', []);
  124. let cacheFun = nativeFunMap.get(exportName);
  125. if (cacheFun == null) {
  126. let isExist = this.nativeFunNotExistMap.get(exportName);
  127. if (isExist === -1) {
  128. return undefined;
  129. }
  130. let nativePointer = Il2cppHacker.getDumpModule().findExportByName(exportName);
  131. if (nativePointer == null) {
  132. this.nativeFunNotExistMap.set(exportName, -1);
  133. return undefined;
  134. } else {
  135. cacheFun = new NativeFunction(nativePointer, reType, argTypes);
  136. nativeFunMap.set(exportName, cacheFun);
  137. }
  138. }
  139. return nativeFunMap.get(exportName);
  140. },
  141. }