有没有办法阻止Reflector能够反映我的源代码?

时间:2008-12-15 12:13:45

标签: .net reflector disassembly

是否有办法(可靠且最好不是商业用途)阻止Reflector反映我的源代码???

谢谢, 阿迪

9 个答案:

答案 0 :(得分:5)

没有。 Reflector会像.NET运行时一样查看程序集,以生成要执行的本机代码。您可能希望的最好的方法是obfuscate您的代码,并让(稍微)让读者更难理解。

可以在Should you obfuscate a commercial .Net application?

找到执行混淆的一些优点和缺点

答案 1 :(得分:4)

没有办法阻止.net代码的反编译,据说一个好的混淆器会使反射代码难以读取,其中一些像dotfuscator会阻止反射器显示C#代码;但是,你总能看到IL。

Dotfuscator中的一个选项是使用不可打印的名称(Reflect on reflector)这使得反编译极其困难的恕我直言。

Microsoft曾经出售软件保护和许可服务,该服务将对IL进行加密,并使用与加密密钥绑定的自定义VM,以防止使用传统工具进行反映。这会产生巨大的性能成本,但如果您想要保护关键算法或许可代码,那就太好了。

http://msdn.microsoft.com/en-us/slps/default.aspx

答案 2 :(得分:1)

尝试dotfuscator。 2005/2008附带社区版。没有重新构建您的代码(痛苦),即.NET组件(公共)调用的ATL / COM对象(私有)。

选择是你的。

答案 3 :(得分:0)

如果您正在寻找一个好的混淆器,请尝试RemoteSoft

答案 4 :(得分:0)

不久前有反反射技巧是有效的,因为.NET反射器无法将一个特定的IL指令转换为c#代码,但是它们已经发布了补丁并且乐趣已经结束。

答案 5 :(得分:0)

Xheo Codeveil也是一款出色的产品。他们还有一个许可解决方案(用于创建序列号等,然后通过您自己的激活服务器0激活它们

答案 6 :(得分:0)

免责声明:我不为SmartAssembly的制造商RedGate工作。我只是一个非常满意的客户,他找到了一个好的,经济实惠的解决方案。

选择非常简单,选择SmartAssembly!不要浪费你的时间或金钱与市场上的其他混淆器。我在评估竞争产品的非计费时间方面花了更多的钱。它们都有致命的缺陷,几乎无法调试。 SmartAssembly是一个易于使用,记录良好,抛光的应用程序,具有出色的支持。在他们的论坛上发布一个问题,并期望实际开发人员能够快速得到答案。

SmartAssembly不仅仅是一个混淆器。它具有一系列功能,包括内置的,高度可定制的崩溃报告生成器,您的客户可以自动向您发送电子邮件。您可以在自己的服务器或红门服务器上查看这些报告。当您进行beta测试或向客户发布产品时,我无法告诉您这是多么有用。它还会生成调试器文件,以便您可以调试与您的产品相关的任何发布后问题。

如果您要提供商业应用程序,将钱花在一个体面的混淆器上是有意义的。这里一个糟糕的选择可能会损害您的知识产权,或者更糟糕的是让您经历几天可怕的调试。与SmartAssembly的成本相比,这会花费多少?

答案 7 :(得分:0)

Reflector不使用Reflection来显示您的源代码。它使用.Net元数据(以众所周知的已发布格式)来做到这一点。

没有办法阻止这种情况,但你通过混淆你的程序集使它变得毫无意义。在混淆之后,重命名类/方法/字段,方法中的内联字符串被加密,方法调用被隐藏,方法控制流被加扰等等。所以,任何使用Reflector的人都会看到很多垃圾,而且无法理解它的大部分内容。

免责声明:我为Crypto Obfuscator

的开发人员LogicNP Software工作

答案 8 :(得分:0)

或者,您可以使用本机C ++应用程序引导.Net应用程序。然后,您可以对所有.net dll文件进行模糊处理和加密。

使用bootstrap c ++应用程序将所有文件解密为基于内存的字节数组(物理自身的精确副本)。

我这样做的方法是将所有.net文件保存在一个扩展名为.DAT的加密文件中。 C ++代码将文件抓取到内存映射文件中,然后使用CLR托管API将我的Native C ++应用程序转换为.net应用程序,然后使用

加载

Assembly.Load(字节[] ...)

所以在我的应用程序中,我避免创建一个.net EXE并使我的C ++应用程序成为EXE所以我的所有表单,控件等等都存在于.Net Dll中。