Sends for the fellow dear visitors:
Welcome to DongPad!
为什么需要模糊处理 针对 .NET 编写的程序很容易进行反向工程处理。这并不是 .NET 在设计上的一个缺陷,而只是由于这个现代化的中间编译语言的固有性质所致。.NET 使用表述性文件语法提供可执行代码或 MSIL(Microsoft 中间语言)代码。这些中间文件比二进制机器代码高级得多,其中充满了一眼就可看出并且最终可理解的标识符和算法。毕竟,既要做到易于理解、灵活且可扩展,同时又要隐藏关键细节,这显然很难实现。 所以,任何人只要有一个可免费得到的 .NET 反编译器就可以轻易对代码进行反向工程处理。一时间,所有人都有了更多的机会可以看到软件许可代码、复制保护机制以及专有的业务逻辑,无论这样做是合法还是非法。任何人都可出于任何理由来研究软件细节。他们能够搜索安全缺陷并加以利用,窃取独有的创意并破解程序等等。 但是这不应该成为一种风险,或者成为一种发展障碍。对 .NET 平台上的知识产权问题心存疑虑的组织需要了解有一种解决方案可帮助他们解决反向工程这个难题。模糊处理这种技术能够对程序集中的符号进行无迹可寻的重命名,并提供很多其他手段,从而阻止进行反编译。正确地应用模糊处理技术,可使应用程序的抗反编译的保护能力以指数级增加,而应用程序不会受到任何影响。
模糊处理的目的 模糊处理 (obfuscation) 意在引起混淆。随着混淆的加重,人脑进行多方面智力思维的能力逐渐降低。请注意,这种规则并不改变前向(可执行的)逻辑,仅仅是将其表示为不可理解的形式。当一个编写出色的模糊处理工具对可读的程序指令进行处理之后,可能产生的一个副作用是输出结果不仅使人看了不知所云,而且它还会使反编译器无从下手。尽管保留了前向(可执行的)逻辑,但反向语义却呈现出非确定性。其结果是,通过反向工程将指令翻译为“编程语言”(如 C# 或 VB)的任何尝试都很可能失败,因为翻译结果含混不清。深度模糊处理能产生无数种可能的反编译结果,其中的一些如果进行重新编译,则可能会产生错误的逻辑。反编译器只是一种计算机器,无法知道哪种可能的结果经过重新编译后在语义上是有效的。人类编写和使用反编译器是为了自动执行人类难以胜任的反编译算法。所以,可以这样说,如果连反编译器都对模糊处理程序奈何不得,能力更逊一筹的人类自然就更加束手无策了。 原始的模糊处理程序实质上是将在代码中找到的标识符重命名为不可读的内容。它们可能使用哈希技术,或者对字符集进行算术偏移,将字符变为不可读字符或不可输出字符。这些技术虽然表面上很有效,可是很显然,它们是可逆的技术,因此很难起到保护作用。PreEmptive 的模糊处理工具远远超过了这种原始的重命名方法,它使用很多其他颇具独创性的“引起混淆”的方法,使得几乎不可能对他人的知识产权进行反向工程处理(而且代价太大,得不偿失)。
摘自:http://topic.csdn.net/t/20061230/13/5266483.html
Powered By DongPad CopyRight 2008-2011, xhtml | css
Processed in 0.031 seconds(s) , 沪ICP备08111450号