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; }
public override void Execute(Devirtualizer devirtualizer) { var restorer = new Restorer(devirtualizer); Logger.Blank(); foreach (var method in devirtualizer.Methods) { restorer.RestoreMethod(method); } }
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(); }
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)); } } }
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(); }