隐藏c#windows应用程序源代码

时间:2009-02-13 12:41:19

标签: c# obfuscation

我使用C#.Net 2.0编写了一个Windows应用程序,我想做一些隐藏源代码的东西,所以当任何一个使用重构工具时都看不到源代码。 我使用了dotfuscator,但它只更改了函数名称,但没有更改所有源代码。

更新: 我想隐藏源代码,不是因为隐藏密钥,而是隐藏代码的工作方式。

谢谢,

7 个答案:

答案 0 :(得分:3)

根据定义,IL在身体残留方面非常具有表现力;你只需要:

  • 找到一个更好的(阅读:更昂贵的)混淆器
  • 保持密钥源在您的控制之下(例如,通过Web服务,因此密钥逻辑永远不会在客户端)。

答案 1 :(得分:2)

嗯,源代码是您的,除非您明确提供,否则您只能提供已编译的二进制文件。

现在,这些编译的二进制文件是IL代码。为了防止某人“反编译”并将您的IL代码反向工程回到源代码,您需要对IL代码进行模糊处理。这是通过代码混淆器完成的。市场上有很多。

你已经用dotfuscator完成了这个,但是,你说它只改变了函数名,而不是所有的源代码。听起来你正在使用Visual Studio附带的dotfuscator版本。这实际上是“社区版”,仅包含“专业版”功能的子集。有关社区版和专业版功能的比较表,请参阅this link

如果您想要更多地混淆代码(特别是为了防止人们使用Reflector等工具),您需要专业版的Dotfuscator,或其他包含类似功能的代码混淆器产品。

答案 2 :(得分:1)

一旦人们抓住你的二进制文件,他们就可以对其进行逆向工程。使用编译为字节码(C#和Java)的语言更容易,并且编译为特定于CPU的二进制文件的语言更难,但它总是可行的。面对它。

答案 3 :(得分:1)

答案 4 :(得分:0)

混淆软件可以去隐藏方法内容的长度是有限的,从根本上改变内部结构而不影响正确性(当然还有性能)是非常困难的。

值得注意的是,一旦混淆了具有许多小方法的代码往往变得难以理解,尤其是当使用在方法之间共享名称的技术时,这些技术似乎会碰到眼睛而不是运行时。

一些混淆器允许生成在任何目标语言中都无法表示的构造,例如CIL中允许的所有操作集合比通过c#或甚至C ++ / CLI可表达的更多。但是,这通常需要显式设置才能启用(因为它可能会导致问题)。这可能会导致反编译器失败,但有些人会尽力而为并解决它(可能是内联无法处理的错误)。

如果您使用应用程序分发pdb,那么由于附加符号,可以推断更多。

答案 5 :(得分:0)

只是符号重命名不足以阻碍您对应用进行逆向工程。您还需要控制流混淆,字符串加密,资源保护,元数据缩减,反反射防御等等。尝试Crypto Obfuscator支持所有这些以及更多。

答案 6 :(得分:0)

为您的应用程序创建一个安装项目,并在朋友计算机上安装设置,就像软件一样。使用microsoft visual studio创建安装项目有5个步骤。

第1步:创建示例.Net项目。在以发布模式构建项目之后,我将此项目命名为“TestProject”。 第2步:使用右键单击解决方案添加新项目,然后选择安装项目并将其命名为“TestSetup”。 第3步:右键单击安装项目并添加主输出,然后选择显示的项目。 第4步:右键单击设置项目,然后选择View->文件系统 - >应用文件夹。现在复制您想要在安装文件夹中的内容。 步骤5:现在转到我们的项目文件夹并打开release文件夹,您可以在此处获取setup.exe文件。双击“TestSetup”文件并将项目安装到您和其他计算机上。