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

Sécurité Java Discussion :

APIs et sécurisation d'application par la méthode d'obfuscation


Sujet :

Sécurité Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 19
    Par défaut APIs et sécurisation d'application par la méthode d'obfuscation
    Bonjour tout le monde,
    Je suis actuellement sur un projet d'obfuscation c a d, changer la structure d'un code source au niveau des instructions en gardant l'aspect sémantique du programme.
    Exp:

    Programme d'entrée ===(Moteur d'obfuscation)===Génération==>Programme de sortie

    Sachant que programme d'entrée = Programme de sortie

    Pour cela je dois passer par 4 étapes:
    • Supprimer tous les commentaires // et /* */
    • Rénommé les méthodes
    • Rénommé les variables
    • Chiffrer le fichier qui contient les instructions


    J'ai commencé le développement de la première partie mais mon traitement ne gère pas tous les cas, puisque je n'ai pas utilisé un scanner tel que LL1 mais juste ma propre méthode qui consiste à charger chaque ligne d'instruction dans un Vector<String> puis pour chaque ligne j'utilise une méthode qui détecte les commentaires dans la même ligne.

    NB: Je ne traite pas les cas des commentaires sur plusieurs lignes.

    Le problème se pose dans ce stade là!!! Donc j'ai entendu parlé d'une API REGEX qui pourra m'aider à refaire le travail puisque les parties 1-2-3 de mon projet sont identique.

    Est ce que vous avez quelque chose à me conseiller, des tuto à me filler...

  2. #2
    Invité
    Invité(e)
    Par défaut
    Salut,

    le fait que tu n'utilises pas un vrai parser rend ton projet dur voire impossible...
    Quand tu vas renommer une méthode, il faudra renommer les références à cette méthode aussi, mais il ne suffit pas de faire une recherche textuelle car plusieurs méthodes différentes, dans différentes classes peuvent avoir le même nom...
    Pourquoi ne pas utiliser un vrai parser ? (ça te permettrait aussi d'ignorer les commentaires dès le parsage et de gérer tous les types de commentaires). Il existe des tonnes de grammaires Java pour tous les générateurs de parsers possibles et imaginables.

    Ensuite si tu postes ici je suppose que tu veux notre avis sur le dernier point. Qu'entends-tu par "Chiffrer le fichier qui contient les instruction" (tu vas te faire tirer les oreilles par Marco si tu continues à dire "crypter" ) ?
    Tu parles du fichier source ? du fichier .class ?
    Chiffrer un fichier compilé n'apporte rien en général. En effet si ton fichier class est chiffré il te faudra utiliser un ClassLoader spécial qui le déchiffre si tu veux avoir une chance de l'exécuter. Soit, mais ton ClassLoader devra connaitre la clef permettant de déchiffrer, comment la stocker cette clef ? en dur dans ton ClassLoader ? => retour à la case départ : si on décompile le ClassLoader on a la clef, donc sécurité = 0.
    La demander à l'utilisateur et la stocker en RAM durant l'exécution ? hmmm soit mais si l'utilisateur connait la clef, il pourra déchiffrer les fichiers class à la main et ça ne sert à rien...
    Bref, fichier le code n'apporte aucune protection

    De plus l'obfuscation de code est un problème ardu, qui peut engendrer tout un tas de problèmes lors du chargement des classes (certaines références n'ont pas été changées par exemple). Et renommer les méthodes/champs, n'est pas une véritable protection vu que la logique et la structure du programme restent inchangés, les obfuscateurs jouent beaucoup plus sur la structure, ajout de bruit, et ces transformations peuvent être périlleuses sans de sérieuses connaissances théorique sur l'équivalence entre programmes.

    Enfin j'ai peut-être pas compris ton besoin, mais on aurait besoin de plus de détails pour pouvoir t'aider...

  3. #3
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 19
    Par défaut
    Merci tout d'abord pour les propositions.
    Bon je vais expliquer plus la partie chiffrement (désolé marco -C'est corrigé-)
    Bon le principe que je vais adopté dans mon projet est comme suite:

    Avoir un fichier .class à l'entrée et sortir avec un autre fichier dont les instructions sont en désordre.
    Exp:
    FICHIER_ORIG
    --------------------
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    void main(){
       int x = 0;
       String maChaine;
       System.Out.Println(maChaine + x);
    }
    A la sortie on aura deux fichier un qui contient les instructions en désordre
    et un autre qui contient l'ordre original de chaque ligne d'instruction

    FICHIER_GEN
    -------------------
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
       int x = 0;
       void main(){
       System.Out.Println(maChaine + x);   
       String maChaine;   
    }
    FICHIER_DORDRE
    Le dernier fichier devra être chiffrer
    Le fichier qui contient les instructions en désordre doit être offusqué.

    C'est celle la l'idée qui je dois implémenté

  4. #4
    Invité
    Invité(e)
    Par défaut
    si tu obfusques le fichier avec les instructions dans le désordre tu vas avoir des surprises vu que la sémantique n'a rien à voir avec le code de base, et est plus que très probablement non compilable... Pour obfusquer il faut connaître la sémantique de base afin d'appliquer des règles bien définies dont on sait qu'elles ne changent pas la sémantique.

    Ensuite chiffrer le dernier fichier est simple en soit mais on en revient au même problème : toute personne voulant exécuter ton code doit connaître la clef pour déchiffrer donc peut reconstruire ton code dans l'ordre donc il n'y a aucune protection.
    L'obfuscation doit être un processus à sens unique, qui assure que le résultat peut être exécuté tel quel en gardant la même sémantique que le code de base, mais en devenant difficilement compréhensible par un être humain.

    Dans quel cadre réalises-tu ce projet ? études ? professionnel ? quel en est le véritable but ?

  5. #5
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 19
    Par défaut
    Je réalise ce projet dans le cadre universitaire.
    Bon d'après ce que vous proposer je ne dois pas passer par la solution classique (clé).
    J'ai cru que cette méthode est intéressante malgré ça limitation au niveau sécurité comme vous l'avez mentionné!!

    Bon tout ce que je cherche maintenant c'est une méthode réalisable vu que le temps ne me permet pas de réalisé de grandes choses.

    Je dois tout d'abord chercher un parser pour les premières étapes!!
    Et puis après je vais voir quoi faire dans la partie chiffrement des instructions

  6. #6
    Invité
    Invité(e)
    Par défaut
    en quoi chiffrer le code constitue une approche classique à l'obfuscation de code ?
    As-tu regardé ce qui se fait en général dans le domaine ? le type de transformations appliquées ? Une lecture intéressante sur le sujet : http://www.sable.mcgill.ca/JBCO/examples.html (et le tech report : http://www.sable.mcgill.ca/publicati...-tr-2006-5.pdf)
    Dois-tu trouver des techniques par toi même pour ce projet ? ou implémenter des choses existantes ?

Discussions similaires

  1. Réponses: 5
    Dernier message: 01/04/2014, 09h19
  2. Réponses: 1
    Dernier message: 05/02/2013, 16h36
  3. APIs et sécurisation d'application par la méthode d'obfuscation
    Par sympas88 dans le forum Général Java
    Réponses: 1
    Dernier message: 11/02/2011, 10h55
  4. Sécuriser l'intallation d'une application par numéro de séri
    Par dadamovic dans le forum Installation, Déploiement et Sécurité
    Réponses: 4
    Dernier message: 05/11/2005, 21h59
  5. Réponses: 2
    Dernier message: 05/12/2003, 11h37

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