修复没有遍历代码中的MemberRef,导致重命名函数和代码后未修复函数体中的泛型类的成员调用
parent
0bc9ea41d4
commit
0cbe09287d
|
@ -25,7 +25,7 @@ namespace Obfuz.Emit
|
|||
_initializeArray = mod.Import(typeof(System.Runtime.CompilerServices.RuntimeHelpers).GetMethod("InitializeArray", new[] { typeof(Array), typeof(RuntimeFieldHandle) }));
|
||||
Assert.IsNotNull(_initializeArray);
|
||||
|
||||
Type encryptionService = typeof(EncryptionService);
|
||||
Type encryptionService = typeof(EncryptionService<DefaultStaticEncryptionScope>);
|
||||
_encryptBlock = mod.Import(encryptionService.GetMethod("EncryptBlock", new[] { typeof(byte[]), typeof(int), typeof(int) }));
|
||||
Assert.IsNotNull(_encryptBlock);
|
||||
_decryptBlock = mod.Import(encryptionService.GetMethod("DecryptBlock", new[] { typeof(byte[]), typeof(int), typeof(int) }));
|
||||
|
|
|
@ -274,11 +274,32 @@ namespace Obfuz.ObfusPasses.SymbolObfus
|
|||
}
|
||||
}
|
||||
|
||||
private IEnumerable<MemberRef> WalkMemberRefs(ModuleDef mod)
|
||||
{
|
||||
foreach (TypeDef type in mod.GetTypes())
|
||||
{
|
||||
foreach (MethodDef method in type.Methods)
|
||||
{
|
||||
if (!method.HasBody)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
foreach (var instr in method.Body.Instructions)
|
||||
{
|
||||
if (instr.Operand is MemberRef memberRef)
|
||||
{
|
||||
yield return memberRef;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void BuildRefFieldMetasMap(Dictionary<FieldDef, RefFieldMetas> refFieldMetasMap)
|
||||
{
|
||||
foreach (ModuleDef mod in _obfuscatedAndNotObfuscatedModules)
|
||||
{
|
||||
foreach (MemberRef memberRef in mod.GetMemberRefs())
|
||||
foreach (MemberRef memberRef in WalkMemberRefs(mod))
|
||||
{
|
||||
if (!memberRef.IsFieldRef)
|
||||
{
|
||||
|
@ -370,7 +391,7 @@ namespace Obfuz.ObfusPasses.SymbolObfus
|
|||
{
|
||||
foreach (ModuleDef mod in _obfuscatedAndNotObfuscatedModules)
|
||||
{
|
||||
foreach (MemberRef memberRef in mod.GetMemberRefs())
|
||||
foreach (MemberRef memberRef in WalkMemberRefs(mod))
|
||||
{
|
||||
if (!memberRef.IsMethodRef)
|
||||
{
|
||||
|
|
|
@ -0,0 +1,31 @@
|
|||
namespace Obfuz
|
||||
{
|
||||
public interface IEncryptionScope
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public abstract class EncryptionScopeBase : IEncryptionScope
|
||||
{
|
||||
public void ForcePreserveAOT()
|
||||
{
|
||||
EncryptionService<EncryptionScopeBase>.Encrypt(0, 0, 0);
|
||||
}
|
||||
}
|
||||
|
||||
public struct DefaultDynamicEncryptionScope : IEncryptionScope
|
||||
{
|
||||
public void ForcePreserveAOT()
|
||||
{
|
||||
EncryptionService<DefaultDynamicEncryptionScope>.Encrypt(0, 0, 0);
|
||||
}
|
||||
}
|
||||
|
||||
public struct DefaultStaticEncryptionScope: IEncryptionScope
|
||||
{
|
||||
public void ForcePreserveAOT()
|
||||
{
|
||||
EncryptionService<DefaultStaticEncryptionScope>.Encrypt(0, 0, 0);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -6,7 +6,8 @@ using System.Threading.Tasks;
|
|||
|
||||
namespace Obfuz
|
||||
{
|
||||
public static class EncryptionService
|
||||
|
||||
public static class EncryptionService<T> where T : IEncryptionScope
|
||||
{
|
||||
private static IEncryptor _encryptor;
|
||||
|
||||
|
|
Loading…
Reference in New Issue