-3

只是询问有关加密构建的问题。现在排序,谢谢大家<3

4

2 回答 2

7

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

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

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

Confuser UI 基于某种可插拔的核心 API,您可以从应用程序中引用该 API,以混淆您的程序忽略的程序集。我想您可以复制并记入一些代码以混淆内存中的代码字符串,但据我所知,您需要解析代码以便识别成员,例如Mono.Cecil的位置 (也打开source 并由 confuser 使用)将能够使用程序集元数据识别代码中的成员等。

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

但请记住“通过混淆进行保护根本就没有保护”

更新

为了在构建程序集之前混淆代码,您将需要一个解析器,它将向您呈现代码中的所有标识符和表达式。从那里您可以为标识符生成随机无意义的名称,并修改表达式以使其尽可能少。

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

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

这很难阅读。我当场做出来的,显然不符合任何算法,因为位移可能会丢失重要的位。但就像我之前说的,去看看其他一些你可以复制和信任的算法来源。

于 2013-01-29T22:09:32.370 回答
1

每个 .Net 程序集都可以使用 .Net Reflector 等工具进行拆卸。该程序集是使用 Codedom 构建的,这没有什么区别。如果您想让其他人更难理解您的反汇编程序集,您将不得不“混淆”它们,只需谷歌搜索或在此处搜索“.Net obfuscator”即可引导您前进。

于 2013-01-29T21:50:10.303 回答