Salut c’est Val, bienvenue dans ce nouvel article. Aujourd’hui, je vais vous montrer comment programmer un keylogger (enregistreur de frappe) grâce au langage de programmation Python.
Dans cet article, je vais notamment vous présenter mon environnement de programmation, les différents outils que je vais utiliser et je vous montrerai à la fin comment vous protéger de ce type d’outil malveillant.
Même si nous allons voir des concepts assez basiques dans cet article, je tiens quand même à préciser que je ne serai en aucun cas responsable de vos actes suivant l’utilisation que vous ferez de cet outil. Nous aurons dans cet article une présentation assez basique du logiciel.
Nous présenterons les fonctionnalités avancées de ce type d’outil et nous verrons ensuite les différentes améliorations que nous pouvons apporter pour rendre notre outil beaucoup plus complet.
Introduction : fonctionnement des keyloggers
Tout d’abord, qu’est-ce qu’un keylogger ?
Un keylogger est aussi appelé en français un enregistreur de frappe. Il s’agit soit d’un logiciel, soit d’un matériel de ce type-là, qui permet de capturer directement les fonctions qui vont entrer depuis votre périphérique d’entrée (un clavier ou une souris) pour les enregistrer. Nous verrons juste après quelles fonctions et quelles librairies nous allons utiliser grâce au langage de programmation Python pour pouvoir réaliser ce type de script.
Il faut savoir que dans cet article je vais vous présenter un des nombreux projets présents dans l’espace membre du Cyberinstitut. Celui-ci fait notamment partie des projets qui sont orientés vers les novices souhaitant débuter en programmation informatique. C’est donc pour cela que vous verrez du code relativement basique lors de cette présentation. Je vais par ailleurs proposer des améliorations pour ceux qui souhaitent améliorer ce code également présent dans l’espace membre du Cyberinstitut. Je vous mets directement le lien pour rejoindre l’espace membre. Il est situé en bas de cet article.
Installation & présentation de l’environnement
Nous commençons donc la présentation de ce script.
Je vais dans un premier temps vous présenter les outils que j’utilise.
Il est à savoir que pour la programmation, j’utilise Visual Studio Code. C’est un outil qui est relativement léger et portable sur les différents appareils. Vous pouvez le retrouver à cette adresse : https://code.visualstudio.com/. Vous arriverez directement sur le site de Microsoft. Si vous êtes soucieux de votre vie privée, vous avez également un autre outil qui s’appelle VSCodium qui permet de bloquer la télémétrie de Windows. Il reprend alors VS Studio code, mais il bloque la télémétrie de Windows. Si vous souhaitez aller un peu plus loin, nous avons un outil additionnel à cette vidéo qui permet par exemple de filtrer vos requêtes DNS, donc de bloquer une certaine télémétrie des grands géants de la tech. Cet outil est NextDNS (je précise que je ne suis pas du tout en partenariat avec eux pour cette présentation) et il vous permet de mieux filtrer ce qui sort de votre réseau. Pour toutes vos requêtes DNS, vous allez pouvoir en faire des listes blanches et des listes noires. Vous avez également des statistiques. C’est un outil relativement intéressant à utiliser si vous souhaitez être un peu plus proche de votre vie privée.
L’outil que j’utilise principalement est Visual Studio Code.
Pour la présentation de ce script assez basique, le but est vraiment d’avoir un objectif pédagogique et non de faire de la programmation sur des scripts avancés. Il y aura bien entendu d’autres articles consacrés à ce sujet.
Nous allons commencer par la présentation de ce script. J’ai réalisé une version avancée et une version basique.
Au cours de cette présentation, je vous montrerai également les améliorations qui peuvent être intéressantes à apporter. Si vous avez d’autres améliorations à apporter à ce projet, vous pouvez directement m’en faire part via l’espace membre du Cyberinstitut. Vous avez un formulaire qui est exclusivement fait pour cela. Donc je vous invite à m’envoyer vos idées d’amélioration, mais aussi pourquoi pas vos autres projets. L’équipe du Cyberinstitut se chargera de traiter toutes ces informations.
Par quoi allons-nous commencer dans la présentation de ce projet ?
Nous allons commencer par installer les librairies qui vont être nécessaires.
Dans notre cas, nous allons utiliser pynput.
Qu’est-ce que pynput ?
C’est ce qui va nous permettre de faire la relation entre nos périphériques d’entrée et notre système d’exploitation, notamment grâce à Python.
Par le biais de cette librairie, nous allons pouvoir capturer les fonctions qui vont être envoyées par notre clavier et notre souris.
Dans notre cas, nous allons nous concentrer sur le clavier. Ici, nous allons directement installer notre librairie.
Pour ce faire, nous allons directement dans « terminal » – « nouveau terminal » et nous tapons « pip install pynput ». Personnellement, je l’ai déjà, donc ça ne va pas s’installer. En revanche, si vous souhaitez directement l’installer, il va vous falloir Python qui est directement téléchargeable via les extensions de Visual Studio Code. Vous tapez à cet endroit « Python » et vous aurez directement accès à la programmation Python nécessaire pour la réalisation de ce script. Il faudra ensuite installer la dépendance, qui sera ici pynput, pour pouvoir passer enfin à notre script.
Présentation du keylogger
Qu’est-ce que fait ce script en Python ?
Nous allons commencer par faire l’importation de la classe keyboard qui va nous permettre de capturer les touches appuyées au niveau du clavier. Nous allons notamment le faire grâce à la bibliothèque pynput. Nous créons une fonction spécifique à la capture de ces touches clavier, mais nous ferons néanmoins une exception. Si une certaine touche est pressée, nous souhaiterions le cas échéant qu’elle soit affichée. De même pour les touches particulières. Nous créons par la suite ce qu’on appelle un objet listener pour détecter les touches du clavier et attendons indéfiniment que l’utilisateur appuie sur ces touches.
C’est relativement assez simple à créer.
Pour cela, nous nous rendons directement dans « Exécuter » et « Démarrer le débogage ». Nous choisissons le fichier Python. Si je tape sur la touche d, vous constatez juste en dessous qu’il est bien marqué « key d pressed ». J’ai personnellement tout marqué en anglais, mais si vous souhaitez l’adapter en français, il est tout à fait possible de modifier la langue. Si j’appuie par exemple sur une touche spéciale, la touche SHIFT, nous voyons également qu’elle s’affiche de la même manière que la touche ENTRÉE, MAJUSCULE ou encore les touches de base. Au niveau des autres fonctionnalités, nous pouvons également capturer les chiffres du clavier. C’est globalement un script plutôt basique à mettre en place.
Fonctionnalités avancées en Python
Nous passons à présent à la partie avancée de ce script.
Dans la partie avancée, nous souhaitons intégrer directement les touches qui ont été tapées afin qu’elles soient directement enregistrées dans un fichier. Cela peut être un fichier texte ou un fichier sous un autre format. Nous verrons juste après comment exporter vers d’autres formats de langage.
Nous utilisons toujours notre même librairie pynput. Nous importons la classe keyboard pour utiliser les touches du classe, puis nous importons la librairie OS qui va notamment nous permettre d’interagir pour sauvegarder les touches directement tapées dans un fichier texte.
Commençons par l’output file, comprenez en français le fichier de sortie, et j’ai nommé ici le fichier de sortie : « keylog.txt ». C’est à cet endroit que seront entrées et directement enregistrées les informations dans notre fichier de sortie.
Nous allons reprendre la même fonction que nous avons vu précédemment, la « on press », c’est-à-dire le moment où nous appuyons sur le clavier. Nous allons cette fois-ci modifier la fonction pour qu’elle l’écrive directement dans notre fichier de sortie. Pour cela, il faudra tout d’abord ouvrir notre fichier de sortie avec le ‘a’ qui correspond à l’ajout de caractères dans notre fichier. Ensuite, nous écrirons des caractères normaux dans ce fichier. J’ai séparé les deux pour que nous puissions avoir directement les caractères normaux écrits simplement (a,b,c,d,e). Pour les touches spéciales, nous aurons un format particulier dont nous verrons la manière d’exécuter le script juste après cela.
Enfin, nous utiliserons les mêmes informations que nous avions utilisées précédemment, c’est-à-dire que nous allons attendre que l’utilisateur appuie sur le clavier.
L’exécution du script commence dès maintenant.
Pour commencer, nous tapons des touches assez basiques.
Petite parenthèse : les erreurs que vous voyez ici se sont affichées lorsque j’ai arrêté le script avant. Dans mon cas, je vais taper « password », mais nous pouvons très bien taper d’autres touches telles que « shift » ; « espace » ; ou encore « username ». Nous pouvons arrêter à ce moment-là l’exécution du script. Nous voyons ici tout ce que j’ai pu noter au clavier. J’ai ici un fichier qui s’est créé. Il s’agit du « keylog.txt », mon fichier de sortie. Il permet donc de récupérer les informations que j’ai pu taper sur mon clavier. Nous constatons aussi que les touches spéciales précisées juste avant sont marquées entre crochet, ce qui permettra d’avoir un meilleur format quand nous relirons le fichier. Nous remarquons au final que mon « password » et mon « username » ont bien été capturés avec les autres touches que j’avais pressées juste avant.
C’est une fonctionnalité qui est relativement simple à faire. Cela nous permet d’interagir avec le système, notamment sur la création de fichier qui pourra nous servir plus tard dans d’autres scripts. Je vous invite d’ailleurs à aller sur l’espace membre et de regarder les différents projets qui peuvent être intéressants pour vous et vous verrez au niveau des langages de programmation, surtout orientées Python, que la librairie OS est importante pour les interactions avec divers fichiers qui dans notre cas nous permettent d’y écrire des informations.
Améliorations du keylogger
Nous passons aux améliorations.
Quelles vont être les différentes améliorations que nous allons pouvoir intégrer dans ce script Python ?
Pour les besoins et la durée de cette vidéo, j’ai fait en sorte de mettre toutes les améliorations dans le même fichier. Il convient ensuite de les intégrer directement aux différents fichiers avec soit le listener de base ou soit le listener advanced (l’enregistreur avancé).
Qu’est-ce que nous avons au niveau des améliorations ?
Nous avons le chiffrement des données. Le but sera d’utiliser une librairie dont je vous ai déjà parlé dans des vidéos précédentes, soit Pycrypto, soit Cryptographie, qui permet de faire du chiffrement. Dans notre cas, une fois que les touches vont être directement pressées sur le clavier, nous allons chiffrer ces données avant de les enregistrer dans la fonction « on press ».
Nous utiliserons ensuite une fonction pour les déchiffrer. Cela peut être intéressant dans le cas où on souhaite ne pas laisser de traces sur ce type de dispositif matériel. Celui que je vous ai montré tout à l’heure permet donc de mettre un script Python, d’émuler un clavier, pour qu’il ne soit pas reconnu comme un support de stockage et récupérer ainsi des données plus ou moins intéressantes sur les utilisateurs.
Nous aurons également différentes autres améliorations plus ou moins importantes. On va notamment avoir la gestion des erreurs et de la stabilité. Si on a une erreur, par exemple une mauvaise touche qui est pressée ou qu’on a une erreur au niveau du système, le but est d’avoir au final un message qui s’affiche ou du moins une fonction particulière du script. On peut également avoir l’horodatage des données qui nous permet de savoir quand est-ce que les touches ont été tapées, cela peut être assez intéressant dans certains cas. Nous aurons de plus l’amélioration de la discrétion. Je vous ai montré cela dans l’IDE, un ensemble d’outils qui permet de faire du Python, mais on peut également faire du C, C++, de la programmation collaborative directement à l’intérieur de Visual Code. D’où le nom IDE, car cet ensemble d’outils nous permettra de continuer la programmation avec différentes fonctions.
L’amélioration de la discrétion, je l’ai directement exécutée dans un environnement de programmation. Si demain je l’exécute sur ma machine hôte, une fenêtre de terminal s’affichera. On peut d’ailleurs améliorer la discrétion de cette fenêtre avec le système Windows et faire en sorte qu’elle n’apparaisse pas. En parlant de fenêtre, on peut également créer pour ce script une fenêtre particulière avec Tkinter et PyQt et faire ainsi une interface graphique pour nos différents scripts en Python. Au début de cet article, je vous parlais de l’exportation des données pour mettre différents formats, dans mon cas, si j’ai envie d’exporter les données en JSON, ce qui peut être intéressant pour les traiter plus tard dans un outil, je peux le faire directement grâce à la librairie JSON.
Enfin, voici les dernières améliorations concernant la limitation de la durée d’enregistrement. Si on souhaite que l’enregistrement ne se fasse que pendant un certain temps, il sera alors possible de le faire grâce à cette variable. On ajoute « 60 » pour les secondes, on laisse le code de notre fonction et on inclut un temps de commencement de capture. À la fin, mon script est mis en liste blanche au niveau de mon antivirus (Windows Defender sur cette machine virtuelle). Je vous recommande d’ailleurs toujours de faire toute votre partie développement sur un environnement virtuel. J’ai mis mon script en liste blanche, cependant si je l’exécute sur un système d’exploitation hôte comme Windows 11 que nous avons actuellement, le script sera rapidement détecté. Nous pouvons alors le compiler grâce à des compilateurs en C ou en C++. Il y en a un qui est très connu. Il s’appelle Nuitka et il permet de compiler notre code Python en exécutable. Ce qui fait que notre exécutable sera moins détectable par les différents types d’antivirus.
Comment se protéger ?
Maintenant que nous avons vu comment programmer un keylogger avec le langage de programmation Python et que nous connaissons à présent ses fonctionnalités avancées, nous allons vouloir nous en protéger. Pour ce faire, il y a des protections assez usuelles : l’antivirus, l’outil le plus basique en sécurité informatique. Un autre outil peut également vous faciliter la vie, il s’agit du gestionnaire de mot de passe. Ce dernier va notamment vous servir à entrer directement vos identifiants sur un site web de manière automatique, autrement dit, vous n’avez pas à taper vos identifiants via des périphériques comme le clavier. Cela va donc protéger vos informations d’identification d’un keylogger.
Conclusion
Nous arrivons à la fin de cet article. Le but était vraiment d’avoir une orientation plus pédagogique pour mieux comprendre comment capturer et interagir avec les périphériques d’entrée grâce à un keylogger et au langage de programmation Python.
Nous avons vu quelques fonctionnalités avancées qui permettent entre autres d’interagir avec le système d’exploitation, donc tout ce qui va concerner la création de fichier, la lecture et la modification des fichiers. Enfin, nous avons pu voir les différentes améliorations possibles avec ce script.
Je vous invite directement à me faire part des différentes améliorations que nous pourrions rajouter à ce projet et je me ferai un plaisir de les inclure directement dans le projet qui se situe dans l’espace membre du Cyberinstitut. Si vous souhaitez d’ailleurs participer à la création de projet, notamment dans l’espace membre, vous pouvez directement vous y rendre via le lien que je vous ai mis en description.
Ce fut un plaisir pour moi d’écrire cet article. Je vous dis à la prochaine. C’était Val. Ciao, ciao.
Ressources mentionnées dans l’article :
1) Télécharger Python : https://www.python.org/downloads/
2) Visual Studio Code : https://code.visualstudio.com/
3) VSCodium : https://vscodium.com/
4) NextDNS : https://nextdns.io/fr
5) Télécharger le Projet : https://cyberinstitut.fr/programmes/