Security 应用程序/动态链接库-安全性

Security 应用程序/动态链接库-安全性,security,Security,我想知道在以下情况下保护应用程序和DLL文件的最佳方法: 示例: 在客户端上部署应用程序(软件) 该软件具有数据工厂(MS SQL、MySQL等)中使用的DLL直接注入 需要安全性: 要求#1主DLL(核心)需要某种类型的“许可证”(对于此用户和X期限,不能在其他机器上使用(复制) 需求#2-客户自定义代码不能使用数据工厂DLL(他不能构建自己的代码并使用我的库)。 (已编辑-添加新要求) 要求#3使用外部公司的硬件或服务不是我们的选择。 我找到的解决方案: 要求#1- 解决方案#

我想知道在以下情况下保护应用程序和DLL文件的最佳方法:

示例:

  • 在客户端上部署应用程序(软件)
  • 该软件具有数据工厂(MS SQL、MySQL等)中使用的DLL直接注入
需要安全性:
  • 要求#1主DLL(核心)需要某种类型的“许可证”(对于此用户和X期限,不能在其他机器上使用(复制)
  • 需求#2-客户自定义代码不能使用数据工厂DLL(他不能构建自己的代码并使用我的库)。 (已编辑-添加新要求)

  • 要求#3使用外部公司的硬件或服务不是我们的选择。
我找到的解决方案:
  • 要求#1-

    • 解决方案#1-软件需要自定义“保存数据文件”(对其进行完全保护),该文件将用于控制。应用程序将多次读取该文件(或者当它启动时,或者如果应用程序连续运行,则从24小时内的24小时开始。它将存储第一个执行日期、最后一个执行日期、该机器的某些ID、过期日期等。
      • 优点:
        • 客户端无法删除它或应用程序将停止工作,他无法更改系统日期(回放),因为应用程序与日期匹配
        • 如果用户想要升级过期日期,软件允许(通过离线或在线方式)
      • 缺点:
        • 嗯,这个文件将成为黑客攻击的目标。我不知道保护它的最佳方法
  • Req#2-

    • 解决方案#1-我没有一个:P

.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.--

有人能告诉我这方面的最佳做法吗?

不同的解决方案、优缺点等

.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-

我不确定这是否适合您的需要,但您可以使用包含USB加密狗的商业解决方案。您可以找到几家提供软件安全解决方案的公司。这些产品附带的大多数软件组件都包含许可和过期方式。 另一方面,您的硬件成本较高,需要投入一些时间和精力进行集成

要求2

取决于DLL的接口。您认为您的客户端或其他人是否可以轻松地使用您的DLL,而无需在接口上提供适当的标题和信息

如果您这样认为,也许您可以使界面看起来更复杂或使用模糊处理。

Req 1

我不确定这是否适合您的需要,但您可以使用包含USB加密狗的商业解决方案。您可以找到几家提供软件安全解决方案的公司。这些产品附带的大多数软件组件都包含许可和过期方式。 另一方面,您的硬件成本较高,需要投入一些时间和精力进行集成

要求2

取决于DLL的接口。您认为您的客户端或其他人是否可以轻松地使用您的DLL,而无需在接口上提供适当的标题和信息


如果你这么认为,也许你可以让界面看起来更复杂,或者使用模糊处理。

我回答了一个关于许可/保护软件的问题作为回应-这对你控制下的DLL也很好。简言之,不可能部署无法复制但可以生成的东西部署后必须通过呼叫您的组或公司获得许可的密钥

关于Req 2,我认为最合理的方法是向每个可能的黑客不知道的函数传递一个参数。我不认为使名称变得复杂或以其他方式混淆它们会有帮助(你总是可以分析DLL来发现其内容).混淆也会使您的维护更加困难-这不是一个好主意。我怀疑保护它们比维护这些DLL更重要


因此,我赞成将某种形式的幻数传递给函数。最简单的是一个简单的整数。更安全的是时间表示(最好是一个时间窗口)如果DLL中的dehash与当前时间相匹配,您就知道您被自己的代码调用了。

我回答了关于许可/保护软件的问题,在一定的长度上,这对您控制下的DLL也很好。简言之,不可能部署无法复制但无法复制的东西可以在部署后生成密钥,该密钥必须通过呼叫您的组或公司获得许可

关于Req 2,我认为最合理的方法是向每个可能的黑客不知道的函数传递一个参数。我不认为使名称变得复杂或以其他方式混淆它们会有帮助(你总是可以分析DLL来发现其内容).混淆也会使您的维护更加困难-这不是一个好主意。我怀疑保护它们比维护这些DLL更重要


因此,我赞成将某种形式的幻数传递给函数。最简单的是一个简单的整数。更安全的是时间表示(最好是一个时间窗口)然后进行散列。如果DLL中的dehash与当前时间匹配,则表示您知道自己的代码调用了您。

使用外部公司的硬件或服务不属于我们的选项。使用外部公司的硬件或服务不属于我们的选项。