C# Member 'System.Char[] System.String::ToCharArray()' is declared in another module and needs to be imported in Mono.Cecil

StackOverflow https://stackoverflow.com/questions/21789638

  •  11-10-2022
  •  | 
  •  

Question

I use Mono.Cecil to encrypt my strings in my assemblies.

but in

myAssemblyDefinition.Write(myAssemblyPath);

I get an error:

Member 'System.Char[] System.String::ToCharArray()' is declared in another module and needs to be imported

I tried to import String.ToCharArray method with all these lines:

myAssemblyDefinition.MainModule.Import(stringTypeReference.Resolve());
myAssemblyDefinition.MainModule.Import(stringTypeReference.Resolve().Module.Types.Where(x => x.Name == "String").First());
MethodDefinition toCharArrayMethod = stringTypeReference.Resolve().Module.Types.Where(x => x.Name == "String").First().Methods.Where(x => x.Name == "ToCharArray").First();
myAssemblyDefinition.MainModule.Import(toCharArrayMethod);
myAssemblyDefinition.MainModule.Import(typeof(System.String));

but my problem still exists. I used ToCharArray method for inject decryptMethod to my assembly. Can anybody help to me to solve this or is there a sample code to encrypt string for obfuscating with Mono.Cecil 0.9.5 version?

Was it helpful?

Solution

If your target assembly's runtime version is same with your injection code's runtime version. Try following lines.

var toCharArray =
 asm.MainModule.Import(typeof(string).GetMethod("ToCharArray", new Type[] { }));
proccer.Emit(OpCodes.Callvirt, toCharArray);
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top