«Je ne peux dire qu'une chose au sujet du Royaume des Ombres: il y a la réalité et il y a son Ombre; c'est l'essence de tout. Dans le monde réel, il n'y a qu'Ambre, la vraie ville sur la vraie Terre, dans laquelle tout est collecté. Et le Royaume des Ombres n'est que l'infinité de l'irréalité. Ici, vous pouvez également tout trouver - mais ce seront des ombres, un reflet déformé de la réalité. Le royaume des ombres entoure l'ambre de tous les côtés. Et au-delà, le chaos règne. Tout est possible sur le chemin de l'ambre au royaume du chaos. »Roger Zhelyazny. Les neuf princes d'ambre
Tout a commencé avec la nécessité de travailler avec la même clé sur etoken à partir de postes de travail différents et sensiblement distants (USB sur IP sera un peu cher pour quelques jetons) et mon grand désir d'ouvrir ce monde fermé. Je suis tombé
sur l' oeuvre
habr.com/post/276057 pour laquelle son auteur a beaucoup de respect, dans mon projet une partie importante des fonctions qu'il a inversées a été utilisée (le code est ouvert). Certes, il s'est avéré que tout ce qui fonctionne avec etsdk.dll ne fonctionne qu'avec du poisson bleu. Par conséquent, pour JaCarta, de nouvelles fonctions ont dû être réécrites et certaines d'entre elles ont dû être modifiées.
À la suite de longues recherches, l'éditeur JaCarta est apparu - un programme qui montre et vous permet de modifier des entités (c'est ainsi que les objets du système de fichiers de jetons sont appelés dans la documentation officielle, faisant apparemment allusion à leur éphéméralité et irréalité) sur les jetons d'Aladdin, y compris les plus modernes.
Une application similaire pour Rutoken est accessible au public dans le cadre du Rutoken SDK (Rutoken Editor), mais pour Aladdin, au moins, elle n'est pas dans le domaine public, bien qu'il y a environ 15 ans, à en juger par la documentation trouvée sur Internet, elle l'était (ETEditor).
Le programme est écrit en Autoit, testé avec EToken PRO Java 72 K, JaCarta LT, JaCarta Pro, JaCarta GOST-2.
Le programme ne fonctionnera pas si les pilotes Rutoken sont installés sur l'ordinateur (il est nécessaire que EToken ou Ja Carta aient un numéro de lecteur 0).
Pour la même raison, un seul jeton doit être connecté pour un fonctionnement correct.
Le script utilise des appels système Window $ et n'a été testé qu'avec cette famille de systèmes d'exploitation.
Pour fonctionner, vous devez installer le «Client unique JaCarta» (téléchargement gratuit sur le site Web du fabricant), lorsque vous l'installez, la version sensiblement plus récente de etsdk.dll et jcFS.dll contenant les fonctions du système de fichiers JaCarta (très similaire à ceux dans etsdk.dll, mais dans jcFS il y a beaucoup plus de fonctions sans lesquelles travailler avec certains jakarts modernes, comme GOST-2, sera impossible). Avec le client unifié installé, il n'est naturellement pas nécessaire de rechercher et de placer cette DLL dans le dossier avec le programme, sinon, avec le pilote installé pour un type spécifique de jeton, cette DLL doit être dans le dossier du programme.
Toutes les fonctions jcFS sont décrites en détail sur le site Web du fabricant, mais néanmoins, certains paramètres de ces fonctions ont dû être sélectionnés expérimentalement.
Pour accéder au répertoire racine du jeton, vous devez appeler la fonction ETRootDirOpen ou JCRootDirOpen (qui est la même, car la première de la DLL appelle la seconde, cela est vrai pour presque toutes les fonctions, mais il y a quelques exceptions) avec l'identifiant du fournisseur égal à 0 (les constantes comme 0xF007 permettront voir uniquement les répertoires individuels de la plupart des anciens eToken qui stockent les clés bancaires générées à l'aide d'utilitaires tels que PKIAdmin et MessagePRO).
La prochaine caractéristique importante de jakarta moderne est la nécessité de connaître l'id de l'applet qui est installée sur le jeton, la fonction JCSelectApplet en est responsable.
Les jetons plus anciens ont généralement une applet par défaut et l'appel de cette fonction n'est pas spécifiquement requis, mais pour les jakarts nouveaux et relativement nouveaux sans connaître l'ID de l'applet, un travail supplémentaire devient impossible. L'appel de toutes les fonctions recevant des informations du jeton dans ce cas renvoie False. Dans mon projet, dans ce cas, une force brute en deux étapes est implémentée (le jeton répond toujours à deux identifiants, mais un seul fonctionne) id et fonctionne ensuite avec la valeur souhaitée.
Toutes les informations sont affichées dans la fenêtre de sortie située sous l'arborescence de répertoires.
Le code PIN a été saisi, des informations sur les tentatives restantes de saisie sont également affichées.
Le contenu des répertoires et de brèves informations sur les fichiers sont affichés: le nom, si le fichier est privé, les informations sont un code PIN privé - la lettre p: (le fichier est public après lui, l'unité est privée) et la taille du fichier en octets après «s:». Le fichier est ouvert en double-cliquant.
Vous pouvez afficher et, si nécessaire, copier le contenu des fichiers de jeton dans le tampon au format hexadécimal ou l'enregistrer sous forme binaire sur un ordinateur.
Vous pouvez également modifier le contenu du fichier et sélectionner «Enregistrer les modifications» dans le menu (le code PIN doit être saisi en premier, s'il n'a pas été saisi, un message approprié s'affiche, auquel cas les données modifiées peuvent être sélectionnées et copiées dans le presse-papiers).
Pour supprimer un fichier, sélectionnez-le et cliquez sur "Supprimer", après quoi une fenêtre de confirmation apparaîtra.
JaCarta File System a une fonctionnalité intéressante, qui est présente sur tous les jetons que j'ai testés. Si vous créez un répertoire ou plusieurs répertoires sans fichiers sur le jeton, lors de la prochaine session de travail avec le jeton, ils disparaîtront, apparemment de cette façon, le système de fichiers se charge de sauvegarder la mémoire du jeton et nettoie toutes les ordures.
Par conséquent, lorsque vous cliquez sur le bouton Créer dans le programme, une chaîne est créée immédiatement à partir d'un répertoire ou de deux répertoires et d'un fichier. La profondeur d'imbrication des répertoires dans le programme est de deux, sans compter la racine. Dans le répertoire racine, vous ne pouvez créer que des répertoires, mais pas des fichiers.
Avant de créer, de modifier ou de supprimer des entités, vous devez saisir un code PIN.
Une note très importante sur les noms de répertoire!
Sur les jetons dont le contenu est créé par le fabricant, vous ne verrez jamais les répertoires du même nom, où qu'ils se trouvent. Cela est dû aux fonctionnalités du système de fichiers.
Supposons que nous ayons l'entité suivante sur le jeton: //
0001 / A001 / 0008 (c'est-à-dire que le dossier 0001 est dans le répertoire racine, le dossier A001 est dedans et le fichier 0008 est dedans) et nous créons une nouvelle entité sur le jeton: // CC00 /
0001/1010 . Lors de l'accès au fichier 1010, la recherche du répertoire 0001 commencera, qui se trouve à la racine et sera trouvée en premier, mais il n'y a pas un tel fichier dedans. Par conséquent, la fonction renvoie False et l'entité est perdue; vous ne pouvez pas non plus y accéder ni la supprimer. Seule l'initialisation du jeton sera utile.
À noter en particulier EToken PRO et JA Carta Pro, qui ne diffèrent que par leur apparence, ils ont des fichiers système dans le répertoire racine (ils sont affichés à l'écran), dans l'un desquels le hachage du code PIN est stocké, en changeant ces fichiers. au fait que l'autorisation devient impossible (le code PIN devient incorrect) et après cela, seule l'initialisation sera utile.
En ce qui concerne les clés privées, il a été possible d'établir ce qui suit: si un conteneur créé par un fournisseur de cryptographie tiers, tel que CryptoPro, est stocké sur le jeton, alors tout son contenu, y compris les clés privées, sera disponible, il s'agit simplement d'un lecteur flash avec un code PIN (comme indiqué dans l'image). Si la paire de clés a été générée à bord du jeton à l'aide de PKCS11, seuls le certificat et la clé publique seront disponibles.
Comme il s'agit d'un programme expérimental, je ne recommande pas de l'utiliser avec des jetons contenant des clés EDS valides, toutes les opérations sont effectuées à la peur et au risque de l'expérimentateur. Cela est particulièrement vrai pour la création de nouvelles entités, dans certains cas, le résultat est difficile à prévoir.
Toutes les informations pour la création du programme ont été obtenues à partir de sources ouvertes, le but de sa création est purement de recherche.
Le script lui-même
JACartaEditor.au3#include <GUIConstantsEx.au3> #include <WindowsConstants.au3> #include <EditConstants.au3> #include <TreeViewConstants.au3> #include <GuiTreeView.au3> #include <GuiMenu.au3> #include <MsgBoxConstants.au3> #include <StaticConstants.au3> #include <GuiButton.au3> #NoTrayIcon ; jcFS.dll Dim $ETSdkDll=DllOpen(
Sources d'informationGuide du développeur eToken version 3.50 (décembre 2003)