防止Codedom构建被反编译

时间:2013-01-29 21:42:42

标签: c# codedom

只是询问加密版本。 现在排序,谢谢所有< 3

2 个答案:

答案 0 :(得分:7)

托管程序集相对容易进行逆向工程,主要是因为编译器省略的IL代码已经非常易读,但您可以阅读更多有关elsewhere的内容。

防止或者尝试阻止某人对托管程序集进行逆向工程的常见方法是混淆。混淆器将从程序集中加载有意义的数据,然后使用各种技术(例如加扰标识符和用冗长的算术函数替换字符串文字)使其难以读取。

我遇到的最好的混淆器,我认为它是最好的,因为我看到逆向工程师抱怨最多的是混淆器,是Confuser(开源)。

Confuser UI基于一些可插入核心API,您可以从应用程序引用混淆程序省略的程序集。我想你可以复制和归功于一些代码,以便在内存中混淆你的代码串,但据我所知你需要解析代码,以便你可以识别成员,例如Mono.Cecil (也是开源并由confuser使用)将能够使用程序集元数据识别代码中的成员等。

混淆是好的,如果混淆器是最新的,可能会保护你的程序集免受新手或懒惰的逆向工程师的攻击。像de4dot这样的开源工具可以轻松改变流行混淆器的效果。

但请记住“通过混淆保护根本不是保护”

更新

为了在构建程序集之前对代码进行模糊处理,您需要一个解析器,它将向您显示代码中的所有标识符和表达式。从那里你可以为标识符生成随机无意义的名称,并修改表达式以尽可能减少意义。

例如Console.Writeline("Hi")变为:

Console.WriteLine("{0}{1}", (char) (36 << 1), (char) ((26 << 2) + 1));

这很难读。我在现场做了这个,显然不符合任何算法,因为位移可能会丢失重要的位。但就像我之前说过的那样,请查看其他一些可以复制和信用的算法来源。

答案 1 :(得分:1)

每个.Net组件都可以使用.Net Reflector等工具进行反汇编。使用Codedom构建程序集没有任何区别。如果你想让其他人更难理解你的反汇编程序集,你就必须“混淆”它们,只需谷歌搜索或搜索“.Net obfuscator”就可以引导你前进。