UNPKG

frida-il2cpp-bridge

Version:

A Frida module to dump, trace or hijack any Il2Cpp application at runtime, without needing the global-metadata.dat file.

54 lines (53 loc) 2.73 kB
/// <reference path="../../../lib/index.ts">/> const t0 = new Date(); setTimeout(() => { Il2Cpp.perform(() => { send({ action: "init", elapsed_ms: new Date() - t0, application: Il2Cpp.application, unityVersion: Il2Cpp.unityVersion }); const t1 = new Date(); Il2Cpp.domain.assemblies.forEach(assembly => { send({ type: "assembly", handle: assembly.handle, name: assembly.name, class_count: assembly.image.classCount }); assembly.image.classes.forEach((klass, i) => send({ type: "class", nth: i + 1, assembly_handle: assembly.handle, handle: klass.handle, namespace: klass.namespace, name: klass.name, declaring_class_handle: klass.declaringClass?.handle, kind: klass.isEnum ? `enum` : klass.isStruct ? `struct` : klass.isInterface ? `interface` : `class`, generics_type_names: klass.generics.map(_ => _.type.name), parent_type_name: klass.parent?.type.name, interfaces_type_names: klass.interfaces.map(_ => _.type.name), fields: klass.fields.map(field => ({ name: field.name, type_name: field.type.name, is_thread_static: field.isThreadStatic, is_static: field.isStatic, is_literal: field.isLiteral, value: field.isLiteral ? (field.type.class.isEnum ? field.value.field("value__").value : field.value)?.toString() : undefined, offset: field.isThreadStatic || field.isLiteral ? undefined : field.offset })), methods: klass.methods.map(method => ({ is_static: method.isStatic, name: method.name, return_type_name: method.returnType.name, generics_type_names: method.generics.map(_ => _.type.name), parameters: method.parameters.map(parameter => ({ position: parameter.position, name: parameter.name, type_name: parameter.type.name })), offset: method.virtualAddress.isNull() ? undefined : method.relativeVirtualAddress })) }) ); }); return new Date() - t1; }).then(_ => send({ action: "exit", elapsed_ms: _ })); });