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

Développement Web en Java Discussion :

Obfuscation du code Java


Sujet :

Développement Web en Java

  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2011
    Messages : 100
    Points : 161
    Points
    161
    Par défaut Obfuscation du code Java
    Bonjour
    je travaille sur application un peu "sensible" et le client souhaite protéger le code source et éviter le décompilation des classe.

    le projet est composé de deux sous-projets
    +1) XXXCore.jar (spring hibernate): c'est le projet à obfusquer
    +2)XXXWeb.war (interface web JSF): (pas besoins d'obfusquer).

    le XXXCore sera inclut dans le lib du war.

    seul le projet core a obfusquer.

    - quelqu'un à déjà travaillé sur projet identique?
    - quelqu'un aurait dans ces carton des doc pour l'obfuscation (proguard ou autre) en français de préférence?
    - ou y a t'il moyen d'obfusquer tous le war.

    merci d'avance

    le XXXWeb dépend du core, la communication se fait par des appel service via une factorySpring

    exemple
    dans mon bean (UtilisateurBean)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public void login(...){
       ....
       ....
     IUtilisateurService userService = (IUtilisateurService) (MyServiceFactory.getInstance()
                        .get(IUtilisateurService.INSTANCE_PROXY_NAME));
     
      UtilisateurDto dto = userService.login("ghiwani", "password2010");
     
    ....
    ...
     
    }

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    765
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 765
    Points : 1 036
    Points
    1 036
    Par défaut
    Bonjour,

    Quelqu'un pourra toujours décompiler le code et si le jeu en vaut la chandelle il pourra reconstituer un code source lisible.
    Il faut obfusquer assez pour rendre ce travail plus cher que le gain espéré quand à l'obtention du code source.
    Par contre je vois qu'il y a un login ... par expérience on n'obfusque jamais ce type de code. Toute sécurité par l'obscure est mauvaise.

  3. #3
    Membre habitué
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2011
    Messages : 100
    Points : 161
    Points
    161
    Par défaut
    le projet core contient un code qui vérifié une licence.
    une fois le projet livré chez "les clients de mon client", la vérification se fera en local en se basant sur un algorithme nomMachine, date, ....

    donc mon client veut obfusquer ce bout de code

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    765
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 765
    Points : 1 036
    Points
    1 036
    Par défaut
    Ok je vois dans ce cas pas trop le choix.

    voici un tuto : http://cyberzoide.developpez.com/securite/obfuscation/


    Mais de toute manière il y aura forcement quelqu'un qui va s'atteler à ce travail.
    Les meilleures protections que j'ai vu dans ce domaine étaient redondantes et dispersées un peu partout dans le code.
    Si bien que même si on parvenait à en comprendre une partie, il en restait une autre qui prenait le relais plus loin...

    Ce que je veux dire, c'est qu'il faut non seulement obfusquer le code, mais en plus insérer dès la conception des leurres et des vérifications supplémentaires. Ne pas uniquement se reposer sur l'obfuscation.

    Bon courage,

  5. #5
    Membre habitué
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2011
    Messages : 100
    Points : 161
    Points
    161
    Par défaut
    ok merci,
    je regarde, mais à premier vue, c'est que du java, je ne sais pas trop comment le war vas ce comporter puisque toutes les classe seront renommées en a.a.a.a.a...

    je fais le tuto et je vous fais un retour.

    merci bcp

  6. #6
    Membre habitué
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2011
    Messages : 100
    Points : 161
    Points
    161
    Par défaut
    Re:
    ce tuto explique juste le principe, auriez-vous un autre qui montre comment le mettre en pratique sur un projet .

    merci d'avance

  7. #7
    Membre habitué Avatar de yaraco
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2010
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2010
    Messages : 89
    Points : 150
    Points
    150
    Par défaut
    Non, dsl. La documentation Proguard et quelques tests suffisent normalement.

    Pense à ne pas obfusquer les noms de packages et les noms de classes que tu charges dynamiquement dans le code (si jamais tu as du code de ce type).

    Et n'obfusque pas non plus les noms menant au point d'entré de ton programme (ton main).

    Autre chose que tu pourras mettre en œuvre mais qui te demanderas un peu plus de temps : un ClassLoader personnalisé. Tu peux par exemple stocker ton code obfusqué dans un conteneur crypté avec à côté un ClassLoader de ton cru capable de d'explorer ce conteneur. C'est toujours pas ultime mais ça rajoute une petite couche de casse tête supplémentaire aux éventuels méchants pirates.

  8. #8
    Membre habitué
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2011
    Messages : 100
    Points : 161
    Points
    161
    Par défaut
    holaaaa ça se complique là.

    si j ai bien compris, proguard (l obfuscation) transforme le code avant compilation, ce qui va me rendre la tache très difficile puisque mon projet XXXCore contient des fichiers xml (spring et hibernate).

    auriez-vous un autre moyen pour protéger le code ?

    merci d'avance.

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    les obfuscateur travaillent souvent après la compilation, en faisant plusieurs choses:

    1) changer l'ordre d'instructions indépendantes en bytecode, pour que ça ne ressemble plus à la manière dont est habituellement traduite telle ou telle instruction

    2) changer les noms des méthodes et des classes, sauf celle que tu as explicitement indiqué vouloir garder claires (histoire de permettre la visibilité de l'api publique de ta librairies)

    3) Souvent, ça joue avec des noms de classes bizarres, comme A et a, qui sont différente, mais chiantes à sortir du jar sous une environnement windows (même non, avec casse différentes, windows il aime pas)


    Comme dit, pour que l'obfuscation serve à quelque chose, il faut aussi que ton code vérifie la licence à plein d'endroits de manière différentes. Si tu fais un méthode générique du style isLicenceValid(), j'aurais vite fait de rajouter dans ton spring une couche de aop et de redéfinir cette méthode à la volée par return true

Discussions similaires

  1. Obfuscation de code Java ?
    Par darioo2 dans le forum Langage
    Réponses: 1
    Dernier message: 20/08/2012, 18h09
  2. crypter *obfuscation* le code Java
    Par elhoussain dans le forum Tomcat et TomEE
    Réponses: 0
    Dernier message: 24/01/2011, 16h37
  3. cryptage code java *obfuscation*
    Par elhoussain dans le forum Servlets/JSP
    Réponses: 0
    Dernier message: 23/01/2011, 21h20
  4. [andromda]Infos sur andromda, générateur de code JAVA
    Par ugos dans le forum EDI et Outils pour Java
    Réponses: 5
    Dernier message: 08/09/2009, 15h30

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