Add rename mode
This commit is contained in:
parent
6c03bf1dbb
commit
3888f843b4
@ -39,8 +39,7 @@ namespace SPT_AssemblyTool
|
||||
{
|
||||
Deobfuscator.Deobfuscate(arguments);
|
||||
}
|
||||
|
||||
if (arguments.RemapMode)
|
||||
else if (arguments.RemapMode)
|
||||
{
|
||||
if (!File.Exists(arguments.OldAssemblyPath))
|
||||
WriteError("Old assembly path option is not correct");
|
||||
@ -50,6 +49,17 @@ namespace SPT_AssemblyTool
|
||||
|
||||
Remapper.Remap(arguments);
|
||||
}
|
||||
else if (arguments.RenameMode)
|
||||
{
|
||||
if (!File.Exists(arguments.MappingFilePath))
|
||||
WriteError("Mapping file path option is not correct");
|
||||
|
||||
Renamer.Rename(arguments);
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine("No mode selected");
|
||||
}
|
||||
}
|
||||
|
||||
internal class Arguments : IArgumentCollection
|
||||
@ -59,12 +69,15 @@ namespace SPT_AssemblyTool
|
||||
[CommandDefinition("d", "deobfuscate", Description = "Deobfuscation mode", Order = 1)]
|
||||
public bool DeobfuscateMode { get; set; }
|
||||
|
||||
[CommandDefinition("m", "managed-path", Description = "Path to EFT managed folder. Required", Required = true)]
|
||||
[CommandDefinition("m", "managed-path", Description = "Path to EFT managed folder. Required")]
|
||||
public string ManagedPath { get; set; }
|
||||
|
||||
[CommandDefinition("r", "remap", Description = "Remapping mode", Order = 1)]
|
||||
public bool RemapMode { get; set; }
|
||||
|
||||
[CommandDefinition(null, "rename", Description = "Rename mode", Order = 1)]
|
||||
public bool RenameMode { get; set; }
|
||||
|
||||
[CommandDefinition("o", "old-assembly", Description = "Path to previously decompiled Assembly-CSharp.dll file. Only used in remapping mode, required")]
|
||||
public string OldAssemblyPath { get; set; }
|
||||
|
||||
|
63
SPT-AssemblyTool/Renamer.cs
Normal file
63
SPT-AssemblyTool/Renamer.cs
Normal file
@ -0,0 +1,63 @@
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using Mono.Cecil;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace SPT_AssemblyTool
|
||||
{
|
||||
internal static class Renamer
|
||||
{
|
||||
public static void Rename(Program.Arguments args)
|
||||
{
|
||||
var mappingDictionary = JsonConvert.DeserializeObject<Dictionary<string, string>>(File.ReadAllText(args.MappingFilePath));
|
||||
|
||||
var resolver = new DefaultAssemblyResolver();
|
||||
resolver.AddSearchDirectory(args.ManagedPath);
|
||||
|
||||
var readerParameters = new ReaderParameters { AssemblyResolver = resolver };
|
||||
var assemblyPath = args.Values[0];
|
||||
|
||||
using var oldAssembly = AssemblyDefinition.ReadAssembly(args.OldAssemblyPath, readerParameters);
|
||||
using var newAssembly = AssemblyDefinition.ReadAssembly(assemblyPath, readerParameters);
|
||||
|
||||
foreach (var (obfuscatedName, deobfuscatedName) in mappingDictionary)
|
||||
{
|
||||
if (oldAssembly.MainModule.GetType(deobfuscatedName) != null)
|
||||
// already renamed
|
||||
continue;
|
||||
|
||||
TypeDefinition oldTypeDefinition = oldAssembly.MainModule.GetType(obfuscatedName);
|
||||
|
||||
if (oldTypeDefinition == null)
|
||||
{
|
||||
Program.WriteError($"Could not find mapping definition in old assembly: {obfuscatedName}={deobfuscatedName}");
|
||||
// this will never get hit but it's just to prevent warnings
|
||||
return;
|
||||
}
|
||||
|
||||
string @namespace;
|
||||
string type;
|
||||
|
||||
if (!deobfuscatedName.Contains("."))
|
||||
{
|
||||
@namespace = "";
|
||||
type = deobfuscatedName;
|
||||
}
|
||||
else
|
||||
{
|
||||
@namespace = deobfuscatedName.Substring(0, deobfuscatedName.LastIndexOf("."));
|
||||
type = deobfuscatedName.Remove(0, deobfuscatedName.LastIndexOf("."));
|
||||
}
|
||||
|
||||
oldTypeDefinition.Namespace = @namespace;
|
||||
oldTypeDefinition.Name = type;
|
||||
}
|
||||
|
||||
var assemblyDirectory = Path.GetDirectoryName(assemblyPath);
|
||||
|
||||
var newAssemblyPath = Path.Combine(assemblyDirectory, Path.GetFileNameWithoutExtension(assemblyPath) + "-renamed.dll");
|
||||
|
||||
newAssembly.Write(newAssemblyPath);
|
||||
}
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user