2012-01-21 4 views
0

Je dois utiliser une sorte de licence sur certaines applications Linux pour lesquelles je n'ai pas accès à leur base de code.Lancement/Licence de l'application Linux de contrôle

Ce que je pense est d'avoir un processus séparé lire la clé de licence et vérifier la disponibilité de cette application. Je devrais alors m'assurer que le processus est exécuté pendant chaque invocation de l'application respectée. Existe-t-il une fonctionnalité de Linux qui peut aider à cela? Par exemple quelque chose comme le fichier sudoers dans lequel je détecte quel utilisateur et quelle application tente d'être lancée, et si une combinaison est satisfaite, exécutez d'abord la vérification du processus de licence.

Ou puis-je faire quelque chose comme permet pas à l'utilisateur de lancer l'application (ligne de commande) par lui-même, et les forcer à la conduite à mon processus de licence afin:

/usr/bin/tm | license_process // alors que '/ usr/bin/tm' échouerait tout seul

Répondre

-1

Vous pourriez écrire un binaire wrapper qui fait les vérifications, puis lier dans la vraie application dans le cadre de ce binaire, en utilisant quelques astuces dlsym peut être en mesure d'appeler la fonction principale réelle à partir de la fonction principale wrapper.

IDEA

  1. lire sur-piratage ELF: http://www.linuxforums.org/articles/understanding-elf-using-readelf-and-objdump_125.html
  2. utilisation ld renommer la fonction principale du programme que vous souhaitez protéger l'accès. http://fixunix.com/aix/399546-renaming-symbol.html
  3. écrire un wrapper qui fait les vérifications et utilise dlopen et dlsym pour appeler le réel principal.
  4. lier ensemble une application réelle avec votre wrapper, comme un binaire.

Maintenant, vous avez une application qui a vos contrôles personnalisés qui sont quelque peu difficiles à briser, mais pas impossible.

Je n'ai pas testé cela, je n'ai pas le temps, mais une sorte d'expérience amusante.

+1

Cela est probablement une violation du droit d'auteur sur la «vraie» application si vous n'avez pas le consentement explicite du détenteur des droits d'auteur. –

+1

"utiliser ld pour renommer la fonction principale ..." - d'abord "ld" ne peut rien faire pour un exécutable déjà lié, et deuxièmement, renommer "main" serait complètement inutile: son adresse est déjà enregistrée comme l'appel cible que '_start' appellera. –

+0

Un peu fatigué quand j'ai écrit ça à propos de ld, ce que j'essaie de faire est de lier l'application avec un morceau de code qui fera les vérifications, je suis d'accord avec vous (@EmployedRussian) que la plupart des façons sont inutiles contre un attaquant compétent en programmation. mais c'est mieux que n'importe quel type de processus séparé. @EmployedRussian Que pensez-vous de l'utilisation d'objcopy pour inclure l'application réelle dans l'encapsuleur et changer le pointeur d'instruction si les vérifications échouent, sinon quitter. –

2

J'ai besoin d'employer une sorte de licence sur certaines applications Linux

S'il vous plaît noter que les chèques de licence coûtent généralement vous façon plus (à l'appui et l'administration) que ce qu'ils valent: tous ceux qui veut contourner le chèque et a un minimum de compétences le fera, et ne paiera pas pour la licence s'il ne peut pas de toute façon (c'est-à pas mettre en œuvre un régime de licence, vous êtes généralement laissant argent sur t la table).

que je n'ai pas accès à leur base de code.

Cela rend votre tâche à peu près impossible: les seuls efficaces systèmes de protection contre la copie exigent que vous reconstruisez votre application entière, et en faire vérifier la licence en tant de lieux distincts que le serait attaquant s'ennuie et s'en va. Vous pouvez lire à propos de ces régimes here.

Je pense avoir un processus séparé lire la clé de licence et vérifier la disponibilité de cette application.

Un tel système sera contournée en moins de 5 minutes par une personne qualifiée avec strace et gdb. Ne perds pas ton temps.

Questions connexes