Question

Disons que j'ai un projet publié sous GPL, avec des sources accessibles à tous. Plus tard, je trouve un produit très similaire, mais en tant que source fermée, distribué en mode binaire uniquement par quelqu'un d'autre.

Existe-t-il un bon moyen de savoir qu'ils utilisent mon code source dans leur produit?

Si la solution consiste en quelque sorte à désosser le binaire, est-il possible de l'automatiser?

EDIT: Clarification. La recherche de bogues est une option, mais pas définitive, surtout si le projet est une bibliothèque et que le binaire a ajouté sa propre interface graphique, par exemple. La situation qui m'intéresse, c'est quand il n'est pas flagrant que le code soit supprimé.

Était-ce utile?

La solution

Recherchez les marques de naissance du logiciel. Cette méthode tente d’établir des liens entre les logiciels en fonction d’un code binaire ou d’un comportement dynamique. Christian Collberg est un expert en filigranes logiciels, à partir duquel les marques de naissance ont été dérivées. Tout cela est encore en terrain de recherche.

Autres conseils

Bugs.

Si la version à source fermée partage la plupart de ses bogues avec votre projet, elle est probablement "levée".

Vous pouvez également essayer de décompiler votre propre binaire avec une version décompilée du binaire source fermé ... bien que cela ne soit probablement pas fiable.

Évidemment, si le fichier binaire suspecté n'est pas stripped , vous pouvez simplement rechercher tous les symboles portant le même nom que celui de votre code.

Il existe de nombreux travaux sur la décompilation et le reverse engineering de codes binaires. L’expert mondial est probablement Cristina Cifuentes . Elle a beaucoup travaillé avec la décompilation. Il serait également intéressant d’écrire à Alex Aiken pour lui demander si son outil Mesure de la similarité logicielle pourrait être adaptée aux codes binaires.

Une méthode évidente consiste à rechercher des chaînes. exécutez l'outil de chaînes unix et voyez si le binaire contient l'une des chaînes littérales de votre code. principalement des choses comme des messages d'erreur et du texte dans les boîtes de messages.

Vous pouvez essayer de désassembler les deux programmes et de comparer l'ensemble, mais s'ils utilisaient un compilateur différent, leur programme pourrait présenter des différences mineures. Il existe quelques désassembleurs gratuits ou un débogueur peut également passer en assemblage.

En dehors de cela, il n’ya vraiment pas de moyen facile de découvrir ce genre de chose.

Le moyen le plus sûr auquel je puisse penser est similaire au mot 'Esquivalience' dans le dictionnaire oxford.
Ajoutez simplement un tableau binaire avec un contenu unique quelque part dans le code et n'oubliez pas de l'utiliser simplement pour que l'éditeur de liens ne l'optimise pas. Vous devriez probablement le masquer un peu afin que le lecteur non averti ne se rende pas bien compte que c'est redondant.
Ouvrez ensuite le fichier binaire compilé avec un éditeur hexadécimal et cherchez-le.

Pourquoi ne regardez-vous pas la table des symboles en utilisant nm?

$ nm a.out
...
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top