Match method signatures in reobfuscation
This commit is contained in:
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>
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user