c# - C++/CLI 应用程序是否比 C# 应用程序更安全?

标签 c# .net c++-cli

用 C++/CLI 编写的带有 /clr 开关的应用程序对于破解者来说真的比 C# 应用程序更复杂吗? C++/CLI 是否会生成通常更难以反汇编和破解的应用程序? 我知道这与您编写代码的方式有关,但我想问的是破解者面临的一般困难情况。

最佳答案

如果您混合使用 native 代码和托管代码,是的,这会更加困难,因为他们需要了解 x86 汇编才能阅读您的代码。仍然可行,但比纯托管代码更难。

如果您只编译托管代码(可以在 C++/CLI 中执行),它会全部编译为 MSIL,并且可以使用 .Net Reflector 轻松反汇编。托管代码在编译时完全相同,从已编译为 MSIL 形式的托管 C++/CLI 代码重构 C# 代码(或 F# 等)相当容易。

如果你想让代码更难破解,你最好混淆你的代码。

Dotfuscator Community Edition包含在 VS2010 中。这会将某些类、方法、字段和属性名称更改为随机字符。此类软件的付费版本包含更强大的功能,实际上会稍微改变程序的结构,使其更难阅读。还有其他防止反汇编的技术,但这里就不一一列举了。

旁注

这并不一定能让您的代码安全。比如说,您正试图对您编写的应用程序施加使用限制。也许您在一个不起眼的地方使用一个文件和/或一个注册表项来跟踪该程序被使用了多少次。您希望防止该程序在他们购买之前被使用超过 30 次。我可以打开进程监视器,加载你的程序,找到你跟踪这些信息的文件和注册表项,并在每次我想绕过你的限制时重置它。这不需要任何破解。

您的安全性取决于您的安全性,反编译并不是一切。

关于c# - C++/CLI 应用程序是否比 C# 应用程序更安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7771766/

相关文章:

如果记录也存在,Javascript 无法按函数预期工作

c# - Entity Framework - 如何不更新相关对象

c# - 通过 C# 使用 PlotKit (javascript)

c# - 为我的文档展开环境变量

c# - 为什么发布到 fanout exchange 也发布到 direct exchange?

c# - 如何将 cpp/cli 文件显式链接到 c# 库 .dll?

c# - SharePoint GetListItems - 获取所有列,按集列表 ID 过滤。 C#

.net - 使用 XmlTextReader 时设置 User-Agent

visual-c++ - C++/CLI 包含问题

c++-cli - C++/CLI 二维数组分配失败