| 7479 | exports.iterClassLoader = exports.listClassLoader = void 0; |
| 7480 | const formart_1 = require("../utils/formart"); |
| 7481 | class classLoaderManager { |
| 7482 | static iterClassLoader = (callback, log = false) => { |
| 7483 | Java.perform(() => { |
| 7484 | Java.enumerateClassLoaders({ |
| 7485 | onMatch: function (loader) { |
| 7486 | if (log) |
| 7487 | LOGD('classLoader' + loader.toString()); |
| 7488 | if (loader.toString().indexOf('dalvik.system.DexClassLoader') > -1) { |
| 7489 | if (callback != null) |
| 7490 | interCall(loader, callback); |
| 7491 | } |
| 7492 | else { |
| 7493 | if (callback != null) |
| 7494 | interCall(loader, callback); |
| 7495 | } |
| 7496 | }, onComplete: function () { } |
| 7497 | }); |
| 7498 | }); |
| 7499 | function interCall(loader, interCallBack) { |
| 7500 | Java.classFactory.loader = loader; |
| 7501 | interCallBack(loader); |
| 7502 | } |
| 7503 | }; |
| 7504 | static loaders = new Array(); |
| 7505 | static listClassLoader = (formart = true, needLog = true) => { |
| 7506 | if (!needLog && classLoaderManager.loaders.length === 0) { |
| 7507 | fillCacle(); |
| 7508 | return; |
| 7509 | } |
| 7510 | if (!formart) { |
| 7511 | Java.perform(() => classLoaderManager.iterClassLoader(() => { }, true)); |
| 7512 | } |
| 7513 | else { |
| 7514 | fillCacle(); |
| 7515 | let classLoaderList = ["java.lang.BootClassLoader", "dalvik.system.DexClassLoader", "dalvik.system.PathClassLoader", "dalvik.system.InMemoryDexClassLoader"]; |
| 7516 | classLoaderList.forEach((classLoaderName) => { |
| 7517 | formart_1.formartClass.printTitile(classLoaderName); |
| 7518 | this.loaders.forEach((loader) => { |
| 7519 | if (loader.toString().indexOf(classLoaderName) > -1) |
| 7520 | LOGD(' [' + classLoaderManager.loaders.indexOf(loader) + '] ' + loader.toString()); |
| 7521 | }); |
| 7522 | }); |
| 7523 | } |
| 7524 | function fillCacle() { |
| 7525 | if (classLoaderManager.loaders.length !== 0) |
| 7526 | return; |
| 7527 | Java.perform(() => classLoaderManager.iterClassLoader((loader) => { |
| 7528 | if (!classLoaderManager.loaders.includes(loader)) |
| 7529 | classLoaderManager.loaders.push(loader); |
| 7530 | }, false)); |
| 7531 | } |
| 7532 | }; |
| 7533 | static getClassLoaderByDescriptor = (descriptor) => { |
| 7534 | let ret = null; |
| 7535 | classLoaderManager.loaders.forEach((loader) => { |
| 7536 | if (loader.toString().indexOf(descriptor) > -1) |
| 7537 | ret = loader; |
| 7538 | }); |