| 517 | static array_attach_failed = new Array(); |
| 518 | static array_methodValue_cache = new Array(); |
| 519 | static addBreakPoint(imgOrClsPtr = "CommonClass") { |
| 520 | if (imgOrClsPtr instanceof NativePointer) { |
| 521 | innerImage(imgOrClsPtr); |
| 522 | } |
| 523 | else if (typeof imgOrClsPtr == "number") { |
| 524 | if (Process.arch == "arm64") |
| 525 | throw new Error("Use '0x..' instead of number"); |
| 526 | innerImage(ptr(imgOrClsPtr)); |
| 527 | } |
| 528 | else if (typeof imgOrClsPtr == "string") { |
| 529 | if (Process.arch == "arm64" && imgOrClsPtr.trim().startsWith("0x")) |
| 530 | return innerImage(ptr(imgOrClsPtr)); |
| 531 | if (imgOrClsPtr == "CommonClass" || imgOrClsPtr == "JNI" || imgOrClsPtr == "Soon") |
| 532 | return checkSpecialClass(imgOrClsPtr); |
| 533 | if (base_1.HookerBase._list_images_names.toString().includes(imgOrClsPtr)) { |
| 534 | base_1.HookerBase._list_images.forEach((image) => { |
| 535 | if (image.name.includes(imgOrClsPtr)) { |
| 536 | formart_1.formartClass.printTitile("Found : ImageName: " + imgOrClsPtr + " at " + image.handle); |
| 537 | innerImage(image.handle); |
| 538 | } |
| 539 | }); |
| 540 | } |
| 541 | else { |
| 542 | let clsPtr = findClass(imgOrClsPtr); |
| 543 | if (!clsPtr.isNull()) { |
| 544 | formart_1.formartClass.printTitile("Found : ClassName: " + imgOrClsPtr + " at " + clsPtr); |
| 545 | innerImage(clsPtr); |
| 546 | } |
| 547 | else { |
| 548 | let imageName = (0, fastest_levenshtein_1.closest)(imgOrClsPtr, base_1.HookerBase._list_images_names); |
| 549 | LOGE(`You mean this ? ${imageName} @ ${Il2Cpp.Domain.assemblies.filter(item => item.name.includes)[0].handle}`); |
| 550 | } |
| 551 | } |
| 552 | } |
| 553 | function innerImage(imgOrClsPtr) { |
| 554 | let lastSize = Breaker.map_attachedMethodInfos.size; |
| 555 | if (imgOrClsPtr.isNull()) |
| 556 | throw new Error("can't attach nullptr"); |
| 557 | if (base_1.HookerBase._list_images_pointers.map(item => Number(item)).includes(Number(imgOrClsPtr))) { |
| 558 | let imageHandle = imgOrClsPtr; |
| 559 | new Il2Cpp.Image(imageHandle).classes |
| 560 | .flatMap(cls => cls.methods) |
| 561 | .forEach(Breaker.attachMethod); |
| 562 | } |
| 563 | else { |
| 564 | let classHandle = imgOrClsPtr; |
| 565 | new Il2Cpp.Class(classHandle).methods.forEach(Breaker.attachMethod); |
| 566 | } |
| 567 | LOGO(`${getLine(40, "-")}\n Attached ${Breaker.map_attachedMethodInfos.size - lastSize} methods / All ${Breaker.map_attachedMethodInfos.size} methods\n${getLine(85, "-")}`); |
| 568 | } |
| 569 | function checkSpecialClass(type) { |
| 570 | if (type == "CommonClass") { |
| 571 | base_1.HookerBase._list_images.forEach((image) => { |
| 572 | if (CommonClass.includes(image.assembly.name)) { |
| 573 | formart_1.formartClass.printTitile("Found : ImageName: " + image.name + " at " + image.handle); |
| 574 | innerImage(image.handle); |
| 575 | } |
| 576 | }); |