如何保护我的开发人员的ASP.Net源代码

时间:2009-07-18 05:46:23

标签: .net asp.net dll copy-protection

这似乎是一个奇怪的位置,但无论如何让我问这个问题。

我已经创建了一些DLL来做一些神奇的mumbo-jumbo,这是显示我现在在ASP.Net中制作的网站内容所需要的。我有一个小团队的开发人员可以帮助我,但我担心他们会窃取我的代码(DLL)并在他们离开我的公司时在项目中使用它。在一个软件中,我可以证明他们正在使用我的DLL来生成内容,但是在公共场所无法使用DLL的服务器上我不能。

因此,尽管有一个团队,我一直在努力解决这个问题。

我的问题是。 有没有什么方法你可以考虑使用哪些我可以保护我的DLL(进入bin文件夹),这样我的编码器就无法窃取它,或者如果被盗则变得无法使用。

我只想保护进入bin文件夹的内容。

8 个答案:

答案 0 :(得分:8)

如果环境不像家一样,你可以让dll检查它的环境并且无法工作(我建议你让它给出错误的结果而不是中断)。您还必须对代码进行模糊处理,以阻碍删除保护的工作。

编辑:您可以使用环境变量,注册表项,性能计数器的存在,machine.config中的模糊设置等,并使其看起来像一个真实的设置,然后使用强名称进行模糊处理和签名。

答案 1 :(得分:4)

这可能不适合您的情况,但您可以为他们提供代理DLL,该代理DLL不会执行计算,而是调用您的DLL。

然后,将您的DLL保存在只有您有权访问的另一台服务器上,代理DLL通过某种远程协议调用它。

答案 2 :(得分:2)

这是一个奇怪的立场......我的哀悼。

在.Net级别,您可以做的最好的事情是在构建代码时对代码进行模糊处理。强烈签署你的程序集会让你知道是否还在进行篡改。

有些人采取的另一种方法是用C ++编写真正敏感的代码并将其编译为非托管的.dll,并使用interop从.net调用它。 C ++字节码比IL更难阅读,这为简单的逆向工程带来了更多障碍。

编辑:根据OP的评论,这是一个更新的答案。

如果您只是担心他们窃取您放置在Web服务器上的bin文件夹中的DLL,只需将其发布到\ bin的子文件夹,使用Windows权限锁定文件夹,所以他们没办法可以进入它,并更改您的web.config以探测它。

<runtime>
   <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <probing privatePath="bin;bin\mysubfolder;" />
   </assemblyBinding>
</runtime>

一定要确保强烈命名.dll,并将您的私钥文件保存在安全的地方。这使得你的.dll唯一可识别,并且如果它们确实可以检测到它们就会被篡改。

答案 3 :(得分:1)

相关:https://stackoverflow.com/questions/181991/suggest-a-good-obfuscator-for-net-closed
您可能希望有选择地对代码进行模糊处理(保持公共API原样)

答案 4 :(得分:1)

您可以让dll与受信任的第三方(可能是您可以控制的服务器)进行对话,以便做一些握手以确保它应该运行。

的内容
A. Hey, I'm sitting at [hostname->taken from env vars], can i do my job?
B. (checks records of registered hosts)  Yes you can.
A. Thanks.  (does what it does best)

编辑: 粗略的,如果其他人知道你正在这样做,他们可以将远程地址绑定到他们选择的机器上......此时你还没有真正解决原来的问题。

答案 5 :(得分:1)

我对印度的法律制度知之甚少,但要确保你让他们签署某种形式的保密协议,并向他们明确表示你认真对待,并且如果他们违反了它,就会起诉他们。< / p>

如果可能,只通过Windows服务或进程外COM服务器公开您的DLL,以便您可以将DLL隔离在无法直接访问它的位置。

如果他们可以对你的DLL进行物理访问,并且他们是一半有能力的开发人员,那么从技术的角度来看,实际上可能无法真正阻止他们使用它。你可以放慢一点,但如果他们有权访问二进制文件,他们将不可避免地得到他们想要的东西。拒绝他们访问二进制文件是防止它的唯一有效方法。

但是,如果DLL以任何方式处理用户输入并提供显示内容作为结果,那么你可以输入某种“复活节彩蛋”,根据一些不明确但具体的信息输出某种类型的独特签名输入。取决于可能足以开展调查的法律制度,并迫使他们准许调查人员访问,以证明他们不会窃取您的技术。除非他们知道它在那里,否则他们可能不会寻找它并在你有机会调用它之​​前禁用它。

答案 6 :(得分:1)

我会在安全的服务器上创建一个Web服务,它会公开你的dll的功能。开发完成后,您可以更改调用Web服务的代码部分以直接调用dll。

答案 7 :(得分:1)

我同意LachlanG的分发代理DLL的策略,而不是让开发人员访问可轻易被破解和反向设计的生产者。

您可以探索的另一个选项是“加密狗”保护您的DLL。在研究我的问题的解决方案时,我偶然发现了你的问题。我正在探索这个选项,因为我处于相同的位置,但是基于PHP的解决方案更加脆弱。

我发现Keylok以实惠的价格提供有竞争力的产品,我正在考虑这个问题。还有待观察如何保护PHP中的API调用,这些代码不是二进制代码也不是混淆代码。我不预见DLL的任何问题。

我是一家公司的项目经理,用这种加密狗保护他们的SAP集成软件。最终产品是带有代码,安装手册,加密狗和20万美元许可证的CD。 Sweeet!这是10年前,我还没有听说过他们的任何盗版或版权侵权故事!

我希望这会有所帮助。