- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
[阻止VisualBasic.NET或C#代码的反向工程
阻止Visual Basic .NET 或 C# 代码的反向工程
发布日期: 09/02/2004 | 更新日期: 09/02/2004
Gabriel Torok和Bill Leach
本文假设您熟悉 .NET 和 C#
摘要 .NET 体系结构的一个优势是:利用它构建的程序集包含了可以使用 ILDASM 进行恢复的很多有用的信息以及中间语言反汇编程序。尽管存在一个负面影响,即可以访问您的二进制文件的人可以恢复与原始源代码非常接近的代码。此处作者提供的程序模糊处理作为一种阻止反向工程的方法。此外,他们还讨论了可用的不同类型的模糊处理技术,并说明了包含在 Visual Studio .NET 2003 中的新的模糊处理工具。
到目前为止,您可能已经熟悉了元数据丰富的 Microsoft?.NET Framework 体系结构为表格带来的所有好处,从减轻部署和版本控制的负担到由自说明的二进制文件所启用的丰富的 IDE 功能。您可能不知道所有元数据的简单可用性已经引入了一个问题,直到目前为止尚未被大多数开发人员所关注。为通用语言运行时 (CLR) 编写应用程序对于反向工程来说越来越简单了。在 .NET Framework 中不允许出现任何错误,它仅仅是现成的中间编译语言(Java 语言应用程序表现出相同的特性)。Java 和 .NET Framework 都使用嵌入到可执行代码内部的丰富元数据:在 Java 中为字节代码,在 .NET 中为 Microsoft 中间语言 (MSIL)。比二进制机器码高级很多的可执行文件包含有可以被轻松破译的信息。
利用像 ILDASM(.NET Framework SDK 附带的 MSIL 反汇编程序)这样的工具或诸如 Anakrino 和 Reflector for .NET 这样的反编译程序,任何人都可以轻松地研究您的程序集并利用反向工程将它们转换为可读的源代码。黑客可以搜索可利用的安全漏洞、盗取独特的思想,甚至破解程序。这足以让您犹豫一阵。
但是,请不要担心。有一个解决方案,即模糊处理,它将帮助您防止反向工程。模糊处理是一种提供程序集中无缝重命名的符号以及阻止反编译程序的其他技巧的技术。正确应用该技术后,模糊处理可以极大地增加免遭反编译的保护,而使应用程序不受任何损害。模糊处理通常用于 Java 环境中,很多年来一直用于公司保护基于 Java 的产品的知识产权。
很多第三方根据需要创建了适用于 .NET 代码的模糊处理程序。Microsoft 在与我们公司 PreEmptive Solutions 的合作中将 Dotfuscator Community Edition 包括在 Visual Studio?.NET 2003 中,我们的公司提供了多种模糊处理程序包。
使用 Dotfuscator Community Edition,本文将教您有关模糊处理的所有知识(以及一些有关反编译的知识)、通常可用的模糊处理类型以及当使用模糊处理程序时您需要注意的一些问题。
要说明反编译和模糊处理,我们将使用一个经典 Vexed 游戏的开放源代码实现。Vexed.NET 是由 Roey Ben-amotz 编写的,位于 。这是一个智力游戏,您的目标是将相似的块移动到一起,之后它们就会消失。下面就是来自 Vexed.NET 源代码的简单方法:
public void undo() {
if (numOfMoves0) {
numOfMoves--;
if (_UserMoves.Length=2)
_UserMoves = _UserMoves.Substring(0, _UserMoves.Length02);
this.loadBoard(this.moveHistory[numOfMmoves -
(numOfMoves/50) * 50]);
this.drawBoard(this.gr);
}
}
反汇编
.NET Framework SDK 提供的名为 ILDASM 的反汇编实用工具,允许您将 .NET Framework 程序集反编译为 IL 程序集语言语句。为了启动 ILDASM,您必须确保已安装了 .NET Framework SDK,并在命令行上键入 ILDASM,后跟要进行反编译的程序名。在我们的例子中,将键入“ILDASM .exe”。这将会启动 ILDASM UI,可以用来浏览任意基于 .NET Framework 的应用程序的结构。图 1 显示了反汇编的 undo 方法。
返回页首
反编译
如果您现在认为只有那些真正了解
文档评论(0)