Replace netstandard workaround with better method
This commit is contained in:
3 files changed
+29
-11
No files matched your search
@@ -12,6 +12,11 @@
|
||||
<UsingTask TaskName="Reobfuscate" AssemblyFile="$(TaskAssembly)" />
|
||||
<UsingTask TaskName="Deobfuscate" AssemblyFile="$(TaskAssembly)" />
|
||||
|
||||
<Target Name="WarnAboutTargetFramework" BeforeTargets="PrepareForBuild" Condition=" '$(TargetFramework)' != 'netstandard2.1' ">
|
||||
<!-- TODO link to docs explaining why netstandard is better -->
|
||||
<Warning Text="Your project is not targetting netstandard2.1, you probably want to change that." File="$(MSBuildProjectFullPath)" />
|
||||
</Target>
|
||||
|
||||
<Target Name="LoadMappings">
|
||||
<LoadMappings TargetGamePlatform="$(TargetGamePlatform)" Mappings="$(Mappings)">
|
||||
<Output TaskParameter="MappingsJson" PropertyName="MappingsJson" />
|
||||
@@ -43,6 +48,6 @@
|
||||
</Target>
|
||||
|
||||
<Target Name="Reobfuscate" AfterTargets="Build">
|
||||
<Reobfuscate Input="$(ProjectDir)$(OutputPath)$(AssemblyName).dll" ReferencedAssemblies="@(ReferencePath)" />
|
||||
<Reobfuscate AmongUs="$(AmongUs)" Input="$(ProjectDir)$(OutputPath)$(AssemblyName).dll" ReferencedAssemblies="@(ReferencePath)" />
|
||||
</Target>
|
||||
</Project>
|
||||
@@ -4,7 +4,7 @@
|
||||
<LangVersion>latest</LangVersion>
|
||||
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
|
||||
|
||||
<Version>0.1.3</Version>
|
||||
<Version>0.1.4</Version>
|
||||
<RepositoryType>git</RepositoryType>
|
||||
<RepositoryUrl>https://github.com/NuclearPowered/Reactor.OxygenFilter</RepositoryUrl>
|
||||
<PackageLicenseExpression>LGPL-3.0-or-later</PackageLicenseExpression>
|
||||
|
||||
@@ -11,6 +11,9 @@ namespace Reactor.OxygenFilter.MSBuild
|
||||
{
|
||||
public class Reobfuscate : Task
|
||||
{
|
||||
[Required]
|
||||
public string AmongUs { get; set; }
|
||||
|
||||
[Required]
|
||||
public string Input { get; set; }
|
||||
|
||||
@@ -30,13 +33,23 @@ namespace Reactor.OxygenFilter.MSBuild
|
||||
using var stream = File.Open(Input, FileMode.Open, FileAccess.ReadWrite);
|
||||
var resolver = new DefaultAssemblyResolver();
|
||||
|
||||
foreach (var directory in ReferencedAssemblies
|
||||
.Select(Path.GetDirectoryName)
|
||||
.Distinct()
|
||||
.OrderBy(x => x.EndsWith("unhollowed"))) // workaround for mono.cecil picking netstandard.dll from unhollowed instead of sdk
|
||||
resolver.ResolveFailure += (_, reference) =>
|
||||
{
|
||||
resolver.AddSearchDirectory(directory);
|
||||
}
|
||||
foreach (var referencedAssembly in ReferencedAssemblies)
|
||||
{
|
||||
if (Path.GetFileNameWithoutExtension(referencedAssembly) == reference.Name)
|
||||
{
|
||||
var assemblyDefinition = AssemblyDefinition.ReadAssembly(referencedAssembly);
|
||||
|
||||
if (assemblyDefinition.Name.FullName == reference.FullName)
|
||||
{
|
||||
return assemblyDefinition;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
};
|
||||
|
||||
using var moduleDefinition = ModuleDefinition.ReadModule(stream, new ReaderParameters { AssemblyResolver = resolver });
|
||||
var toObfuscate = new Dictionary<MemberReference, string>();
|
||||
@@ -153,6 +166,8 @@ 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))
|
||||
{
|
||||
@@ -172,8 +187,6 @@ namespace Reactor.OxygenFilter.MSBuild
|
||||
{
|
||||
// get same type from obfuscated assembly
|
||||
|
||||
var assemblyDefinition = resolver.Resolve(new AssemblyNameDefinition("Assembly-CSharp", null));
|
||||
|
||||
var hierarchy = new List<TypeDefinition>();
|
||||
var type = deobfuscatedCall.DeclaringType;
|
||||
|
||||
@@ -183,7 +196,7 @@ namespace Reactor.OxygenFilter.MSBuild
|
||||
type = type.DeclaringType;
|
||||
}
|
||||
|
||||
var typeDefinition = assemblyDefinition.MainModule.GetType(GetObfuscated(hierarchy.First()));
|
||||
var typeDefinition = obfuscatedAssembly.GetType(GetObfuscated(hierarchy.First()));
|
||||
|
||||
foreach (var element in hierarchy.Skip(1))
|
||||
{
|
||||
|
||||
Reference in new issue
Block a user