Accueil » Programmation » [Programmation] Créez votre propre FileProtector pour cacher vos fichiers

Dans l’article d’aujourd’hui, nous allons parler de programmation. Plus précisément, nous allons programmer un petit utilitaire pratique pour cacher/protéger vos fichiers importants (mots de passe, souvenirs importants…etc).

Petites notes avant de commencer :

  • Cet utilitaire est écrit en langage VB.NET, il s’agit d’un ancien projet remis au goût du jour.
  • Cet utilitaire est uniquement disponible sous Windows.

Pour commencer, et pour pouvoir éditer le code source, il vous faudra installer Visual Studio Community (l’environnement de développement intégré de Microsoft).

Il vous faudra également installer le Framework .NET, version 3.5 minimum (normalement déjà présent sur la plupart des PC). Et il vous faudra un minimum de connaissances en langage VB.NET (ou d’envie d’apprendre et de comprendre ;)).

 

Qu’est-ce qu’un FileProtector ?

Il s’agit d’un utilitaire permettant de protéger vos fichiers sensibles par un mot de passe. Ce type d’outil existe déjà, Winrar par exemple permet de le faire, mais nous allons faire un utilitaire portable, c’est-à-dire qui ne nécessite pas d’installation et ne contient qu’un fichier de faible taille. Contrairement à d’autres FileProtector, il n’indiquera pas clairement qu’il en est un, il va afficher un message d’erreur par défaut, laissant les autres personnes croire qu’il s’agit d’un programme banal.

L’utilité principale de cet article est de vous fournir un petit projet sympa pour vous familiariser avec la programmation, étant donné que le fait de pratiquer est ce qui vous permet d’apprendre le plus vite. Je ne me permets pas non plus de considérer ce programme comme parfait, il a des défauts, il peut-être amélioré, modifié voire réécrit dans un autre langage de programmation, et c’est justement ce qui permet de pratiquer et d’apprendre. N’hésitez donc pas à suggérer des ajouts/modifications/améliorations, car chacun peut apprendre des autres.

 

Exemple de fonctionnement

Afin de vous faire comprendre son fonctionnement, rien de mieux qu’une démonstration vidéo.

 

Explications de la démonstration:

  • On a deux fichiers à protéger que l’on place dans un fichier demo.rar.
  • On fait un glisser/déposer de ce fichier demo.rar dans FileProtector.
  • FileProtector nous demande un mot de passe et chiffre demo.rar.
  • On supprime les fichiers originaux et demo.rar
  • On clique ensuite sur FileProtector qui affiche un faux message d’erreur.
  • Dans le coin droit du message d’erreur, on peut afficher la boîte de dialogue pour déchiffrer le fichier.
  • On redonne le mot de passe et FileProtector nous recréer le fichier demo.rar appelé cette fois dechiffre.rar et contenant les fichiers initaux.

 

Comment programmer FileProtector ?

Partons d’un point de vue très général.

 

On a deux façon d’utiliser FileProtector

Pour chiffrer

On fait un glissé/déposé du fichier à chiffrer sur FileProtector. Ceci est géré via Environment.GetCommandLineArgs() qui récupère le chemin complet du fichier glissé/déposé.

On lit ensuite le contenu du fichier glissé/déposé avec System.Text.Encoding.Default.GetString((IO.File.ReadAllBytes(fichier))) et on demande un mot de passe pour chiffrer tout son contenu avec InputBox.

On veut à présent ajouter le contenu du fichier chiffré à la fin de FileProtector (ce dernier joue donc le rôle de conteneur de fichier chiffré).

Pour cela on va d’abord ajouter un séparateur qui nous permettra de séparer le contenu de FileProtector du contenu du fichier chiffré. On va également y ajouter l’extension du fichier chiffré de façon à pouvoir le déchiffrer avec la bonne extension plus tard :

FilePut(1, "#separateur#" & IO.Path.GetExtension(fichier) & "#ext#" & chiffre)

Voici un schéma qui montre le contenu de FileProtector lorsqu’il cache un fichier chiffré :

 

Mais pour ajouter ces données dans FileProtector, il nous faut passer par une copie temporaire de FileProtector car ce dernier est déjà en cours d’exécution et l’on ne peut pas éditer un fichier en cours d’exécution.

On va donc créer un fichier temporaire identique à FileProtector, appelé « copy.exe » et on va lui ajouter les informations en question :

FileOpen(1, Application.StartupPath & "\copy.exe", OpenMode.Binary, OpenAccess.ReadWrite, OpenShare.Default)

Enfin, il restera à supprimer l’ancien FileProtector et à renommer copy.exe en FileProtector.exe. C’est une combine permettant de garder un seul fichier FileProtector.exe en bypassant les limites citées précédemment. Pour cela, on utilise un autre fichier temporaire qui est une série de commande batch permettant de faire les actions citées et de s’auto-supprimer.

