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

在 .NET 程序集中构建安全意识:第一部分 - 学习破解 .NET 程序集

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.53/5 (48投票s)

2004年11月1日

5分钟阅读

viewsIcon

217525

downloadIcon

2353

在 .NET 程序集中构建安全意识:第三部分的第一部分

免责声明

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

总体概述

我一直坚信安全是构建优秀软件的首要任务。我一直在努力确保在设计阶段就考虑安全性问题。但当前高等教育学生的普遍问题是,我可以说他们大多数人从未真正将安全性视为一个真正的问题。他们倾向于更关注系统的功能和 GUI。讲师们也几乎不关注或鼓励学生在他们的项目中采取更高的安全措施,我认为这完全不合适。

我们为什么要关注安全?

第一种情况

在我目前工作的智能卡公司,我们的 SDK 中存储的大部分信息都高度机密。我们不希望我们的 SDK 被竞争对手操纵。

第二种情况

你花了一年时间编写一个软件,在这个过程中花费了大量资源和时间来开发。然后你出售你的软件,却发现过去 12 个月的所有辛勤工作都轻易地被操纵了。因此,必须采取措施确保这种情况不会发生。

第三种情况

有一天,我的经理来问我这个问题。

问题:.NET 程序集有多安全?

答案:没有什么是绝对安全的,但我们所能做的就是努力让黑客破解的难度更大。

然后他给了我这个回复;我想 .NET 应该更安全。这就是我们迁移到 Microsoft .NET 的原因。当我向他展示 Lutz Roeder 的 .NET Reflector 程序,该程序可以将二进制文件反编译回 C# 源代码时,他非常沮丧。下面是一个示例,展示了它的外观。

演示

第四种情况

回到 20 世纪 90 年代,你可能已经注意到一些共享软件实现了这种验证技术。当你安装软件时,它会在 Windows 注册表中创建一个密钥。基本上,它将序列号以纯文本或加密版本存储在注册表中。是的,我见过有人将纯文本放在注册表中。所以当你的程序运行时,它会检查注册表以验证是否存在该特定密钥。如果你输入的序列号错误,或者该特定密钥不存在,它将提示你一个错误。现在我将逐步在 C# 中模拟这种验证技术。

测试机器规格

  • Windows XP Professional Edition SP 1

  • Intel Pentium 4 2.6GHz

  • 256MB DDR-RAM

  • Visual Studio .NET 2003 Professional Edition

  • Microsoft .NET Framework 1.1

步骤如下

1. 转到 Windows XP 的开始菜单,选择“运行”。键入 “regedit” 或 “regedt32”。

2. 导航到 \HKEY_LOCAL_MACHINE\Software,然后右键单击并选择“新建”>“项”

3. 将项命名为 NeCoders。完成后,右键单击 NeCoders 项,选择“新建”>“字符串值”。将其命名为 serial。

4. 双击 serial 字符串,然后输入 “1111-1111-1111-1111” 作为值。

5. 好的,现在启动你的 Visual Studio .NET 2003。

6. 创建一个新的 C# 窗口应用程序项目,并将其命名为 CrackingIL。

7. C# 窗口应用程序设计器将加载如下。

8. 现在按照以下规格进行操作。

控件 名称 文本 字体
表单 FrmSecureApp Secure App 1.0 Arial, Size 10, Bold
label lblheader 欢迎来到 NeCoders -

9. 你应该得到类似这样的结果

10. 现在双击 FrmSecureApp 窗体。将生成 FrmSecureApp 的加载事件。

11. 现在将此代码添加到事件中

12. 完成后,按 F5 生成项目。

13. 没有异常。它只是一个窗口化窗体,有什么特别之处吗?

14. 当程序运行时,它将检查注册表是否满足以下条件

  1. 检查 HKEY_LOCAL_MACHINE\SOFTWARE\Necoders 的存在

  2. 检查 HKEY_LOCAL_MACHINE\SOFTWARE\Necoders\serial 的存在

  3. 检查 serial 字符串值是否等于 “1111-1111-1111-1111”

15. 现在打开你的注册表编辑器,并将 serial 的字符串值更改为 “1111-1111-1111-1112”。现在在 Visual Studio .NET 2003 中按 F5 再次调试软件。

它满足 (iii)。

16. 接下来,尝试从 NeCoders 键中删除 serial 字符串值。再次按 F5。

它满足 (ii)。

17. 最后,删除 NeCoders 键。按 F5。

它满足 (i)。

18. 现在我正在苦思冥想如何破解这种许可技术。这是有趣的部分,希望你会喜欢。目前,无论你如何运行 C# 窗口窗体,它都会弹出相同的错误消息“请获取许可证才能运行!”。请记住这一点。

注意:破解 Debug 或 Release 模式的程序集没有任何区别。

19. 转到 Windows 开始 > 程序 > Microsoft Visual Studio .NET 2003 > Visual Studio .NET 工具 > Visual Studio .NET 2003 命令提示符。

20. 切换到 CrackingIL.exe 所在目录。

21. 输入 ildasm CrackingIL.exe /out=CrackingIL.il

22. 如果你注意到,debug 文件夹中将添加 3 个文件。

23. 使用任何文本编辑器打开 CrackingIL.il。我使用了记事本。

24. 你会看到一些汇编代码。这是中间语言。很酷吧?

25. 向下滚动直到看到这个。

高亮显示的部分实际上是你之前在 Visual Studio .NET 2003 中创建的 FrmSecureApp_Load 事件。26。

好的,现在我们要做的是删除调用注册表检查的那部分代码。只需删除从 IL_0000 到 IL_0075 的所有代码。最终你会得到这样的结果。

27. 重新打开你的 Visual Studio .NET 2003 命令提示符,然后键入 'ilasm CrackingIL.il'。

28. 完成后,尝试运行 CrackingIL.exe。

你应该会看到这个。如果你看到了,恭喜你已成功破解 CrackingIL.exe。

结论

我希望你喜欢这篇文章,即使它很简单。请参阅 第二部分,了解本系列中的下一篇文章。如果你仍有任何疑问,请给我 发送电子邮件

参考文献

© . All rights reserved.