From 846cdda9292b94f225db299173b2a13fb30f6af4 Mon Sep 17 00:00:00 2001 From: Andrii Kurdiumov Date: Mon, 9 Mar 2026 09:54:06 +0100 Subject: [PATCH] Use types from transformed module corelib and not from Confuser's current runtime corelib --- Confuser.Protections/Compress/Compressor.cs | 8 ++++++-- Confuser.Protections/Constants/EncodePhase.cs | 8 ++++++-- Confuser.Protections/Resources/InjectPhase.cs | 8 +++++++- 3 files changed, 19 insertions(+), 5 deletions(-) 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 +}