C# 注入类并围绕字符串包装函数

C# 注入类并围绕字符串包装函数,c#,encryption,mono,mono.cecil,C#,Encryption,Mono,Mono.cecil,我正在尝试制作一个模糊器,目前进展顺利。现在我正试图用base64编码字符串,然后用rot13编码字符串,只是为了让它多一点不可读,并隐藏我的sooper sekret字符串 这是我在模糊器上编码字符串的方法: ILProcessor processor = method.Body.GetILProcessor(); foreach (Instruction instruction in processor.Body.Instructions) { if (instruction.OpC

我正在尝试制作一个模糊器,目前进展顺利。现在我正试图用
base64
编码字符串,然后用
rot13
编码字符串,只是为了让它多一点不可读,并隐藏我的sooper sekret字符串

这是我在模糊器上编码字符串的方法:

ILProcessor processor = method.Body.GetILProcessor();
foreach (Instruction instruction in processor.Body.Instructions)
{
    if (instruction.OpCode == OpCodes.Ldstr)
    {
        instruction.Operand = Enc.to64(Enc.Rot((String)instruction.Operand, 0x0D)); //0x0D = 13
    }
}
所以现在我需要做的是将我的
Enc
类注入根命名空间,因为函数是静态的,所以我可以在不创建类实例的情况下使用它们。 然后我需要做的是将每个字符串包装在
Enc
中的两个函数中,以便在实际使用程序时解码字符串,使

string lel = "x";
进入

这两件事我都不知道怎么做,所以我需要你的帮助


因此,为了重述一遍,我需要知道如何将一个类(带有静态函数)注入根命名空间,然后使用该类中的两个函数包装程序中的所有字符串,以便在反射时无法读取,但在使用时解码。

1。将类注入用户的程序集中。

如果我理解正确,您在一个单独的程序集中有一个
Enc
类,并且您希望在模糊处理期间在用户的程序集中创建该类的副本。在这种情况下,您可以使用
Mono.Cecil
实现创建类的副本。您只需打开两个程序集:

var assemble = AssemblyDefinition.ReadAssembly(...) 
在程序集中查找所需的类:

assemble.MainModule.GetType(...) 
new TypeDefinition(...) 
并创建具有相同属性和用户程序集成员的新类:

assemble.MainModule.GetType(...) 
new TypeDefinition(...) 
此任务有第三方工具:。您可以使用其中之一,也可以基于它们编写自己的实现

2。将方法调用注入用户程序集。

Mono.Cecil
包含更改方法体的IL代码所需的所有内容。您将需要解析方法的现有IL代码以找到注入点。解析算法取决于您对转换代码的要求。您可以在中查看方法调用注入的示例。

用C#编写代码。然后再看看这个IL。类似于
ld,ld,call,call
而不是
ld
的东西。