Match method signatures in reobfuscation

This commit is contained in:
js6pak committed 2021-02-15 13:48:05 +01:00
1 parent 1b4c68da28
commit 81696bc1ce
3 files changed
+25 -5

No files matched your search

@@ -4,7 +4,7 @@
<LangVersion>latest</LangVersion>
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
<Version>0.2.5</Version>
<Version>0.2.6</Version>
<RepositoryType>git</RepositoryType>
<RepositoryUrl>https://github.com/NuclearPowered/Reactor.OxygenFilter</RepositoryUrl>
<PackageLicenseExpression>LGPL-3.0-or-later</PackageLicenseExpression>
+2 -1
View File
@@ -229,7 +229,8 @@ namespace Reactor.OxygenFilter.MSBuild
}
// get same method from obfuscated assembly
MethodReference definition = typeDefinition.GetMethods().Single(x => x.Name == obfuscated);
var signature = deobfuscatedCall.GetSignature(t => GetObfuscated(t) ?? t.FullName);
MethodReference definition = typeDefinition.GetMethods().Single(x => x.Name == obfuscated && x.GetSignature() == signature);
// obfuscate generics
if (deobfuscatedCallReference is GenericInstanceMethod generic)
+22 -3
View File
@@ -1,3 +1,4 @@
using System;
using System.Linq;
using System.Text;
using Mono.Cecil;
@@ -11,11 +12,29 @@ namespace Reactor.OxygenFilter
return text.Length == 11 && text.All(char.IsUpper);
}
public static string GetSignature(this MethodDefinition methodDefinition)
public static string GetSignature(this MethodDefinition methodDefinition, Func<TypeDefinition, string> map = null)
{
map ??= provider => provider.FullName;
string MapIfResolved(TypeReference typeReference)
{
TypeDefinition resolved = null;
try
{
resolved = typeReference.Resolve();
}
catch
{
// ignored
}
return resolved != null ? map(resolved) : typeReference.FullName;
}
var sb = new StringBuilder();
sb.Append(methodDefinition.ReturnType.FullName);
sb.Append(MapIfResolved(methodDefinition.ReturnType));
sb.Append(" ");
sb.Append("(");
@@ -31,7 +50,7 @@ namespace Reactor.OxygenFilter
if (parameterType is SentinelType)
sb.Append("...,");
sb.Append(parameterType.FullName);
sb.Append(MapIfResolved(parameterType));
}
}