Fix AssemblyResolver issues

This commit is contained in:
js6pak committed 2021-02-23 18:57:32 +01:00
1 parent f2631d375b
commit d31b0a37b3
4 files changed
+30 -5

No files matched your search

@@ -0,0 +1,16 @@
using System.Collections.Generic;
using Mono.Cecil;
namespace Reactor.OxygenFilter.MSBuild
{
public class AssemblyResolver : DefaultAssemblyResolver
{
protected override AssemblyDefinition SearchDirectory(AssemblyNameReference name, IEnumerable<string> directories, ReaderParameters parameters)
{
if (name.Name == "netstandard")
return null;
return base.SearchDirectory(name, directories, parameters);
}
}
}
+11 -2
View File
@@ -33,12 +33,21 @@ namespace Reactor.OxygenFilter.MSBuild
var mappings = JsonConvert.DeserializeObject<Mappings>(Context.MappingsJson);
var resolver = new DefaultAssemblyResolver();
var resolver = new AssemblyResolver();
resolver.AddSearchDirectory(Path.Combine(Context.MappedPath, "references"));
resolver.AddSearchDirectory(Path.Combine(AmongUs, "BepInEx", "core"));
resolver.AddSearchDirectory(Path.Combine(AmongUs, "BepInEx", "plugins"));
resolver.AddSearchDirectory(Path.Combine(AmongUs, "BepInEx", "unhollowed"));
var readerParameters = new ReaderParameters { AssemblyResolver = resolver };
// quick fix for reactor plugin having different file name than assembly name
resolver.ResolveFailure += (_, reference) =>
{
var files = Directory.GetFiles(Path.Combine(AmongUs, "BepInEx", "plugins"), $"{reference.Name}-*.dll");
return files.Length == 1 ? AssemblyDefinition.ReadAssembly(files.Single(), readerParameters) : null;
};
var deobfuscated = new List<string>();
foreach (var input in Input)
@@ -58,7 +67,7 @@ namespace Reactor.OxygenFilter.MSBuild
using var stream = File.Open(input, FileMode.Open, FileAccess.Read, FileShare.Read);
using var moduleDefinition = ModuleDefinition.ReadModule(stream, new ReaderParameters { AssemblyResolver = resolver });
using var moduleDefinition = ModuleDefinition.ReadModule(stream, readerParameters);
var toDeobfuscate = new Dictionary<MemberReference, string>();
foreach (var type in moduleDefinition.GetTypeReferences())
@@ -4,7 +4,7 @@
<LangVersion>latest</LangVersion>
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
<Version>0.2.7</Version>
<Version>0.2.8</Version>
<RepositoryType>git</RepositoryType>
<RepositoryUrl>https://github.com/NuclearPowered/Reactor.OxygenFilter</RepositoryUrl>
<PackageLicenseExpression>LGPL-3.0-or-later</PackageLicenseExpression>
+2 -2
View File
@@ -31,7 +31,7 @@ namespace Reactor.OxygenFilter.MSBuild
public override bool Execute()
{
using var stream = File.Open(Input, FileMode.Open, FileAccess.ReadWrite);
var resolver = new DefaultAssemblyResolver();
var resolver = new AssemblyResolver();
var obfuscatedAssembly = AssemblyDefinition.ReadAssembly(Path.Combine(AmongUs, "BepInEx", "unhollowed", "Assembly-CSharp.dll"));
@@ -41,7 +41,7 @@ namespace Reactor.OxygenFilter.MSBuild
{
foreach (var referencedAssembly in referencedAssemblies)
{
if (referencedAssembly.Name.FullName == reference.FullName)
if (referencedAssembly.Name.Name == reference.Name)
{
return referencedAssembly;
}