【问题标题】:My Java GUI interfaces with my uber-cool proprietary dll. How can I prevent 3rd parties from interfacing with this dll?我的 Java GUI 与我的超酷专有 dll 交互。如何防止第 3 方与此 dll 交互?
【发布时间】:2012-06-16 14:39:09
【问题描述】:

我正在用 C++ 编写我的流程。
现在我想写它的 GUI。
我正在考虑使用 Java 来执行此操作并使用 JNI 链接它,但后来我想到了一个安全问题...
假设我的 GUI.exe 文件是用 Java 编写的,我的 Engine.dll 文件也是用 C++ 编写的。
什么可以阻止邪恶的人获取我的 DLL 并将其链接到他们的程序?
我确实在我的 C++ dll 中使用了许可证验证的东西,但它可以被这些邪恶的邪恶的人破坏。
我知道每个程序都可以被破解,但我不想只是给他们我的引擎以方便使用。

有没有办法保护这个链接?
还是我也应该使用 C++ 来编写 GUI?

【问题讨论】:

  • 嗯...对你的 DLL 进行逆向工程没有什么是真正安全的,但是如果应该得到你的 DLL 的人确切地知道你是如何做到的,那么我就不能真正成为这样的安全问题。
  • 我不担心逆向工程。假设您的 DLL 公开了一个函数“DoSuperAmazingThing”。我可以获取这个 DLL,将其链接到我的程序,调用“DoSuperAmazingThing”并与我的程序一起出售。也许我什至会将它用作库,所以你永远不会知道。

标签: java c++ security user-interface linker


【解决方案1】:

最便携的解决方案可能涉及以任何看起来合适的方式加密进入和离开 DLL 的数据。那时不需要对 C++ 端进行混淆。这将需要将加密密钥嵌入到 C++ 二进制文件和您将 Java 编译到的任何内容中;例如,您可以采取额外的步骤,通过用一大块随机垃圾隐藏它并对其进行索引来使其不方便查找。

另一种选择是支付许可系统的费用,该系统将在调用或链接时由 ubercool.dll 进行检查。

最终,您是在尝试执行一些注定要失败的防御行动。如果您的 ubercool 功能真正有价值或有用,并且有人想以您不希望他们不喜欢的方式使用它,他们会想办法。谁能想到还有没有破解的商业软件?

最后,您可以在最终用户无法操作的系统上运行您的软件。具有锁定引导加载程序、TPM 模块等的移动设备是一种方法;另一种是将您的 ubercool 东西作为托管服务运行,如果人们拥有您当然可以控制的适当凭据,他们可以连接到该服务。

【讨论】:

    【解决方案2】:

    考虑对将使用 dll 的 Java 或 C# 代码使用混淆器。这并不能解决所有问题,但对程序进行逆向工程会更加困难。

    此外,如果您的项目是用 C++ 编写的,您可以考虑将 C++\CLI 用于应用程序的 GUI 部分。

    【讨论】:

    • 好的,但是如果我想使用你的 C++ DLL,我真的不在乎你的混淆 C#/Java 代码。
    • 我的意思是混淆可能会隐藏一些有助于人们理解 DLL 的细节。
    • 据我所知,C++ 混淆只能通过丢弃您的源代码、在发布版本中为公开的方法命名错误、添加虚拟方法等来实现。我宁愿不这样做。它也可能不是很有效......
    • 我说的不是 C++ 混淆,而是 Java 或 C# 或他用来表示 GUI 的任何东西。
    • 我有你用 C++ 编写的 engine.dll。我也有你的超级加密混淆和什么不是 gui.exe。我扔掉你的 EXE,拿走 DLL 并使用它。怎么办? ;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-09
    • 1970-01-01
    相关资源
    最近更新 更多