Partage
  • Partager sur Facebook
  • Partager sur Twitter

Génération de KeyStrokes aléatoire dans un JPasswordField

Protection de mot de passe contre les keyloggers

    29 janvier 2012 à 1:40:46

    Bonsoir tout le monde,

    Je veux créer un JPasswordField un peu plus sécurisé. L'idée est d'interférer le fonctionnement des keyloggers en générant des évènements de KeyStroke aléatoires. Quand l'utilisateur place le curseur dans le JPasswordField, le programme crée un thread qui génère des KeyStrokes à l'aide de la classe java.awt.Robot :

    Robot robot = new Robot();
    nextKey = alphabet[rand.nextInt(ALPHABET_SIZE)];
    robot.keyPress(nextKey);
    robot.keyRelease(nextKey);
    


    Cette solution marche, le Super Free Keylogger a bien capturé les caractères générés.

    Le seul problème est le filtrage des KeyStrokes. Il ne faut pas que les KeyStrokes générés par le robot soient pris en compte par le JPasswordField. C'est-à-dire que le JPasswordField ne garde que les caractères qui sont réellement saisis pas l'utilisateur.

    Ma première idée est de créer une sous classe de javax.swing.text.PlainDocument, nommée PasswordDocument et de réimplémenter la méthode insertString. Et je mets un drapeau booléen dans la classe, le drapeau est VRAI quand le robot est entrain de générer des caractères aléatoires, et la méthode insertString retourne immédiatement :

    document = new PasswordDocument();
    ... ... ...
    nextKey = alphabet[rand.nextInt(ALPHABET_SIZE)];
    document.setFakeStroke(true);
    robot.keyPress(nextKey);
    robot.keyRelease(nextKey);
    document.setFakeStroke(false);
    


    Sinon on appelle la méthode insertString de la classe mère :

    synchronized(lock){
    	if(fakeStroke){
    		return;
    	}
    	super.insertString(offs, str, a);
    }
    


    Mais après la génération d'un caractère aléatoire, le drapeau est dévenu FAUX immédiatement, la méthode insertString est appelé (par le Event Dispatching Thread de Swing) après la mise à jour du drapeau. Et quand on teste la valeur de fakeStroke dans le code ci-dessus, le if renvoie toujours FAUX, et les caractères qui sont générés par le robot sont affichés dans le JPasswordField aussi.

    J'aimerais savoir si quelqu'un a une idée pour résoudre ce problème?

    Merci beaucoup et bon week-end.
    • Partager sur Facebook
    • Partager sur Twitter

    Génération de KeyStrokes aléatoire dans un JPasswordField

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown