0

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

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

所以回顾一下,我需要知道如何将一个类(带有静态函数)注入根命名空间,然后用来自该类的两个函数包装程序中的所有字符串,以便在反射时不可读,但在使用时解码。

4

1 回答 1

0

1. 将一个类注入到用户的程序集中。

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

var assemble = AssemblyDefinition.ReadAssembly(...) 

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

assemble.MainModule.GetType(...) 

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

new TypeDefinition(...) 

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

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

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

于 2013-09-24T09:48:17.273 回答