diff --git a/Confuser.Protections/Compress/Compressor.cs b/Confuser.Protections/Compress/Compressor.cs index 33c0ea6b7..13c127a64 100644 --- a/Confuser.Protections/Compress/Compressor.cs +++ b/Confuser.Protections/Compress/Compressor.cs @@ -196,8 +196,12 @@ void InjectData(ModuleDef stubModule, MethodDef method, byte[] data) { repl.AddRange(arg); repl.Add(Instruction.Create(OpCodes.Dup)); repl.Add(Instruction.Create(OpCodes.Ldtoken, dataField)); - repl.Add(Instruction.Create(OpCodes.Call, stubModule.Import( - typeof(RuntimeHelpers).GetMethod("InitializeArray")))); + var runtimeHelpers = stubModule.CorLibTypes.GetTypeRef("System.Runtime.CompilerServices", "RuntimeHelpers"); + var arrayTypeRef = stubModule.CorLibTypes.GetTypeRef("System", "Array"); + var runtimeFieldHandle = stubModule.CorLibTypes.GetTypeRef("System", "RuntimeFieldHandle"); + var initialzeArray = new MemberRefUser(stubModule, "InitializeArray", + MethodSig.CreateStatic(stubModule.CorLibTypes.Void, arrayTypeRef.ToTypeSig(), runtimeFieldHandle.ToTypeSig()), runtimeHelpers); + repl.Add(Instruction.Create(OpCodes.Call, stubModule.Import(initialzeArray))); return repl.ToArray(); }); } diff --git a/Confuser.Protections/Constants/EncodePhase.cs b/Confuser.Protections/Constants/EncodePhase.cs index 4eba9118e..6dc7ba2b5 100644 --- a/Confuser.Protections/Constants/EncodePhase.cs +++ b/Confuser.Protections/Constants/EncodePhase.cs @@ -121,8 +121,12 @@ protected override void Execute(ConfuserContext context, ProtectionParameters pa repl.AddRange(arg); repl.Add(Instruction.Create(OpCodes.Dup)); repl.Add(Instruction.Create(OpCodes.Ldtoken, moduleCtx.DataField)); - repl.Add(Instruction.Create(OpCodes.Call, moduleCtx.Module.Import( - typeof(RuntimeHelpers).GetMethod("InitializeArray")))); + var runtimeHelpers = moduleCtx.Module.CorLibTypes.GetTypeRef("System.Runtime.CompilerServices", "RuntimeHelpers"); + var arrayTypeRef = moduleCtx.Module.CorLibTypes.GetTypeRef("System", "Array"); + var runtimeFieldHandle = moduleCtx.Module.CorLibTypes.GetTypeRef("System", "RuntimeFieldHandle"); + var initialzeArray = new MemberRefUser(moduleCtx.Module, "InitializeArray", + MethodSig.CreateStatic(moduleCtx.Module.CorLibTypes.Void, arrayTypeRef.ToTypeSig(), runtimeFieldHandle.ToTypeSig()), runtimeHelpers); + repl.Add(Instruction.Create(OpCodes.Call, moduleCtx.Module.Import(initialzeArray))); return repl.ToArray(); }); } diff --git a/Confuser.Protections/Resources/InjectPhase.cs b/Confuser.Protections/Resources/InjectPhase.cs index 540591750..b78ff12f7 100644 --- a/Confuser.Protections/Resources/InjectPhase.cs +++ b/Confuser.Protections/Resources/InjectPhase.cs @@ -138,9 +138,15 @@ void MutateInitializer(REContext moduleCtx, MethodDef decomp) { repl.Add(Instruction.Create(OpCodes.Ldtoken, moduleCtx.DataField)); repl.Add(Instruction.Create(OpCodes.Call, moduleCtx.Module.Import( typeof(RuntimeHelpers).GetMethod("InitializeArray")))); + var runtimeHelpers = moduleCtx.Module.CorLibTypes.GetTypeRef("System.Runtime.CompilerServices", "RuntimeHelpers"); + var arrayTypeRef = moduleCtx.Module.CorLibTypes.GetTypeRef("System", "Array"); + var runtimeFieldHandle = moduleCtx.Module.CorLibTypes.GetTypeRef("System", "RuntimeFieldHandle"); + var initialzeArray = new MemberRefUser(moduleCtx.Module, "InitializeArray", + MethodSig.CreateStatic(moduleCtx.Module.CorLibTypes.Void, arrayTypeRef.ToTypeSig(), runtimeFieldHandle.ToTypeSig()), runtimeHelpers); + repl.Add(Instruction.Create(OpCodes.Call, moduleCtx.Module.Import(initialzeArray))); return repl.ToArray(); }); moduleCtx.Context.Registry.GetService().ExcludeMethod(moduleCtx.Context, moduleCtx.InitMethod); } } -} \ No newline at end of file +}