控制Linux应用程序启动/许可

时间:2012-01-21 00:34:02

标签: linux licensing launch

我需要在一些我无法访问其代码库的Linux应用程序上使用某种许可。

我在想的是让一个单独的进程读取许可证密钥并检查该应用程序的可用性。然后,我需要确保在每次调用受尊重的应用程序期间运行该进程。是否有一些Linux的功能可以帮助解决这个问题?例如,sudoers文件,我在其中检测用户和尝试启动的应用程序,如果满足组合,请先运行许可证流程检查。

或者我可以做一些不允许用户自己启动(命令行)应用程序的事情,并强迫他们将其管道到我的许可证流程中,如下所示:

/ usr / bin / tm | license_process //而'/ usr / bin / tm'会自行失败

2 个答案:

答案 0 :(得分:2)

  

我需要在某些Linux应用程序上使用某种许可

请注意,许可证检查通常会花费你的方式(在支持和管理方面)比它们的价值更高:任何想要绕过检查并且具有一定技能的人都会这样做,并且无论如何他都不会支付许可费(也就是说,实施许可方案,你通常留下任何钱在桌子上)。

  

我无法访问他们的代码库。

这使得您的任务几乎不可能:唯一的有效复制保护方案要求您重建整个应用程序,并使其在许多不同的地方检查许可证,这将是攻击者得到的无聊而消失。您可以阅读有关此类方案的here

  

我在考虑让一个单独的进程读取许可证密钥并检查该应用程序的可用性。

stracegdb的技术人员将在5分钟内绕过任何此类方案。不要浪费你的时间。

答案 1 :(得分:-1)

您可以编写一个执行检查的包装二进制文件,然后在实际应用程序中链接作为该二进制文件的一部分,使用一些dlsym技巧,您可以从包装器main函数调用真正的main函数。

IDEA

  1. 阅读ELF-hacking:http://www.linuxforums.org/articles/understanding-elf-using-readelf-and-objdump_125.html
  2. 使用ld重命名要保护访问的程序的主要功能。 http://fixunix.com/aix/399546-renaming-symbol.html
  3. 编写一个执行检查的包装器,并使用dlopen和dlsym来调用真正的main。
  4. 将实际应用程序与您的包装器链接在一起,作为一个二进制文件。
  5. 现在你有一个应用程序,你的自定义检查有点难以打破,但并非不可能。

    我没有测试过这个,没有时间,而是一些有趣的实验。

相关问题