From 346cf1b9a5a0a44ff282b1ca5b181435470d8b1e Mon Sep 17 00:00:00 2001 From: js6pak Date: Sun, 3 Jan 2021 16:27:16 +0100 Subject: [PATCH] Fallback to obfuscated names in generic fixing --- .../Reactor.OxygenFilter.MSBuild.csproj | 2 +- Reactor.OxygenFilter.MSBuild/Reobfuscate.cs | 13 +++++++++---- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/Reactor.OxygenFilter.MSBuild/Reactor.OxygenFilter.MSBuild.csproj b/Reactor.OxygenFilter.MSBuild/Reactor.OxygenFilter.MSBuild.csproj index 51ff9d4..4937c96 100644 --- a/Reactor.OxygenFilter.MSBuild/Reactor.OxygenFilter.MSBuild.csproj +++ b/Reactor.OxygenFilter.MSBuild/Reactor.OxygenFilter.MSBuild.csproj @@ -4,7 +4,7 @@ latest true - 0.1.4 + 0.1.5 git https://github.com/NuclearPowered/Reactor.OxygenFilter LGPL-3.0-or-later diff --git a/Reactor.OxygenFilter.MSBuild/Reobfuscate.cs b/Reactor.OxygenFilter.MSBuild/Reobfuscate.cs index 9507943..5e10a4c 100644 --- a/Reactor.OxygenFilter.MSBuild/Reobfuscate.cs +++ b/Reactor.OxygenFilter.MSBuild/Reobfuscate.cs @@ -33,6 +33,8 @@ namespace Reactor.OxygenFilter.MSBuild using var stream = File.Open(Input, FileMode.Open, FileAccess.ReadWrite); var resolver = new DefaultAssemblyResolver(); + var obfuscatedAssembly = AssemblyDefinition.ReadAssembly(Path.Combine(AmongUs, "BepInEx", "unhollowed", "Assembly-CSharp.dll")); + resolver.ResolveFailure += (_, reference) => { foreach (var referencedAssembly in ReferencedAssemblies) @@ -48,6 +50,11 @@ namespace Reactor.OxygenFilter.MSBuild } } + if (reference.FullName == obfuscatedAssembly.Name.FullName) + { + return obfuscatedAssembly; + } + return null; }; @@ -166,8 +173,6 @@ namespace Reactor.OxygenFilter.MSBuild } } - var obfuscatedAssembly = ModuleDefinition.ReadModule(Path.Combine(AmongUs, "BepInEx", "unhollowed", "Assembly-CSharp.dll")); - // fix generic methods foreach (var methodDefinition in moduleDefinition.GetAllTypes().SelectMany(x => x.Methods)) { @@ -196,11 +201,11 @@ namespace Reactor.OxygenFilter.MSBuild type = type.DeclaringType; } - var typeDefinition = obfuscatedAssembly.GetType(GetObfuscated(hierarchy.First())); + var typeDefinition = obfuscatedAssembly.MainModule.GetType(GetObfuscated(hierarchy.First()) ?? hierarchy.First().FullName); foreach (var element in hierarchy.Skip(1)) { - typeDefinition = typeDefinition.NestedTypes.Single(x => x.Name == GetObfuscated(element)); + typeDefinition = typeDefinition.NestedTypes.Single(x => x.Name == (GetObfuscated(element) ?? element.Name)); } // get same method from obfuscated assembly