static void Main(string[] args) { var config = File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + @"config.json"); config = config.Replace("\"RequireAnyKey\": true,", "\"RequireAnyKey\": false,"); File.WriteAllText(AppDomain.CurrentDomain.BaseDirectory + @"config.json", config); var Il2CppDumperProgram = Type.GetType("Il2CppDumper.Program, Il2CppDumper"); var Il2CppDumperMain = Il2CppDumperProgram.GetMethods(BindingFlags.NonPublic | BindingFlags.Static).FirstOrDefault(m => m.Name == "Main"); Il2CppDumperMain.Invoke(null, new object[1] { (new string[2] { gamePath + gameName + @"_Data\il2cpp_data\Metadata\global-metadata.dat", gamePath + @"GameAssembly.dll" }) }); var options = new AssemblyUnhollower.UnhollowerOptions(); options.AdditionalAssembliesBlacklist.Add("Mono.Security"); // always blacklist this one options.AdditionalAssembliesBlacklist.Add("Newtonsoft.Json"); // always blacklist this one options.UnityBaseLibsDir = AppDomain.CurrentDomain.BaseDirectory + "DummyDll"; options.SourceDir = AppDomain.CurrentDomain.BaseDirectory + "DummyDll"; options.OutputDir = AppDomain.CurrentDomain.BaseDirectory + "ProxyDll"; options.MscorlibPath = AppDomain.CurrentDomain.BaseDirectory + @"lib\mscorlib.dll"; var AssemblyUnhollowerProgram = Type.GetType("AssemblyUnhollower.Program, AssemblyUnhollower"); var AssemblyUnhollowerMain = AssemblyUnhollowerProgram.GetMethods(BindingFlags.Public | BindingFlags.Static).FirstOrDefault(m => m.Name == "Main" && m.GetParameters()[0].ParameterType == typeof(AssemblyUnhollower.UnhollowerOptions)); AssemblyUnhollowerMain.Invoke(null, new object[1] { options }); }
public override bool Execute() { ReferencesPath = Path.Combine(Context.MappedPath, "references"); Directory.CreateDirectory(Context.DataPath); Directory.CreateDirectory(Context.MappedPath); var skip = true; var gameAssemblyPath = Path.Combine(AmongUs, "GameAssembly.dll"); var hash = Context.ComputeHash(new FileInfo(gameAssemblyPath)); var hashPath = Path.Combine(Context.MappedPath, "GameAssembly.dll.md5"); if (!File.Exists(hashPath) || hash != File.ReadAllText(hashPath)) { skip = false; } var mappingsHash = Context.ComputeHash(Context.MappingsJson); var mappingsHashPath = Path.Combine(Context.MappedPath, "mappings.md5"); if (!File.Exists(mappingsHashPath) || mappingsHash != File.ReadAllText(mappingsHashPath)) { skip = false; } if (skip) { Log.LogMessage("Skipping reference generation"); return(true); } var dumperConfig = new Il2CppDumper.Config { GenerateStruct = false, GenerateDummyDll = true }; Log.LogMessage(MessageImportance.High, "Generating Il2CppDumper intermediate assemblies"); Il2CppDumper.Il2CppDumper.PerformDump( gameAssemblyPath, Path.Combine(AmongUs, "Among Us_Data", "il2cpp_data", "Metadata", "global-metadata.dat"), Context.DataPath, dumperConfig, _ => { } ); Log.LogMessage(MessageImportance.High, "Executing Reactor.OxygenFilter"); var oxygenFilter = new OxygenFilter(); var dumpedDll = new FileInfo(Path.Combine(Context.DataPath, "DummyDll", "Assembly-CSharp.dll")); oxygenFilter.Start(Context.MappingsJson, dumpedDll, dumpedDll); Log.LogMessage(MessageImportance.High, "Executing Il2CppUnhollower generator"); UnhollowerBaseLib.LogSupport.WarningHandler += s => Log.LogWarning(s); UnhollowerBaseLib.LogSupport.ErrorHandler += s => Log.LogError(s); var unhollowerOptions = new AssemblyUnhollower.UnhollowerOptions { GameAssemblyPath = gameAssemblyPath, MscorlibPath = Path.Combine(AmongUs, "mono", "Managed", "mscorlib.dll"), SourceDir = Path.Combine(Context.DataPath, "DummyDll"), OutputDir = Path.Combine(Context.DataPath, "unhollowed"), UnityBaseLibsDir = Path.Combine(AmongUs, "BepInEx", "unity-libs"), NoCopyUnhollowerLibs = true }; AssemblyUnhollower.Program.Main(unhollowerOptions); Directory.CreateDirectory(ReferencesPath); var assemblyDefinition = AssemblyDefinition.ReadAssembly(Path.Combine(unhollowerOptions.OutputDir, "Assembly-CSharp.dll")); assemblyDefinition.Name = new AssemblyNameDefinition(assemblyDefinition.Name.Name + "-Deobfuscated", assemblyDefinition.Name.Version); assemblyDefinition.MainModule.Name += "-Deobfuscated"; assemblyDefinition.Write(Path.Combine(ReferencesPath, "Assembly-CSharp-Deobfuscated.dll")); File.WriteAllText(hashPath, hash); File.WriteAllText(mappingsHashPath, mappingsHash); return(true); }