Example #1
0
        public override void Execute(Devirtualizer devirtualizer)
        {
            var section     = devirtualizer.Context.ReadSection(".Nasha2");
            var reader      = new BinaryReader(new MemoryStream(section));
            var handlers    = devirtualizer.Handlers;
            var newHandlers = new Dictionary <int, IHandler>();

            reader.ReadInt32();
            reader.ReadInt32();

            for (int i = 0; i < handlers.Count; i++)
            {
                reader.ReadInt32();

                var id = reader.ReadInt32();

                if (id > 255)
                {
                    break;
                }

                var handler = handlers[id];

                reader.ReadInt32();

                var newID = reader.ReadInt32();

                reader.ReadInt32();
                reader.ReadInt32();
                newHandlers.Add(newID, handler);
            }

            devirtualizer.Handlers = newHandlers;
        }
Example #2
0
        public override void Execute(Devirtualizer devirtualizer)
        {
            var restorer = new Restorer(devirtualizer);

            Logger.Blank();

            foreach (var method in devirtualizer.Methods)
            {
                restorer.RestoreMethod(method);
            }
        }
Example #3
0
        private static void Main(string[] args)
        {
            var logger = new ConsoleLogger();

            Console.Title = $"Krypton - {CurrentVersion}";
            var opts          = new DevirtualizationOptions(args[0], logger);
            var ctx           = new DevirtualizationCtx(opts);
            var devirtualizer = new Devirtualizer(ctx);

            devirtualizer.Devirtualize();
            devirtualizer.Save();
            Console.ReadLine();
        }
Example #4
0
        public override void Execute(Devirtualizer devirtualizer)
        {
            var module = devirtualizer.Context.Module;

            foreach (var type in module.GetTypes())
            {
                foreach (var method in type.Methods)
                {
                    if (!method.HasBody || !method.Body.HasInstructions)
                    {
                        continue;
                    }

                    method.Body.SimplifyMacros(method.Parameters);

                    var instrs = method.Body.Instructions;

                    if (instrs.Count < 6)
                    {
                        continue;
                    }
                    if (instrs[0].OpCode != OpCodes.Newobj)
                    {
                        continue;
                    }
                    if (instrs[instrs.Count - 5].OpCode != OpCodes.Ldc_I4)
                    {
                        continue;
                    }
                    if (instrs[instrs.Count - 4].OpCode != OpCodes.Ldsfld)
                    {
                        continue;
                    }
                    if (instrs[instrs.Count - 3].OpCode != OpCodes.Call)
                    {
                        continue;
                    }

                    var offset = instrs[instrs.Count - 5].GetLdcI4Value();

                    devirtualizer.Methods.Add(new VirtualizedMethod(method, offset));
                }
            }
        }
Example #5
0
        public static void Main(string[] args)
        {
            Console.Title = $"Deoxys - Version {CurrentVersion} | https://github.com/StackUnderflowRE/Deoxys";
            ILogger logger = new ConsoleLogger();

            if (args.Length == 0)
            {
                logger.Error("Use <Deoxys.exe> --help");
                Console.ReadLine();
                return;
            }

            var options = Parser.Default.ParseArguments <ParseOptions>(args).WithNotParsed(q =>
            {
                logger.Info($"Usage : <Deoxys.exe> <Input File> <Settings>");
                Console.ReadLine();
                Environment.Exit(0);
            });
            var deoxysOptions = new DeoxysOptions(args[0], options.Value);
            var ctx           = new DeoxysContext(deoxysOptions, logger);

            PrintInfo(ctx);
            var  devirtualizer = new Devirtualizer(ctx);
            bool result        = devirtualizer.Devirtualize();

            if (result)
            {
                devirtualizer.Save();
                logger.Success("Finished Devirtualization With No Errors!");
            }
            else
            {
                logger.Error("Could not finish Devirtualization.");
            }

            Console.ReadLine();
        }