欢迎来到天天文库
浏览记录
ID:1520088
大小:57.50 KB
页数:9页
时间:2017-11-12
《阻止visual basic .net 或 c# 代码的反向工程》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、阻止VisualBasic.NET或C#代码的反向工程发布日期:09/02/2004
2、更新日期:09/02/2004GabrielTorok和BillLeach本文假设您熟悉.NET和C#摘要.NET体系结构的一个优势是:利用它构建的程序集包含了可以使用ILDASM进行恢复的很多有用的信息以及中间语言反汇编程序。尽管存在一个负面影响,即可以访问您的二进制文件的人可以恢复与原始源代码非常接近的代码。此处作者提供的程序模糊处理作为一种阻止反向工程的方法。此外,他们还讨论了可用的不同类型的模糊处理技术,并说明了包含在VisualStudio.NET2003中的新的模糊处理
3、工具。到目前为止,您可能已经熟悉了元数据丰富的Microsoft®.NETFramework体系结构为表格带来的所有好处,从减轻部署和版本控制的负担到由自说明的二进制文件所启用的丰富的IDE功能。您可能不知道所有元数据的简单可用性已经引入了一个问题,直到目前为止尚未被大多数开发人员所关注。为通用语言运行时(CLR)编写应用程序对于反向工程来说越来越简单了。在.NETFramework中不允许出现任何错误,它仅仅是现成的中间编译语言(Java语言应用程序表现出相同的特性)。Java和.NETFramework都使用嵌入到可执行代码内部的丰富元数据:在Java中为字节代
4、码,在.NET中为Microsoft中间语言(MSIL)。比二进制机器码高级很多的可执行文件包含有可以被轻松破译的信息。利用像ILDASM(.NETFrameworkSDK附带的MSIL反汇编程序)这样的工具或诸如Anakrino和Reflectorfor.NET这样的反编译程序,任何人都可以轻松地研究您的程序集并利用反向工程将它们转换为可读的源代码。黑客可以搜索可利用的安全漏洞、盗取独特的思想,甚至破解程序。这足以让您犹豫一阵。但是,请不要担心。有一个解决方案,即模糊处理,它将帮助您防止反向工程。模糊处理是一种提供程序集中无缝重命名的符号以及阻止反编译程序的其他技
5、巧的技术。正确应用该技术后,模糊处理可以极大地增加免遭反编译的保护,而使应用程序不受任何损害。模糊处理通常用于Java环境中,很多年来一直用于公司保护基于Java的产品的知识产权。很多第三方根据需要创建了适用于.NET代码的模糊处理程序。Microsoft在与我们公司PreEmptiveSolutions的合作中将DotfuscatorCommunityEdition包括在VisualStudio®.NET2003中,我们的公司提供了多种模糊处理程序包。使用DotfuscatorCommunityEdition,本文将教您有关模糊处理的所有知识(以及一些有关反编译的
6、知识)、通常可用的模糊处理类型以及当使用模糊处理程序时您需要注意的一些问题。要说明反编译和模糊处理,我们将使用一个经典Vexed游戏的开放源代码实现。Vexed.NET是由RoeyBen-amotz编写的,位于http://vexeddotnet.benamotz.com。这是一个智力游戏,您的目标是将相似的块移动到一起,之后它们就会消失。下面就是来自Vexed.NET源代码的简单方法:publicvoidundo(){if(numOfMoves>0){numOfMoves--;if(_UserMoves.Length>=2)_UserMoves=_UserMove
7、s.Substring(0,_UserMoves.Length02);this.loadBoard(this.moveHistory[numOfMmoves-(numOfMoves/50)*50]);this.drawBoard(this.gr);}}反汇编.NETFrameworkSDK提供的名为ILDASM的反汇编实用工具,允许您将.NETFramework程序集反编译为IL程序集语言语句。为了启动ILDASM,您必须确保已安装了.NETFrameworkSDK,并在命令行上键入ILDASM,后跟要进行反编译的程序名。在我们的例子中,将键入“ILDASMvexe
8、d.net.exe”。这将会启动ILDASMUI,可以用来浏览任意基于.NETFramework的应用程序的结构。图1显示了反汇编的undo方法。 返回页首反编译如果您现在认为只有那些真正了解IL汇编语言的少数人会查看和可以理解您的源代码,那么请记住反编译并非止步于此。我们可以使用反编译程序重新创建实际的源代码。这些实用工具可以将.NET程序集直接反编译回高级语言,例如C#、VisualBasic®.NET或C++。让我们看一下由Anakrino反编译程序生成的undo方法:publicvoidundo(){if(this.numOfMoves>0){this.
此文档下载收益归作者所有