“Solo puedo decir una cosa sobre el Reino de las Sombras: hay realidad y hay su Sombra; Esta es la esencia de todo. En el mundo real, solo hay Amber, la ciudad real en la Tierra real, en la que todo se recoge. Y el Reino de las Sombras es solo el infinito de la irrealidad. Aquí también puedes encontrar todo, pero serán sombras, un reflejo distorsionado de la realidad. El Reino de las Sombras rodea a Amber por todos lados. Y más allá, reina el caos. Todo es posible en el camino de Amber al Reino del Caos ".Roger Zhelyazny. Los nueve príncipes de ámbar
Todo comenzó con la necesidad de trabajar con la misma clave en etoken desde diferentes estaciones de trabajo significativamente remotas (USB sobre IP será un poco caro para un par de tokens) y mi gran deseo de abrir este mundo cerrado. Encontré
el trabajo
habr.com/post/276057 por el cual su autor tiene un gran respeto, en mi proyecto se utilizó una parte significativa de las funciones que invirtió (el código está abierto). Es cierto que resultó que todo lo que funciona con etsdk.dll solo funciona con pescado azul. Por lo tanto, para JaCarta, las nuevas funciones tuvieron que ser reescritas y parte de la edición.
Como resultado de una larga investigación, apareció el Editor JaCarta, un programa que muestra y le permite editar entidades (así es como se llaman los objetos del sistema de archivos de tokens en la documentación oficial, aparentemente insinuando su efímera e irrealidad) en tokens de Aladdin, incluidos los más modernos.
Una aplicación similar para Rutoken está disponible públicamente como parte del Rutoken SDK (Rutoken Editor), pero para Aladdin, al menos no está en el dominio público, aunque hace unos 15 años, a juzgar por la documentación que se encontró en Internet, sí lo estaba (ETEditor).
El programa está escrito en Autoit, probado con EToken PRO Java 72 K, JaCarta LT, JaCarta Pro, JaCarta GOST-2.
El programa no funcionará si los controladores Rutoken están instalados en la computadora (se requiere que EToken o Ja Carta tengan el lector número 0).
Por la misma razón, solo se debe conectar un token para un funcionamiento correcto.
La secuencia de comandos utiliza las llamadas al sistema Window $ y se probó solo con esta familia de sistemas operativos.
Para trabajar, debe instalar el "JaCarta Single Client" (descarga gratuita desde el sitio web del fabricante), cuando lo instala, la versión significativamente más nueva de etsdk.dll y jcFS.dll que contiene las funciones del sistema de archivos JaCarta (muy similar a aquellos en etsdk.dll, pero en jcFS hay muchas más funciones sin las cuales trabajar con algunos jakarts modernos, como GOST-2, sería imposible). Cuando se instala Unified Client, naturalmente no es necesario buscar y colocar este dll en la carpeta con el programa, de lo contrario, con el controlador instalado el tipo específico de token, este dll debe estar en la carpeta del programa.
Todas las funciones de jcFS se describen en detalle en el sitio web del fabricante, pero, sin embargo, algunos parámetros de estas funciones tuvieron que seleccionarse experimentalmente.
Para acceder al directorio raíz del token, debe llamar a la función ETRootDirOpen o JCRootDirOpen (que es la misma, ya que el primero en el dll llama al segundo, esto es cierto para casi todas las funciones, pero hay algunas excepciones) con un identificador de proveedor de 0 (constantes como 0xF007 permitirá vea solo directorios individuales de eToken en su mayoría antiguos que almacenan claves bancarias generadas mediante utilidades como PKIAdmin y MessagePRO).
La siguiente característica importante de la jakarta moderna es la necesidad de conocer la identificación del applet que está instalado en el token, la función JCSelectApplet es responsable de esto.
Los tokens más antiguos generalmente tienen un applet predeterminado y no se requiere llamar a esta función específicamente, pero los jakarts nuevos y relativamente nuevos sin saber la identificación del applet no funcionan más. Llamar a todas las funciones que reciben información del token en este caso devuelve False. En mi proyecto, en este caso, se implementa una fuerza bruta de dos etapas (el token siempre responde a dos id, pero solo uno de ellos funciona) id y funciona con el valor deseado.
Toda la información se muestra en la ventana de resultados ubicada debajo del árbol de directorios.
Se ingresó el código PIN, también se muestra información sobre los intentos restantes de ingresarlo.
Se muestra el contenido de los directorios y una breve información sobre los archivos: el nombre, si el archivo es información privada es un código PIN privado, la letra p: (el archivo es público después, la unidad es privada) y el tamaño del archivo en bytes después de "s:". El archivo se abre haciendo doble clic.
Puede ver y, si es necesario, copiar el contenido de los archivos de token al búfer en formato hexadecimal o guardarlo en forma binaria en una computadora.
También puede cambiar el contenido del archivo y seleccionar "Guardar cambios" en el menú (el código PIN debe ingresarse primero, si no se ingresó, se mostrará un mensaje apropiado, en cuyo caso los datos editados se pueden seleccionar y copiar en el portapapeles).
Para eliminar un archivo, selecciónelo y haga clic en "Eliminar", después de lo cual aparecerá una ventana de confirmación.
JaCarta File System tiene una característica interesante, que está presente en todos los tokens que probé. Si crea un directorio o varios directorios sin archivos en el token, durante la próxima sesión de trabajo con el token desaparecerán, aparentemente de esta manera el sistema de archivos se encarga de guardar la memoria del token y limpia toda la basura.
Por lo tanto, cuando hace clic en el botón Crear en el programa, se crea una cadena inmediatamente desde un directorio o dos directorios y un archivo. La profundidad de anidamiento de directorios en el programa es dos, sin contar la raíz. En el directorio raíz, solo puede crear directorios, pero no archivos.
Antes de crear, editar o eliminar entidades, debe ingresar un código PIN.
¡Una nota muy importante sobre los nombres de directorio!
En los tokens donde el contenido es creado por el fabricante, nunca verá directorios con el mismo nombre, estén donde estén. Esto se debe a las características del sistema de archivos.
Supongamos que tenemos la siguiente entidad en el token: //
0001 / A001 / 0008 (es decir, la carpeta 0001 está en el directorio raíz, la carpeta A001 está en él y el archivo 0008 está en él) y creamos una nueva entidad en el token: // CC00 /
0001/1010 . Al acceder al archivo 1010, comenzará la búsqueda del directorio 0001, que se encuentra en la raíz y se encontrará primero, pero no hay tal archivo en él. Como resultado, la función devuelve False y la entidad se pierde; tampoco puede acceder a ella ni eliminarla. Solo la inicialización de token ayudará.
De particular interés es EToken PRO y JA Carta Pro, que solo difieren en apariencia, tienen archivos del sistema en el directorio raíz (se muestran en la pantalla), en uno de los cuales se almacena el hash del código pin, cambiando estos archivos conduce al hecho de que la autorización se vuelve imposible (el código PIN se vuelve incorrecto) y después de eso solo ayudará la inicialización.
Con respecto a las claves privadas, fue posible establecer lo siguiente: si un contenedor creado por un proveedor criptográfico de terceros, como CryptoPro, se almacena en el token, entonces todo su contenido, incluidas las claves privadas, estará disponible, es solo una unidad flash con un código PIN (como se muestra en la imagen). Si el par de claves se generó a bordo del token utilizando PKCS11, solo estarán disponibles el certificado y la clave pública.
Dado que este es un programa experimental, no recomiendo usarlo con tokens que contengan claves EDS válidas, todas las operaciones se realizan por miedo y riesgo del experimentador. Esto es especialmente cierto para la creación de nuevas entidades, en algunos casos el resultado es difícil de predecir.
Toda la información para crear el programa se obtuvo de fuentes abiertas, el propósito de su creación es puramente de investigación.
El guión en sí
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(
Fuentes de informacioneToken Developer's Guide Versión 3.50 (diciembre de 2003)