IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Autres éditeurs Discussion :

Signer et marquer son code


Sujet :

Autres éditeurs

  1. #1
    Membre averti
    Homme Profil pro
    Game Graphics Programmer
    Inscrit en
    août 2006
    Messages
    408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Game Graphics Programmer
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : août 2006
    Messages : 408
    Points : 389
    Points
    389
    Par défaut Signer et marquer son code
    Bonjour,

    Je cherche une solution software, voire même juste des informations pour signer/marquer du code source C++. Je pense notamment à des techniques de filigrane (watermarking) ou stéganographiques pour pouvoir identifier un fichier ou un ensemble de fichiers de code source.

    Pour le contexte, mon entreprise veut permettre à nos clients d'avoir accès au code source, et biensûr, prevenir toute potentielle faille de sécurité du côté du client. Il nous faut surtout pouvoir répérer des leaks potentiels et savoir de quel client ca vient.

    Bien sûr, il faut que ce soit suffisamment subtil pour passer inapercu, mais aussi solide pour éviter que le client efface (sciemment ou pas) ce marquage.

    Est-ce que vous avez des idées ou connaissez des solutions complètes pour cela ?

    Merci pour vos réponses.

    Kurisu

  2. #2
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    août 2008
    Messages
    26 236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : août 2008
    Messages : 26 236
    Points : 186 026
    Points
    186 026
    Par défaut
    Salut,

    Pour le code assembly, tu peux utiliser le Dotfuscator. Il y a un onglet PreMark, qui permet d'appliquer un filigrane sur un assembly. Je ne sais pas comment ça fonctionne, mais ça ne va pas convenir à tes besoins (C++, et non C++/CLI).

    Par contre, cela donne une piste : il existe des obfuscateurs. Peut-être y en a-t-il un qui accepte le C++ et qui propose la même fonctionnalité.

    Tu peux aussi faire des modifications aléatoires à chaque appel de fonction, l'aléatoire contenant une référence à ton client. Évidemment, la partie ajoutée doit être différente pour chaque symbole, sinon un simple Rechercher/Remplacer dans la solution, et c'est parti... C'est plus dans le domaine de l'obfuscation, mais je ne sais pas si c'est automatisable quand on veut faire de telles modifications...
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  3. #3
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    Rendre le binaire compilé "indécompilable", c'est à peu près facile bien qu'aucune technique ne soit parfaite.

    Par contre, côté fichiers source, c'est une autre paire de manches : comment insérer quelque chose alors que chaque caractère est visible à l'écran ?? Le marquage va forcément se voir !!! C'est différent, là, d'une légère variation de pixels sur plusieurs centaines de milliers, et où surtout la couleur "exacte" du pixel ne modifie pas l'aspect général de l'image (c'est même la base du codage JPEG)... Avec un fichier texte, mettre "E" à la place de "e", ça peut changer beaucoup de choses.

    Tu as bien la solution d'insérer, en lieu et place d'espaces / tabulations, des caractères invisibles, mais ça pose un souci sous Windows : la police/encodage utilisés... Sous DOS, ça allait, le caractère 127 pouvait jouer ce rôle. Sous Windows, plus difficile, car tu ne peux pas présumer de la configuration de celui qui va lire ton code...

    Reste la solution de n'utiliser QUE des espaces dans le code, et de mettre parfois des tabulations suivant un encodage précis afin de valider un "1" ou un "0" (ex : une tabulation = 0, deux tabulations = 1), et donc recomposer un chiffre binaire ayant un sens au final.

    Problème, certains éditeurs de texte convertissent d'office les tabulations en espace et réciproquement, ce qui peut faire disparaître le watermark construit de cette manière... Je te passe le fait d'utiliser un "beautifier" de code, qui remanierait toute organisation spatiale des éléments de code au sein du fichier source et ferait disparaître là aussi n'importe quel marquage.

    Au final, la seule solution (presque) viable que je vois, c'est de ne montrer les sources que sous une forme non copiable facilement, notamment binaire : soit un PDF avec saisie/copie interdite, soit une image binaire (N&B pour un gain de place) avec des systèmes anti-OCR dessus de type filigrane, fond strié, etc. afin d'empêcher leur conversion automatique.


    Quoi qu'il en soit, distribuer les sources, c'est s'exposer à la possibilité qu'on le vole / détourne, et c'est strictement impossible à empêcher : un humain pourra toujours, au pire, recopier le code "à la main" en le lisant.
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  4. #4
    Membre averti
    Homme Profil pro
    Game Graphics Programmer
    Inscrit en
    août 2006
    Messages
    408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Game Graphics Programmer
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : août 2006
    Messages : 408
    Points : 389
    Points
    389
    Par défaut
    C'est bien ca le problème, la distribution sous forme de code source. (Bon, nos clients payent pas mal d'ailleurs juste pour cela).
    C'est pour ca que je cherchais des solutions subtiles.
    Mais bon, j'ai déjà quelques pistes, mais effectivement, il n'y a pas beaucoup de papiers techniques et/ou scientifiques à ce sujet. (Contrairement aux signatures binaires et bien sûr aux filigranes digitales appliquables aux fichiers media).

  5. #5
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    Ce qui est parfaitement normal, hélas... Comme je te l'ai dit, contrairement à un format binaire qui peut être plus ou moins protégé en fonction de sa nature, il n'est guère possible de protéger un fichier où chaque octet est "visible", et où en plus sa valeur possède une signification lourde ne permettant pas une modification mineure contrairement aux pixels d'une image.
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  6. #6
    Membre averti
    Homme Profil pro
    Game Graphics Programmer
    Inscrit en
    août 2006
    Messages
    408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Game Graphics Programmer
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : août 2006
    Messages : 408
    Points : 389
    Points
    389
    Par défaut
    Bon, petite mise-à-jour: comme il n'y a visiblement aucun soft, il faudra y aller avec une solution en plusieurs parties:
    - 1 signature visible visant à prevenir la redistribution inautorisée du source (clairement, un message du genre "hého mon petit gars, ce source est signé et nous saurons le retrouver s'il est redistribué!")
    - 1 signature moins visible (espaces, tabs) plus subtilement cachée (mais fragile, je l'avoue)
    - et plusieurs niveaux de "fonctionalité" subtile qui représente aussi une signature, fonctionalité unique à chaque client, par exemple.

    ...vous comprendrez que je ne peux pas m'étaler sur ce dernier plan.

    Tout de même, si vous avez des idées de fonctionalité "subtile" à ajouter à un programme, je suis preneur.

    (L'ironie à toute cette affaire, c'est que je suis un fervent adhérent à la mentalité OpenSource... sauf que mon salaire vient d'un middleware closed source en ce cas précis.)

  7. #7
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    Citation Envoyé par Kurisu Voir le message
    - 1 signature visible visant à prevenir la redistribution inautorisée du source (clairement, un message du genre "hého mon petit gars, ce source est signé et nous saurons le retrouver s'il est redistribué!")
    Ce qui est l'avertissement légal classique et habituel, théoriquement suffisant, et notoirement ignoré par 100% des pirates / copieurs du Dimanche.

    Citation Envoyé par Kurisu Voir le message
    - 1 signature moins visible (espaces, tabs) plus subtilement cachée (mais fragile, je l'avoue)
    Fragile, mais peut fonctionner malgré tout. A voir aussi avec, par exemple, la prise en compte de l'ordre de déclaration (.H) et de l'ordre d'implémentation (.CPP) qui peut générer un nombre.

    Citation Envoyé par Kurisu Voir le message
    - et plusieurs niveaux de "fonctionalité" subtile qui représente aussi une signature, fonctionalité unique à chaque client, par exemple.
    Je t'encourage, à ce niveau, à chercher du côté des traces binaires de compilation... Certains algorithmes produisent un résultat en assembleur "constant", sur quelques dizaines / centaines d'octets, et la multiplicité de ces motifs binaires "reconnus" pourrait être une source supplémentaire d'authentification.

    Suivant la plate-forme, tu peux aussi (en partie) utiliser les signatures des fonctions dans la librairie ("mangled names") afin de voir des "traces" des classes définies...
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  8. #8
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    septembre 2005
    Messages
    27 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : septembre 2005
    Messages : 27 272
    Points : 41 183
    Points
    41 183
    Par défaut
    En y pensant, l'ordre des éléments dans une structure, ça peut être une idée pas mal.
    Vu que pour n champs, il y a n! permutations, tu pourrais distribuer à chaque client un code source complet où les champs d'une structure donnée sont ordonnés différemment...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  9. #9
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    Faudrait alors que ce soit une structure "centrale", et surtout que la modification de l'ordre des champs produisent un tel bronx dans le code source que l'envie passe rapidement à celui qui essayerait...

    Or, sans faire de code "crade" (adressage absolu dans les structures, par exemple), je ne vois pas comment produire un tel effet... Si le code est propre, changer l'ordre (ou l'alignement !) d'une structure ne sortant pas de l'application (pas une trame réseau, par exemple) n'aura AUCUN impact sur le code produit... Mais changerait l'identificateur issu de la permutation.


    Dernier axe de recherche : passer en détection du plagiat. Il existe des softs gratuits pour ça, à voir si jamais ça peut t'aider à résoudre ton problème.
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  10. #10
    Membre expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : juin 2009
    Messages : 1 909
    Points : 3 281
    Points
    3 281
    Par défaut
    sur un copie tu peux partir du principe que les algos ne vont pas trop bouger contrairemeaux commentaire (en tete notament)

    donc tu peux imaginier un traitement sur les fichiers suspect virant les commentaire et qui leur donnera un format précis (indentation, tabulation, mise en forme, ...) et ou il ne reste que les algos

    tu applique la même technique a ton code et tu compare.

    apres tu peux etre plus fin car il peu y avoir des renomage de methodes/objets
    bazar: http://www.improetcompagnie.com/publ...ctacles-6.html

    BÉPO la disposition de clavier francophone, ergonomique et libre: http://bepo.fr/wiki/Accueil

    Emacs Wiki: http://www.emacswiki.org/

    En attente de ce que produira: http://www.pushmid.com

  11. #11
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    septembre 2005
    Messages
    27 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : septembre 2005
    Messages : 27 272
    Points : 41 183
    Points
    41 183
    Par défaut
    Au contraire, elle aurait UN impact sur le code produit: Les offsets d'accès à chaque champ, à chaque endroit du code où un champ de la structure est accédé.

    Très facile à repérer si la structure en question devient une classe avec des accesseurs implémentés dans une DLL...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  12. #12
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Au contraire, elle aurait UN impact sur le code produit
    Oui, mais son client a la totalité du code source apparemment, donc il est toujours possible de réordonner la structure... Et c'est très facile, vu que l'impact sur le code (s'il est propre !!) est nul.
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  13. #13
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    septembre 2005
    Messages
    27 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : septembre 2005
    Messages : 27 272
    Points : 41 183
    Points
    41 183
    Par défaut
    S'il y pense.

    Bien sûr, c'est de la sécurité par obscurité, mais c'est le cas de toutes les protections de ce genre. Et celle-là a le mérite de résister à un beautifieur.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  14. #14
    Membre averti
    Homme Profil pro
    Game Graphics Programmer
    Inscrit en
    août 2006
    Messages
    408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Game Graphics Programmer
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : août 2006
    Messages : 408
    Points : 389
    Points
    389
    Par défaut
    Merci pour les pistes.

    Un collègue a trouvé des papiers pour générer des signatures à partir de la "grammaire" précise d'un fichier de code source. Ca a l'air de resister aux beautifier et aux renommage du code.

    Le problème, c'est que nous devons tout de même donner du support à nos clients, auquel changer l'ordre des fonctions ne nous permettra plus de retrouver une question concernant telle ligne de code.

    Idem pour utiliser l'ordre des champs d'une structure. (En plus, s'il faut assurer qu'aucune erreur n'est introduite par notre signature, cela devient difficile, surtout avec les diverses plateformes à supporter avec le même bout de code (PC, Xbox360 et Ps3)).

    Une facon générale de protéger le code, c'est rendre les signatures difficiles à enlever/modifier, de facon à ce que économiquement insensé de le faire. C-a-d, soit que le code "tampered" soit rendu inutile (difficile) ou que cela prenne trop de temps et d'argent à réaliser. C'est du moins dans cette direction que je pense m'orienter...

  15. #15
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    Essaie de jeter un oeil du côté de la détection de plagiat malgré tout, on ne sait jamais...
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

Discussions similaires

  1. Comment bien déboguer son code ?
    Par D[r]eadLock dans le forum Débuter
    Réponses: 46
    Dernier message: 04/07/2013, 10h48
  2. Passer son code du C en C++
    Par Mynautor dans le forum OpenGL
    Réponses: 4
    Dernier message: 07/02/2005, 03h14
  3. Propriété de son code source.
    Par chocobn49 dans le forum Langages de programmation
    Réponses: 6
    Dernier message: 06/07/2004, 14h40
  4. [mise en page] pour bien indenter son code
    Par bihorece dans le forum C++Builder
    Réponses: 4
    Dernier message: 06/08/2003, 16h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo