17

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

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

因此,尽管有一个团队,但我一直在独自工作。

我的问题是。有没有什么方法可以保护我的 DLL(进入 bin 文件夹),这样我的编码人员就无法窃取它,或者如果被盗,它就无法使用。

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

4

8 回答 8

8

如果环境感觉不像家,你可以让 dll 检查它的环境并且无法工作(我建议你让它给出错误的结果而不是破坏)。您还必须对代码进行模糊处理,以阻碍移除保护措施的努力。

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

于 2009-07-18T06:27:01.890 回答
4

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

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

于 2009-07-18T06:20:37.287 回答
2

这是一个奇怪的位置……我的哀悼。

在 .Net 级别,您能做的最好的事情就是在构建代码时对其进行混淆。强烈签署您的程序集会让您知道篡改是否也在进行。

有些人采用的另一种方法是用 C++ 编写真正敏感的代码并将其编译为非托管 .dll,然后使用互操作从 .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 具有唯一可识别性,并且如果他们确实获得了篡改,则可以检测到。

于 2009-07-18T06:05:36.567 回答
1

相关:https ://stackoverflow.com/questions/181991/suggest-a-good-obfuscator-for-net-closed 。
您可能希望有选择地混淆您的代码(保持公共 API 不变)

于 2009-07-18T06:00:00.773 回答
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)

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

于 2009-07-18T06:27:21.593 回答
1

我对印度的法律体系了解不多,但请确保您让他们签署某种形式的保密协议,并向他们明确表示您会认真对待,如果他们违反了会起诉他们。

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

如果他们对您的 DLL 具有物理访问权限,并且他们是合格的开发人员,那么从技术的角度来看,您可能无法真正阻止他们使用它。你可以让他们慢一点,但如果他们可以访问二进制文件,他们不可避免地会得到他们想要的。拒绝他们访问二进制文件是防止它的唯一有效方法。

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

于 2009-07-18T06:59:20.967 回答
1

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

于 2009-07-20T02:50:29.937 回答
1

我同意 LachlanG 分发代理 DLL 的策略,而不是让您的开发人员访问可以轻松破解和逆向工程的生产版本。

您可以探索的另一个选项是“加密狗”保护您的 DLL。在研究我的问题的解决方案时,我偶然发现了你的问题。我正在探索这个选项,因为我在同一个地方,但基于 PHP 的解决方案更容易受到攻击。

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

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

我希望这有帮助。

于 2009-12-30T07:01:48.080 回答