C#Member'System.Char [] System.String :: ToCharArray()'在另一个模块中声明,需要在Mono.Cecil中导入

时间:2014-02-14 21:14:43

标签: c# obfuscation mono.cecil

我使用Mono.Cecil加密我的程序集中的字符串。

但在

myAssemblyDefinition.Write(myAssemblyPath);

我收到错误:

  

成员'System.Char [] System.String :: ToCharArray()'在中声明   另一个模块,需要导入

我尝试使用以下所有行导入String.ToCharArray方法:

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));

但我的问题仍然存在。 我使用ToCharArray方法将decryptMethod注入我的程序集。 任何人都可以帮我解决这个或 是否有一个示例代码来加密字符串,以便使用Mono.Cecil 0.9.5版本进行模糊处理?

1 个答案:

答案 0 :(得分:2)

如果目标程序集的运行时版本与注入代码的运行时版本相同。 请尝试以下行。

var toCharArray =
 asm.MainModule.Import(typeof(string).GetMethod("ToCharArray", new Type[] { }));
proccer.Emit(OpCodes.Callvirt, toCharArray);