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

C++ Discussion :

Garder un programme en memoire en permanence


Sujet :

C++

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Février 2011
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2011
    Messages : 147
    Points : 180
    Points
    180
    Par défaut Garder un programme en memoire en permanence
    Bonjour,

    Je ne suis pas sur si ce sujet a sa place ici ou alors plus dans le sous forum threads et processus.
    Si je me trompe, je m'en excuse d'avance.

    Alors voila mon probleme.
    J'ai developpe en c++/opencv un programme qui extrait des signatures d'images.
    Ce programme est plutot sensible, et on voudrait eviter un maximum le reverse ingeneering.

    Mon boss a dans l'idee de telecharger via VPN la dll principale a chaque redemarage de l'ordinateur, la garder en memoire et la supprimer du disque dur aussitot.
    Comme il faut traiter un nombre consequent d'images, on ne peut pas la telecharger pour chacune des images. Mais plutot une fois par session ou dans le genre.
    Il est aussi necessaire de pouvoir traiter plusieurs images en meme temps (plusieurs copies du soft en memoire).

    Si je touche ma bille en algorithmes de vision. En c++ et processus, ce n'est pas trop le cas.
    Ma question est donc de savoir ce que je dois apprendre pour regler mon probleme :
    Lancer le code et le garder en memoire en permanence.
    Avoir plusieurs copies qui permettent de traitrer plusieurs image en meme temps (une copie par coeur -1).

    Si certains points ne sont pas clair, je preciserais.

    Je ne demande pas vraiment une solution toute faite, mais plus une aide pour savoir ou regarder.

    Merci d'avance.

  2. #2
    Expert éminent sénior

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 031
    Points : 11 474
    Points
    11 474
    Billets dans le blog
    11
    Par défaut
    Bonjour !

    Etes-vous sur que quelqu'un aura un intérêt à essayer de faire du reverse engineering sur votre DLL pour essayer de cracker votre algorithme ? Parce que si une personne a envie de savoir comment il marche, vous pourrez faire ce que vous voulez, elle y arrivera.

  3. #3
    Membre expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 3 159
    Points
    3 159
    Par défaut
    Hello

    En effet, ne pas garder la DLL sur la machine ne suffit pas pour la protéger.

    Ceci étant dit, il est possible de réaliser cela en utilisant un modèle client/serveur : le serveur, lancé localement, charge la DLL et peut être contacté via un protocole simple (écrire un JSON sur une socket par exemple, ou un fichier "pipe"). Ensuite, il forke ou lance un thread pour traiter l'image. Il suffit de laisser le processus serveur démarré. Un logiciel client, qui ne contient pas le code métier mais juste le code pour contacter le serveur, peut être distribué et utilisé comme un soft classique.

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Février 2011
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2011
    Messages : 147
    Points : 180
    Points
    180
    Par défaut
    Bonjour,

    ALors moi, je n'en suis pas sur.
    Mon patron par contre a vraiment peur de ca.
    Pour faire cours, nous sommes une petite compagnie. Ce genre de signature d'image est utile pour de grosses grosses compagnies.
    Nous avons un brevet sur cet algorithme. Mais si du reverse engineering etait fait, il serait illusoire de defendre notre brevet devant les tribunaux.

    Je sais bien qu'il est en theorie impossible d'empecher ce genre de chose. Le but est ici de le rendre le plus difficile possible.

    Petite precision, les machines qui lanceront notre algo sont en petit nombre (on va dire une centaine, un peu plus avec le temps eventuellement).
    Chaque machine est unique, et leur access est restreint. Voler une machine chez le client est mission impossible.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Février 2011
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2011
    Messages : 147
    Points : 180
    Points
    180
    Par défaut
    Citation Envoyé par jblecanard Voir le message
    Hello

    En effet, ne pas garder la DLL sur la machine ne suffit pas pour la protéger.

    Ceci étant dit, il est possible de réaliser cela en utilisant un modèle client/serveur : le serveur, lancé localement, charge la DLL et peut être contacté via un protocole simple (écrire un JSON sur une socket par exemple, ou un fichier "pipe"). Ensuite, il forke ou lance un thread pour traiter l'image. Il suffit de laisser le processus serveur démarré. Un logiciel client, qui ne contient pas le code métier mais juste le code pour contacter le serveur, peut être distribué et utilisé comme un soft classique.
    Je ne suis pas sur de comprendre votre proposition.
    Je ne suis pas non plus familier de Json.
    Vous avez par hasard un lien decrivant ce genre de process ?

    Merci d'avance.

  6. #6
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 195
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 195
    Points : 17 163
    Points
    17 163
    Par défaut
    En gros, c'est un "web-service".

    Tu envoies une requete (avec le protocole qui te plait) au serveur, qui renvoie la réponse.

    Par exemple, tu envoie une requete http avec l'image (comme un formulaire html avec un fichier le ferait), et le serveur répond avec l'image signée.

    Si le serveur n'est pas installé chez le client, c'est gagné, il n'a aucun moyen de recevoir l'algo
    Ce procédé est doublé d'un autre avantage: vous pourrez mettre en place un système de licences renforcé.

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Février 2011
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2011
    Messages : 147
    Points : 180
    Points
    180
    Par défaut
    Merci l'eternel pour la reponse.

    Comme dit precedement, envoyer l'image sur un serveur distant est hors de question. Trop d'images, trop de bande passante.
    Nous avions pense a cela, mais c'est impossible en pratique.
    De plus les 200 images/minute sont par machine chez le client. On peut avoir 3 ou 4 machines en // chez le client.

    Sinon, je viens de decouvrir les ram-disk et le protocol tmpfs sur linux.
    Je n'ai pas encore trop lu, mais cela semble une bonne alternative. Si vous avez des experiences avec ca, je suis aussi prenneur.

    Merci.

  8. #8
    Membre confirmé
    Profil pro
    Consultant en technologies
    Inscrit en
    Octobre 2013
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en technologies

    Informations forums :
    Inscription : Octobre 2013
    Messages : 158
    Points : 555
    Points
    555
    Par défaut
    Il se peut que je me trompe, mais sous windows, tu peux pas effacer/modifier une dll à chaud. Par contre sous linux tu peux effacer un .so ou même un executable pendant l'execution le process s'en fout
    Il y a des logiciels qui permettent d'offuscer le code en renommant les variables et fonctions avec des noms qui ne veulent rien dire.
    Si le mec voit dans la dll qu'il y a une fonction ComputeGradient qui est appelé il devine ce que tu fais avec (c'est plus simple que lire l'assembleur) si il voit une fonction AAAAAA(aa, a, aaa) qui est appellé ce sera plus simple de ré-implémenter un nouvel algo qui fait la mêne chose plutôt que d'essayer de comprendre l'assembleur.

  9. #9
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 195
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 195
    Points : 17 163
    Points
    17 163
    Par défaut
    En fait, tu n'as que deux solutions.
    Ou bien le code est présent à un moment donné sur la machine client, ou il ne l'est pas.
    S'il ne l'est pas, il faut bien que tu aille le faire exécuter ailleurs.

    S'il l'est, tu ne peux pas empècher qu'on le trouve.
    Comment?

    En utilisant un traceur qui te dis quelle dll est chargée, mettre en pause le processus l'appelant, et inspecter la RAM.
    C'est raisonnablement facile à faire, et ce, avec des applications utilisées depuis plus de 20 ans pour modifier des jeux.

    Il existe notamment une application dédiée à la modification de texture directx (texmod si mon souvenir est bon)

    Et tu ne peux rien faire pour l'empêcher, parce que le code doit être à la disposition du processeur, qui ne connait que la RAM.

    @ __zzxy__
    l'obfuscation n'existe pas en C++, le code compilé ne contient déjà pas les noms de variables, quand il n'est pas compilé avec les informations de debug.
    Et si tu rajoutes les options d'optimisations, c'est suffisant pour tout pourrir.

    L'assembleur est terriblement incompréhensible.

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Février 2011
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2011
    Messages : 147
    Points : 180
    Points
    180
    Par défaut
    Merci l'eternel.

    Je comprends bien la problematique.
    En fait les pc clients, sont dans un environnement securise. Il s'agit de lignes de productions hautement reglementees.
    Les reseaux sont en principe securise, donc pas d'access a craindre de l'exterieur.
    Il est impossible (en principe du moins) d'ouvrir les armoires ou se trouvent les machines pour avoir un access physique a la machine : brancher un clavier, faire une copie du disque dur ...

    Il serait eventuellement possible de voler la machine pour avoir une copie de la DLL/.so. Notre but etait donc de ne pas avoir la DLL sur un disque dur/sdd, mais uniquement en RAM afin que chaque coupure de courant la fasse "disparaitre".

    Plus je regarde ramfs, plus je me dit que c'est ce qu'il nous faut.

  11. #11
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 195
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 195
    Points : 17 163
    Points
    17 163
    Par défaut
    En effet, ca peut.

    ramfs est totalement transparent au programme en lui même.

  12. #12
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 171
    Points : 12 293
    Points
    12 293
    Par défaut
    Pourquoi se prendre la tête ?
    Il suffit de bitlocker les disques, point bar.

    http://windows.microsoft.com/fr-fr/w...ures/bitlocker

  13. #13
    Membre habitué
    Profil pro
    Inscrit en
    Février 2011
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2011
    Messages : 147
    Points : 180
    Points
    180
    Par défaut
    Merci a tous pour vos reponses.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment obtenir l'adresse d'un autre programme en memoire ?
    Par Maverick357 dans le forum Windows
    Réponses: 4
    Dernier message: 24/05/2012, 08h02
  2. [PHP 4] Formulaire multipages : Garder les session en memoire
    Par nspj1 dans le forum Langage
    Réponses: 11
    Dernier message: 12/12/2008, 16h23
  3. [MySQL] garder une valeur en memoire et la reutiliser par la suite
    Par stefon dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 13/12/2006, 14h00
  4. garder les images en memoires
    Par jmjmjm dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 18/09/2006, 14h20
  5. Réponses: 29
    Dernier message: 01/07/2006, 09h23

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