注入一个类并围绕字符串包装函数

时间:2013-09-13 15:25:39

标签: c# encryption mono mono.cecil

我正在尝试制作一个混淆器,到目前为止一切顺利。现在我正在尝试使用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";

string lel = Enc.from64(Enc.Rot("encoded x", 0x0D));

我知道如何做这些事情,所以我需要你的帮助。

所以回顾一下,我需要知道如何将一个类(带有静态函数)注入根命名空间,然后用所述类中的两个函数包装程序中的所有字符串,这样它在反映时是不可读的,但在使用时会被解码。 / p>

1 个答案:

答案 0 :(得分:0)

<强> 1。将类注入用户程序集。

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

var assemble = AssemblyDefinition.ReadAssembly(...) 

在程序集中找到所需的类:

assemble.MainModule.GetType(...) 

并创建一个具有相同属性和用户程序集成员的新类:

new TypeDefinition(...) 

此任务有第三方工具:ILMergeILRepackMono.Merge。您可以使用其中一个或基于它们编写自己的实现。

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

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