public static bool InitializeIl2Cpp(Process program) { string programPath = Path.GetDirectoryName(program.MainModule.FileName); string metaFile = Path.Combine(programPath, @"oriwotw_Data\il2cpp_data\Metadata\global-metadata.dat"); string ilFile = Path.Combine(programPath, @"GameAssembly.dll"); if (!File.Exists(metaFile) || !File.Exists(ilFile)) { return(false); } byte[] metaDataBytes = File.ReadAllBytes(metaFile); byte[] il2CppBytes = File.ReadAllBytes(ilFile); Il2CppReader.Init(il2CppBytes, metaDataBytes, out Metadata metaData, out Il2CppData il2Cpp); Il2CppExecutor executor = new Il2CppExecutor(metaData, il2Cpp); Decompiler = new Il2CppDecompiler(executor); return(true); }
private void Dump(Metadata metadata, Il2Cpp il2Cpp, string outputDir) { WriteOutput("Dumping..."); var executor = new Il2CppExecutor(metadata, il2Cpp); var decompiler = new Il2CppDecompiler(executor); decompiler.Decompile(_config, outputDir, 1); WriteOutput("Done!"); if (_config.GenerateStruct) { WriteOutput("Generate struct..."); var scriptGenerator = new StructGenerator(executor); scriptGenerator.WriteScript(outputDir, 1); WriteOutput("Done!"); } if (_config.GenerateDummyDll) { WriteOutput("Generate dummy dll..."); DummyAssemblyExporter.Export(executor, outputDir, _config.DummyDllAddToken); WriteOutput("Done!"); Directory.SetCurrentDirectory(realPath); //Fix read-only directory permission } }
public IntPtr FindPointer(Process program, string asmName) { if (il2Cpp == null || lastPID != program.Id) { lastPID = program.Id; BasePtr = IntPtr.Zero; string programPath = Path.GetDirectoryName(program.MainModule.FileName); string metaFile = Path.Combine(programPath, @"oriwotw_Data\il2cpp_data\Metadata\global-metadata.dat"); string ilFile = Path.Combine(programPath, @"GameAssembly.dll"); if (!File.Exists(metaFile) || !File.Exists(ilFile)) { return(IntPtr.Zero); } byte[] metaDataBytes = File.ReadAllBytes(metaFile); byte[] il2CppBytes = File.ReadAllBytes(ilFile); Il2CppReader.Init(il2CppBytes, metaDataBytes, out metaData, out il2Cpp); executor = new Il2CppExecutor(metaData, il2Cpp); decompiler = new Il2CppDecompiler(executor); } return(ProgramPointer.DerefPointer(program, GetPointer(program, asmName), AutoDeref)); }