private static void Main(string[] args) { if (args is null || args.Length != 1) { return; } string assemblyPath; try { Console.Title = GetTitle(); } catch { } assemblyPath = Path.GetFullPath(args[0]); if (!File.Exists(assemblyPath)) { Console.WriteLine("File doesn't exist."); return; } using (IPEImage peImage = PEImageFactory.Create(assemblyPath)) { FixerContext context; IDictionary <IFixer, FixerMessage> messages; context = new FixerContext(peImage); Console.WriteLine("If it is dll, enter Y, otherwise enter N."); do { string userInput; userInput = Console.ReadLine().Trim().ToUpperInvariant(); if (userInput == "Y") { context.IsDll = true; break; } else if (userInput == "N") { context.IsDll = false; break; } else { Console.WriteLine("Invalid input"); } } while (true); Console.WriteLine(); //Console.WriteLine("Checking..."); //messages = AssemblyFixer.Check(context); //Console.WriteLine("Checked errors:"); //Console.WriteLine(); //foreach (KeyValuePair<IFixer, FixerMessage> fixerToMessage in messages) { // Console.WriteLine(fixerToMessage.Key.Name + ":"); // Console.WriteLine($"Level: {fixerToMessage.Value.Level}"); // Console.WriteLine("Message:"); // Console.WriteLine(fixerToMessage.Value.Text); // Console.WriteLine(); //} //Console.WriteLine(); Console.WriteLine("Fixing..."); messages = AssemblyFixer.Fix(context); Console.WriteLine("Fixed errors:"); Console.WriteLine(); foreach (KeyValuePair <IFixer, FixerMessage> fixerToMessage in messages) { Console.WriteLine(fixerToMessage.Key.Name + ":"); Console.WriteLine($"Level: {fixerToMessage.Value.Level}"); Console.WriteLine("Message:"); Console.WriteLine(fixerToMessage.Value.Text); Console.WriteLine(); } Console.WriteLine(); Console.WriteLine("If the assembly still does NOT run, may be you should rebuild it!!!"); Console.WriteLine(); if (messages.Count != 0) { byte[] peImageData; string newAssemblyPath; peImageData = new byte[peImage.Length]; Marshal.Copy(peImage.RawData, peImageData, 0, peImageData.Length); newAssemblyPath = PathInsertPostfix(assemblyPath, ".fix"); Console.WriteLine("Saving: " + newAssemblyPath); File.WriteAllBytes(newAssemblyPath, peImageData); Console.WriteLine("Finished"); Console.WriteLine(); } } if (IsN00bUser() || Debugger.IsAttached) { Console.WriteLine("Press any key to exit..."); try { Console.ReadKey(true); } catch { } } }
private static void Main(string[] args) { if (args is null || args.Length != 1) { return; } string assemblyPath; try { Console.Title = GetTitle(); } catch { } assemblyPath = Path.GetFullPath(args[0]); if (!File.Exists(assemblyPath)) { Console.WriteLine("File doesn't exist."); return; } using (FixerContext context = new FixerContext(PEImageFactory.Create(assemblyPath))) { IDictionary <IFixer, FixerMessage> messages; switch (assemblyPath.Substring(assemblyPath.Length - 4).ToUpperInvariant()) { case ".EXE": Console.WriteLine("exe detected"); context.IsDll = false; break; case ".DLL": Console.WriteLine("dll detected"); context.IsDll = true; break; default: Console.WriteLine("Unknown file extension!!!"); context.IsDll = true; break; } Console.WriteLine(); Console.WriteLine("Fixing..."); messages = AssemblyFixer.Fix(context); Console.WriteLine("Fixed errors:"); Console.WriteLine(); foreach (KeyValuePair <IFixer, FixerMessage> fixerToMessage in messages) { Console.WriteLine(fixerToMessage.Key.Name + ":"); Console.WriteLine($"Level: {fixerToMessage.Value.Level}"); Console.WriteLine("Message:"); Console.WriteLine(fixerToMessage.Value.Text); Console.WriteLine(); } Console.WriteLine(); Console.WriteLine("If the assembly still does NOT run, may be you should rebuild it!!!"); Console.WriteLine(); if (messages.Count != 0) { byte[] peImageData; string newAssemblyPath; peImageData = new byte[context.Length]; Marshal.Copy(context.RawData, peImageData, 0, peImageData.Length); newAssemblyPath = PathInsertPostfix(assemblyPath, ".fix"); Console.WriteLine("Saving: " + newAssemblyPath); File.WriteAllBytes(newAssemblyPath, peImageData); Console.WriteLine("Finished"); Console.WriteLine(); } } if (IsN00bUser() || Debugger.IsAttached) { Console.WriteLine("Press any key to exit..."); try { Console.ReadKey(true); } catch { } } }