Пример #1
0
        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);
        }