65.9K
CodeProject 正在变化。 阅读更多。
Home

在 .NET 程序集中建立安全意识:第 3 部分 - 学习破解强名称 .NET 程序集

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.72/5 (63投票s)

2004年11月1日

3分钟阅读

viewsIcon

759346

downloadIcon

1279

在 .NET 程序集中建立安全意识:第 3 部分,共 3 部分

免责声明

NeCoders 不对因本文提供的信息导致的任何软件/文件被破解案例负责。

总体概述

欢迎回到“在 .Net 程序集中建立安全意识”系列的第 3 部分。在本文中,我将与您分享破解强名称 .Net 程序集的可能性。请确保您已经阅读了 第 1 部分第 2 部分,然后再继续。

关于强名称的问题

我确实相信许多人对强名称密钥是否真的可以保护程序集免受篡改有同样的疑问。我想在本文中与您分享我的疑虑。

问题

  1. 问题:强名称密钥安全吗?
    • 答案:是的,强名称密钥使用 RSA 1024 位加密。
  2. 问题:强名称密钥可以破解吗?
    • 答案:如果您有足够的计算能力、时间和关于如何破解 RSA 的知识,答案是肯定的。
  3. 问题:可以从 .NET 程序集中删除强名称密钥吗?
    • 答案:是的,如果您知道如何操作,可以非常容易地删除它。

演示测试机器规格

  • Windows XP Professional Edition SP 1 1

  • Intel Pentium 4 2.6GHz

  • 256MB DDR-RAM

  • Visual Studio .Net 2003 Professional Edition

  • Microsoft .Net Framework 1.1
  1. 下载本文附带的可执行文件。
  2. 打开您的 Visual Studio .Net 2003 命令行提示符。
  3. 确保您位于 CrackingIL/bin/debug 目录中。
  4. 键入“ildasm CrackingIL.exe /out=CrackingIL.il”。

  1. 您一定想知道,为什么我们要重复我们在该系列第 1 部分和第 2 部分中所做的事情。如果您注意到,破解强名称密钥的方法是操纵中间语言。但问题是,在第 2 部分中,我们确实修改了中间语言,最后,当我们尝试将其转换回程序集时,我们将收到一个错误。我将详细解释您应该修改中间语言的哪一部分以删除强名称密钥。
  2. 使用文本编辑器打开 CrackingIL.il。我使用记事本。

  1. 看看红框。据我了解,每个程序集,如 System.Windows.Forms、System 和 mscorlib,都包含它们自己的公钥令牌和版本号。
  2. 现在,我们的程序集是否包含公钥?答案是肯定的。在向您展示它之前,我将首先向您展示 2 张截图;一张没有强名称密钥,一张附加了强名称密钥。

没有强名称

使用强名称

  1. 您会注意到两者的区别在于,强名称密钥程序集包含一个公钥。为了篡改一个强名称的 .Net 程序集,只需删除突出显示的那个部分。它看起来像这样。

  1. 现在对现有的中间语言进行一些修改。您必须删除注册表检查,这样它就不会提示您输入序列号或许可证。查找此代码。

  1. 然后删除从 IL_0000 到 IL_0075 的代码行。您应该得到这样的输出。

  1. 现在,只需编辑一些文本即可证明您劫持了该强名称密钥 .Net 程序集。找到带有短语“Welcome to NeCoders”的代码,并将其替换为“您正在被劫持,强名称在这里无用”。

将上面更改为

  1. 打开您的 Visual Studio .Net 2003 命令行提示符,然后键入“ilasm CrackingIL.il”。

  1. 尝试运行 CrackingIL.exe。您将看到这个。

  1. 恭喜!您已经设法操纵了附加了强名称密钥的 .Net 程序集。

结论

再次,我希望您发现本系列文章很有趣。在本系列中,将有更多关于破解和保护 .Net 程序集的文章。请在第 4 部分可用时查看它,因为它将解释 .NET 安全性的许多理论。反过来,这应该可以帮助您更好地理解此主题。

参考文献

© . All rights reserved.