C ++ / CLI应用程序比C#应用程序更安全吗?

时间:2011-10-14 18:11:48

标签: c# .net c++-cli

使用/clr切换在C ++ / CLI中编写的应用程序对于破解程序而言比C#应用程序更复杂吗? C ++ / CLI是否会生成通常更复杂的应用程序来进行反汇编和破解? 我知道这是你编写代码的方式问题,但我问的是面临破解者的一般困难案例。

3 个答案:

答案 0 :(得分:4)

这完全有可能,但我想强调“难以拆解”并不等同于“安全”。

您以任何形式向第三方提供的代码均不应被视为“安全”。这一切都是可以破解的,你无能为力,所以你最好采用一种不依赖它的商业模式。

答案 1 :(得分:4)

如果您正在混合使用本机代码和托管代码,那么它就更难了,因为他们需要知道x86程序集才能读取您的代码。仍然可行,但比纯托管代码更难。

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

如果您希望它更难以破解,您最好不要混淆代码。

VS2010附带

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

旁注

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

您的安全性与您的安全性一样好,反编译并非一切。

答案 2 :(得分:2)

实际上C#应该​​对缓冲区溢出更安全,缓冲区溢出可用于将汇编代码注入堆栈。