您的代码在混淆时有多安全?

时间:2012-08-25 07:39:37

标签: c++ .net obfuscation

使用RedGate的Reflector,您可以轻松获得应用程序的完整源代码。但是为了减少发现算法的可能性,有混淆器可以降低这种可能性。

我的问题是:

  • 混淆器的效果如何?
  • 隐藏算法更安全:没有.NET库的C ++或混淆的.NET程序。
  • 还有其他方法可以使.NET源代码更安全吗?

5 个答案:

答案 0 :(得分:4)

如果你肯定想要保护某些东西,可以选择C ++,就像在.NET World中一样,有一个名为de4dot的强大的反混淆器(参见这里:https://github.com/0xd4d/de4dot),它可以对市场上大多数混淆器生成的东西进行反混淆处理。它没有明确地知道。

然而,这只会提高标准,因为即使在c ++世界中,也有强大的工具(IDA:http://www.hex-rays.com/products/ida/index.shtml)。

还有其他解决方案,例如混合代码程序集,您可以在本机代码中隐藏要隐藏的部分,其余部分在托管代码中。请点击此处了解更多信息:Mixed (Native and Managed) Assemblies

答案 1 :(得分:2)

“获取源代码更安全:没有.net库的c ++程序或.net混淆程序。”没有.net ofc ...

模糊的.net .java仍然很容易反编译。有专业的混淆器,这使得代码无法重新编译,这些都会慢慢破解黑客程序。

您是否听说过可以关闭的东西可以打开? 即使写的是大会......

通常初学者程序员都害怕这种盗窃行为。我建议首先创建一个软件部分,值得为别人偷窃(不适合你)

答案 2 :(得分:2)

由于.NET旨在自我描述,因此使用混淆器只会阻碍其进度。尽管反编译器的可读性会降低,但任何了解MSIL的人都有更好的机会。甚至C ++应用程序也会在某个阶段被解压缩,因为程序最终会在内存中逐步执行。 C ++应用程序需要更长的时间来完成它,但如果黑客知道汇编程序(他们可能会在反编译您的应用程序以获得对算法的访问权限时),那只是时间问题。

混淆实际上是为了在合理的时间跨度内尽可能地让它变得困难,而不是让它变得不可能。加密也是同样的原则。加密不是不可能破解的,只需要很长时间就可以在70 - 80年的时间内没有任何用处。

除了这里介绍的内容之外,我还能想到两种选择:

  • 在远程位置托管算法
  • 将算法托管在硬件组件中 - 非常昂贵

如果您有可用的网络连接,第一个选项会更合适。处理在单独的服务器上完成,算法不向公众公开。这就是激活码现在如何运作的方式。生成某种类型的序列代码,使用公钥加密进行加密,并发送到将解密和验证数据的源。响应也被加密并发回。

此外,对应用程序和依赖项进行数字签名也会有所帮助,因为黑客无法轻松插入组件。如果他们试图使用DLL代替旧的DLL(伪造对服务的调用并返回“成功”),则代码将在使用DLL之前检查数字签名。

总而言之,混淆会减慢过程但不会阻止它。我能想到的唯一方法是将该算法托管在安全的位置并向其发送请求。是的,主机方案,DoS等问题,但你的算法是受保护的,这是你想要的。

答案 3 :(得分:0)

尝试链接this。但是它只会混淆字符串。要混淆函数调用,变量和其他元素,请为此目的寻找商业产品和服务。

答案 4 :(得分:0)

  

混淆器的效果如何?

我发现ConfuserExnameconstantscontrol flow保护非常有效,使.NET代码难以阅读。

  • 使用constants protection的unicode可以将类/方法/等名称转换为不可读的unicode。
  • control flow编码常量字符串,如调试日志字符串,为黑客猜测代码正在做什么提供了很好的提示。
  • {{1}}将您的代码加密到很多交换机案例中。

请参阅下面的ConfuserEx'ed C#代码示例:

enter image description here

  

隐藏算法更安全:没有.NET库的C ++或模糊的.NET程序。

如果.NET程序集没有被混淆,那就像放弃源代码一样。

比较混淆的.NET和本机x86 / x64代码,IMO,阅读它们的难度大致相同。可以使用IDA-Pro等软件将本机x86代码分解为非常易读的C代码。还有一些人可以非常快速地阅读和理解x86语言。

  

还有其他方法可以使.NET源代码更安全吗?

有这个Microsoft .NET Native(仍处于早期阶段有限制)将C#代码编译为本机x86 / x64代码。这实际上并不是一种保护,只是人们对x86代码的阅读速度较慢。