Voici le code source qui se lance lorsque FileProtector démarre :

Voici la procédure RenommeEtSupprime qui est peut-être la partie la plus ambigüe de ce programme :

 

Pour déchiffrer

Il faut lancer FileProtector comme un programme normal. Celui-ci affichera un message d’erreur pour éloigner les internautes curieux.

Mais il dispose d’une fonctionnalité cachée pour activer le déchiffrement. Il s’agit d’une petite image transparente dans le coin en bas à droite de la fenêtre.

Un clic sur cette image affiche une boîte de dialogue demandant le mot de passe pour déchiffrer le fichier caché.

Le déchiffrement a ensuite lieu, on fait la même démarche que précédemment : on créer un fichier copie temporaire de FileProtector.exe pour récupérer le contenu chiffré.

On déchiffre ce contenu et on recréer un fichier FileProtector.exe vide ainsi que le fichier initial déchiffré, avec la bonne extension.

On réutilise un fichier batch pour cela.

On peut ensuite répéter les étapes et chiffrer un nouveau fichier.

Voici le code qui s’exécute lorsque l’on clique sur l’image cachée :

Télécharger les fichiers sources.

Télécharger le fichier exécutable.

Testé sous Windows 7 et 10.

 

Limitations connues

On ne peut que placer un fichier à la fois dans FileProtector (utilisez un fichier .zip pour en placer plusieurs).

Les fichiers ou dossier avec des accents « é, è, à, etc » ainsi que les chemin réseau font (ou peuvent faire) planter le programme.

Si le mot de passe de déchiffrement est incorrect, la copie temporaire n’est pas supprimée.

Le code source peut (largement) être amélioré.

Taille maximum testée : 400Mo (la vitesse de (dé)chiffrement et la taille finale dépend de l’algorithme de chiffrement utilisé).

Votre antivirus peut suspecter cet utilitaire mais il n’a rien de malveillant. À ce propos, les exécutions sandboxées empêchent l’exécution normale du programme.

Fourni en tant que tel, sans garantie.

 

Pistes d’amélioration

Enregistrer le nom du fichier avec l’extension, pour récupérer exactement le même fichier après déchiffrement.

Gérer le problème de caractères (?).

Créer un processus externe pour éviter l’utilisation (moche) d’un fichier bat qui ouvre un invite de commande.

Vérifier qu’il fonctionne sur d’autres systèmes.

Utiliser des bibliothèques/fonctions plus récentes que FileOpen, FilePut…Etc. Par exemple IO.FileStream et IO.StreamWriter.

Proposer un autre moyen d’afficher la boîte de dialogue de déchiffrement.

Par exemple avec un raccourci clavier:

Private Sub Form1_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown
    If e.Control AndAlso e.KeyCode = Keys.S Then 'si la touche controle est appuyée ainsi que la touche S
       'demander mot de passe
    End If
 End Sub

2 Commentaires

  1. Salut Michel,

    Ravi de revenir parmi vous après une longue période d’absence suite à beaucoup de changement positif dans ma vie prof et perso 🙂

    Ton tuto est excellent Michel comme d’habitude. Il permet d’avoir un aperçu rapide des actions menées par chaque ligne de commande VB.NET très pratique ! J’avais dans l’idée de me replonger dans ce langage, c’est une bonne opportunité, il va me falloir dégager du temps de libre pas évident.

    Je me souviens d’une époque où j’utilisais ce type de ligne commande très connue (Windows) qui peut être simplifiée en retirant le chiffrage GPG (GnuPG) :

    copy /B "image.gif"+"fichier_gpg_zippé.zip" fichier_final_gpg_zip_caché_dans_image_finale.gif

    Je reviendrai prochainement vers toi par mail, en ce moment je suis en plein aménagement et rénovation de ma nouvelle maison sans compter l’arrivée de Noé (chiot boxer) âgé de 5 mois 🙂

    A+!
    Diki

    • Salut Diki !
      Ravi également de te retrouver ! Et super pour les bonnes nouvelles 😀
      Oui il existe beaucoup d’alternatives pour cacher des fichiers, l’idée m’est venue subitement et je me suis lancé dans la programmation de cette outil sous forme de challenge personnel que j’ai décidé de partager ensuite.
      Merci pour l’astuce avec la commande copy, et effectivement c’est dommage que WordPress casse la syntaxe, je vais essayer d’éditer la commande pour qu’elle s’affiche correctement.
      À+ !

Laisser un commentaire

Lire plus :
Trucs et Astuces pour Facebook

Que vous aimez ou non Facebook, vous avez probablement un compte avec au moins 100 amis. D'ailleurs saviez-vous que les...

Fermer