frida-il2cpp-bridge-my
Version:
(my:Support IOS)Frida module to dump, manipulate and hijack any IL2CPP application at runtime with a high level of abstraction.
70 lines (69 loc) • 3.07 kB
JavaScript
;
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var _Il2CppDomain_1;
Object.defineProperty(exports, "__esModule", { value: true });
exports._Il2CppDomain = void 0;
const decorator_cache_getter_1 = require("decorator-cache-getter");
const accessor_1 = require("../../utils/accessor");
const console_1 = require("../../utils/console");
const api_1 = require("../api");
const native_struct_1 = require("../native-struct");
const decorators_1 = require("../decorators");
const assembly_1 = require("./assembly");
let _Il2CppDomain = _Il2CppDomain_1 = class _Il2CppDomain extends native_struct_1.NativeStruct {
get name() {
return api_1.Api._domainGetName(this.handle);
}
get assemblies() {
const accessor = new accessor_1.Accessor();
const sizePointer = Memory.alloc(Process.pointerSize);
const startPointer = api_1.Api._domainGetAssemblies(NULL, sizePointer);
if (startPointer.isNull()) {
console_1.raise("First assembly pointer is NULL.");
}
const count = sizePointer.readInt();
for (let i = 0; i < count; i++) {
const assembly = new assembly_1._Il2CppAssembly(startPointer.add(i * Process.pointerSize).readPointer());
accessor[assembly.name] = assembly;
}
return accessor;
}
static get reference() {
return (async () => {
const domainPointer = await new Promise(resolve => {
const start = api_1.Api._domainGetAssemblies(NULL, Memory.alloc(Process.pointerSize));
if (!start.isNull()) {
resolve(api_1.Api._domainGet());
}
else {
const interceptor = Interceptor.attach(api_1.Api._init, {
onLeave() {
setTimeout(() => interceptor.detach());
resolve(api_1.Api._domainGet());
}
});
}
});
api_1.Api._threadAttach(domainPointer);
return new _Il2CppDomain_1(domainPointer);
})();
}
};
__decorate([
decorator_cache_getter_1.cache
], _Il2CppDomain.prototype, "name", null);
__decorate([
decorator_cache_getter_1.cache
], _Il2CppDomain.prototype, "assemblies", null);
__decorate([
decorator_cache_getter_1.cache
], _Il2CppDomain, "reference", null);
_Il2CppDomain = _Il2CppDomain_1 = __decorate([
decorators_1.nonNullHandle
], _Il2CppDomain);
exports._Il2CppDomain = _Il2CppDomain;