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

Java Discussion :

Java à l'épreuve de l'ingénierie inverse


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 11
    Par défaut Java à l'épreuve de l'ingénierie inverse
    Bien chers tous,

    J'avais décidé d'apprendre le langage Java pour développer un programme. Quelques jours plus tard, patatra, un ingénieur en informatique me dit "Java can be easily reverse-engineered ; just see how many Android applications can be cracked nowadays".

    Je demande alors à une entreprise qui commercialise des applications grâce auxquelles "les licences d'un logiciel peuvent être protégées" si leur technologie permet de résoudre ce défaut de Java.

    Réponse : "Unfortunately we do not have anything that would assist in this area."

    Mais alors, que faut-il faire ?

    Renoncer à Java ? Développer une Web application en Java ? Appliquer une procédure de sécurité spécifique à Java ? Protéger un logiciel développé en Java grâce à une autre technologie ? Si oui, laquelle ?

    Merci.

    Bien à vous

    Corine

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Les technique de retro ingénirie se sont fortement développé depuis leur début, presque tout le langages peuvent être décompilé sans grosse difficulté. Ca n'a rien de nouveau et quand je regarde en arrière, le seuls système de protection qui ont jamais vraiment fonctionné étaient ceux où ce sont les serveurs qui font le travail. On ne peux pas craquer quelque chose qu'on n'a pas. C'est comme ça que survivent les gros licenses de jeu. Si tu ne peux pas jouer en ligne et que le jeu est inutile en solo, l'intérêt du crack deviens limité. Ca n'a rien de spécifique à java et si tu débute, ce n'est pas ça qui doit t'arrêter. Pour faire simple, si tu veux viser le marché mobile tu sera obligé de faire de l'android et de l'ios, donc au final que ce soit crackable ou pas t'intéresse peu. Après des boites vendent des solution qui bidouillent le byte code pour rendre la décompilation difficile ou impossible, mais ça n'a jamais arrêté un crack On n'a pas besoin de pouvoir décompiler une application pour faire un crack, quel que soit le language.

  3. #3
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    Oui, les applications Java peuvent être facilement décompilées et étudiées. Maintenant, ce n'est pas le seul langage qui soit dans ce cas. D'ailleurs, on peut faire aussi l'effort d'étudier du langage machine si on veut, et beaucoup de hackers ne s'en privent pas d'ailleurs.

    Ensuite, dans le domaine professionel ou industriel, le source n'est pas tout. Dans le modèle économique de ma société, on fournit des applications Java, en code source non protégé (on envisage même de les passer en open source, du moins pour une application). Les licences ne concernent pas l'applicatif, mais juste son usage et le service qui va avec.
    Celle sur laquelle je bossais il y a peu de teps avait plus d'1 millions de lignes de code : il faut déjà être motivé pour faire le reverse-ingeniering, en avoir le temps, et l'intérêt surtout. Mais ce qu'on fait payer avant tout, c'est le service qui va avec, service sans lequel avoir l'application ne permet pas d'aller très loin.
    Sur l'autre applicatif qu'on distribue, nos clients nous commandent régulièrement des évolutions : ils n'ont aucun intérêt à les faire eux-même.

    Ensuite, on pourrait imaginer qu'une bande de gars regardent nos sources et reconstruisent une application à l'identique pour la vendre : quel intérêt de passer du temps à lire notre code ? Autant réécrire from scratch une application originale : il y a bien plus de chance de la vendre, et au moins, on maitrise la technologie et le service qui va avec, et on apporte sur le marché une vraie nouveauté qui peu amener un client à choisir cette application plutôt que la nôtre. En plus, je les vois bien se présenter aux mêmes appels d'offre que nous avec une application identique. Faudrait qu'il soit nettement moins chers pour devenir intéressant, et proposer un service au moins équivalent.

    Evidemment, il peut y avoir des parties technologiques originales : mais là c'est pareil, le source n'est pas tout, il faut maitriser la techno aussi. Après, l'important c'est de rentabiliser la techno le plus vite, pour que si quelqu'un d'autre l'imite, on n'ait plus à craindre de perdre l'investissement en R&D et qu'on ne soit plus que sur de la concurrence classique (sur le service donc).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  4. #4
    Membre Expert
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Par défaut
    Citation Envoyé par Corine 2015 Voir le message
    Quelques jours plus tard, patatra, un ingénieur en informatique me dit "Java can be easily reverse-engineered ; just see how many Android applications can be cracked nowadays".
    Et moi, je te dirais : "C++ can be easily reverse-engineered ; just see how many C++ games can be cracked nowadays". Et j'aurais dit une betise aussi grosse que celle de ton ami.
    Deja, il n'y a pas de lien direct entre la decompilation et le crack. Bien sur, c'est plus simple de cracker un programme decompilé puisqu'il est plus lisible mais un programme compilé n'a jamais arreté un hacker.

    Ce qu'il faut savoir, c'est qu'un programme informatique pourra toujours etre hacké (quel que soit le language). L'effort pour le proteger doit etre proportionnel au besoin de protection. Mais comme ca a été dit, la seule protection fiable est de ne pas donner l'executable (typiquement en laissant tout sur un serveur). De toute facon, dans la plupart des cas, ce n'est pas le programme lui-meme qui a de la valeur mais les données qu'il utilise. Et c'est elles qu'il faut proteger.

  5. #5
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 11
    Par défaut
    Bien chers tous,

    Merci beaucoup à hwoarang, joel.drigo, tchize_.

    Vos arguments sont intéressants et convaincants.

    * * *

    la seule protection fiable est de ne pas donner l'executable (typiquement en laissant tout sur un serveur). De toute facon, dans la plupart des cas, ce n'est pas le programme lui-meme qui a de la valeur mais les données qu'il utilise. Et c'est elles qu'il faut proteger.
    Donc, si je vous comprends bien, pour protéger un logiciel, il faut partitionner l'executable sur plusieurs serveurs indépendants et protéger sa base de données par un firewall fiable.

    Merci.

    Avec mes salutations les meilleures,

    Corine

  6. #6
    Membre émérite
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2013
    Messages
    485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2013
    Messages : 485
    Par défaut
    La question a se posé: Est ce que la protection des sources de ton logiciel impact ton modèle économique?

    En gros, que vends tu? (Un logiciel en ligne, un service, de la formation, des licences, ...)
    et pour quel public? (entreprise, particulier, occasionnel, régulier, ...)

    De là, tu devrais te poser la question de l'impacte de ton business si un utilisateur 'découvre' ton code.
    Quel est serait le rapport coût/risque que tu es prêt a accepter?
    A toi de prendre la meilleur solution alors: rentre ton logiciel open-source, le laisser en java, utiliser un offuscateur, le faire en c++, en faire une web application ...

  7. #7
    Membre Expert
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Par défaut
    Citation Envoyé par Corine 2015 Voir le message
    Donc, si je vous comprends bien, pour protéger un logiciel, il faut partitionner l'executable sur plusieurs serveurs indépendants et protéger sa base de données par un firewall fiable.
    La, tu parles de protection physique des données. Oui, il faut que ce soit aussi securisé que possible pour eviter qu'un hacker puisse acceder directement au serveur et pomper la base de données.

    Mais dans nos messages, nous parlions plutot de la partie exploitation des données. Il ne faut pas oublier qu'au final, ton programme devra bien recuperer les données et les afficher au client.
    La plupart des programmes demandent un login/password et donnent acces aux fonctionnalitées liées au droits de la personne qui s'authentifie. La methode intuitive est d'envoyer ce login/password au serveur, recuperer les droits et activer l'IHM d'apres ce qu'on a lu. Ce qui est assez facile a contourner s'il suffit de sniffer les données recues du serveur et de modifier l'executable pour qu'il ait l'impression que la personne loggée est toujours un administrateur (qui aura donc acces a toutes les fonctionnalitées).
    De toute facon, pour bien faire, il faut toujours partir du principe qu'une donnée entrée par le client peut etre mauvaise. Par exemple, si on crée un formulaire avec un champ "age" formaté de type "numérique", il ne faut pas partir du principe que le champ sera toujours numérique. Il est facile de le changer pour pouvoir mettre un texte à l'interieur. Il faut donc toujours verifier coté serveur la validité des données avant de les utiliser dans la base de données.

  8. #8
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 11
    Par défaut
    Bonjour,

    Comment développer un logiciel en Java dont l'interface de connexion ( qui demande un identifiant et un mot de passe ) ne peut être ni séparée du logiciel, ni piratée ?

    Merci

    Corine

  9. #9
    Membre Expert
    Avatar de eulbobo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2003
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2003
    Messages : 786
    Par défaut
    Citation Envoyé par Corine 2015 Voir le message
    Comment développer un logiciel en Java dont l'interface de connexion ( qui demande un identifiant et un mot de passe ) ne peut être ni séparée du logiciel, ni piratée ?
    En faisant en sorte que l'utilisateur n'ait qu'une interface communiquant avec une application distante.

    Une application WEB par exemple, dans laquelle toute la logique fonctionnelle est installée sur un serveur (donc exécutable non accessible donc non décompilable), et pour laquelle l'utilisateur ne dispose que d'une page HTML pour échanger avec l'application.

Discussions similaires

  1. Degate démocratise l'ingénierie inversée du Hardware
    Par Idelways dans le forum Hardware
    Réponses: 6
    Dernier message: 08/08/2011, 13h45
  2. Ingénierie Inverse Via ODBC
    Par kfmystik dans le forum Autres SGBD
    Réponses: 1
    Dernier message: 11/08/2008, 11h25
  3. Postgres et l'ingénierie inversée
    Par Empty_body dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 14/12/2006, 15h13
  4. logiciel d'ingénierie inverse
    Par dahan dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 05/10/2006, 11h31
  5. Ingénierie inverse (désassembler un programme)
    Par slackspace dans le forum Assembleur
    Réponses: 7
    Dernier message: 06/09/2004, 19h52

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