Управление запуском/лицензированием приложений Linux

Мне нужно использовать какое-то лицензирование для некоторых приложений Linux, у которых у меня нет доступа к их кодовой базе.

Я думаю, что отдельный процесс считывает лицензионный ключ и проверяет доступность этого приложения. Затем мне нужно будет убедиться, что процесс запускается при каждом вызове уважаемого приложения. Есть ли какая-то функция Linux, которая может помочь в этом? Например, что-то вроде файла sudoers, в котором я определяю, какой пользователь и какое приложение пытается запустить, и, если встречается комбинация, сначала запускаю проверку процесса лицензии.

Или я могу сделать что-то вроде запрета пользователю запускать приложение (командной строки) само по себе и заставить его передать его в мой процесс лицензирования следующим образом:

/USR/бен/тм | license_process // тогда как '/usr/bin/tm' сам по себе потерпит неудачу


person sirmarlo    schedule 21.01.2012    source источник


Ответы (2)


Мне нужно использовать какое-то лицензирование для некоторых приложений Linux.

Обратите внимание, что проверка лицензии, как правило, будет стоить вам намного больше (в поддержке и администрировании), чем она того стоит: любой, кто хочет обойти проверку и имеет хотя бы немного навыков, сделает это и не платить за лицензию, если он все равно не может (то есть, не реализуя схему лицензирования, вы, как правило, не оставляете деньги на столе ).

что у меня нет доступа к их кодовой базе.

Это делает вашу задачу в значительной степени невыполнимой: единственные эффективные схемы защиты от копирования требуют, чтобы вы пересобрали все ваше приложение и заставили его проверять лицензию в столь многих различных местах, что потенциальному злоумышленнику это надоест и он уйдет. далеко. О таких схемах можно прочитать здесь.

Я думаю, что отдельный процесс считывает лицензионный ключ и проверяет доступность этого приложения.

Любая такая схема будет обойдена менее чем за 5 минут специалистом по strace и gdb. Не тратьте свое время.

person Employed Russian    schedule 21.01.2012

Вы можете написать двоичный файл-оболочку, который выполняет проверки, а затем скомпоновать реальное приложение как часть этого двоичного файла, используя некоторые приемы dlsym, которые вы можете вызвать настоящую основную функцию из основной функции оболочки.

ИДЕЯ

  1. почитайте о взломе ELF: 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 для вызова реального основного.
  4. связать реальное приложение с вашей оболочкой, как один двоичный файл.

Теперь у вас есть приложение с вашими пользовательскими проверками, которые сложно сломать, но не невозможно.

Я не проверял это, нет времени, но вроде забавный эксперимент.

person Jim Hansson    schedule 21.01.2012
comment
Это, скорее всего, является нарушением авторских прав в реальном приложении, если у вас нет явного согласия правообладателя. - person Jim Hansson; 21.01.2012
comment
используйте ld для переименования основной функции... -- во-первых, ld ничего не может сделать с уже связанным исполняемым файлом, а во-вторых, переименование main было бы совершенно бессмысленным: его адрес уже записан как цель вызова, которую будет вызывать _start. - person Employed Russian; 21.01.2012
comment
Я немного устал, когда писал это о ld, что я пытаюсь сделать, так это связать приложение вместе с фрагментом кода, который каким-то образом будет выполнять проверки, я должен согласиться с вами(@EmployedRussian), что большинство способов бесполезны против злоумышленник, умеющий программировать. но это лучше, чем любой отдельный процесс. @EmployedRussian, что вы думаете об использовании objcopy для включения реального приложения в оболочку и как-то изменить указатель инструкции, если проверки не завершатся ошибкой, иначе выйти. - person Jim Hansson; 21.01.2012