“Só posso dizer uma coisa sobre o Reino das Sombras: existe a realidade e há a sua sombra; essa é a essência de tudo. No mundo real, existe apenas Amber, a cidade real na Terra real, na qual tudo é coletado. E o Reino das Sombras é apenas o infinito da irrealidade. Aqui você também pode encontrar tudo - mas serão sombras, um reflexo distorcido da realidade. O Reino das Sombras cerca Amber por todos os lados. E além, reina o caos. Tudo é possível no caminho de Amber para o Reino do Caos.Roger Zhelyazny. Os nove príncipes de âmbar
Tudo começou com a necessidade de trabalhar com a mesma chave em etoken de diferentes estações de trabalho significativamente remotas (USB Over IP será um pouco caro para alguns tokens) e com meu grande desejo de abrir esse mundo fechado. Me deparei
com o trabalho
habr.com/post/276057, pelo qual o autor tem grande respeito, no meu projeto, uma parte significativa das funções que ele inverteu foi usada (o código está aberto). É verdade que tudo o que funciona com o etsdk.dll funciona apenas com peixes azuis. Portanto, para JaCarta, novas funções tiveram que ser reescritas e parte da edição.
Como resultado de longa pesquisa, o JaCarta Editor apareceu - um programa que mostra e permite editar entidades (é assim que os objetos do sistema de arquivos de token são chamados na documentação oficial, aparentemente sugerindo sua efemeridade e irrealidade) em tokens de Aladdin, incluindo os mais modernos.
Um aplicativo semelhante para o Rutoken está disponível publicamente como parte do Rutoken SDK (Rutoken Editor), mas para o Aladdin, pelo menos, ele não é de domínio público, embora cerca de 15 anos atrás, a julgar pela documentação encontrada na Internet, era (ETEditor).
O programa foi escrito em Autoit, testado com o EToken PRO Java 72 K, JaCarta LT, JaCarta Pro, JaCarta GOST-2.
O programa não funcionará se os drivers Rutoken estiverem instalados no computador (é necessário que o EToken ou o Ja Carta tenham um número de leitor 0).
Pelo mesmo motivo, apenas um token deve estar conectado para a operação correta.
O script usa chamadas de sistema do Windows $ e foi testado apenas com esta família de sistemas operacionais.
Para funcionar, você precisa instalar o "JaCarta Single Client" (download gratuito no site do fabricante); ao instalá-lo, a versão significativamente mais recente do etsdk.dll e jcFS.dll que contém as funções do sistema de arquivos JaCarta (muito semelhantes a aqueles no etsdk.dll, mas no jcFS existem muito mais funções sem as quais é impossível trabalhar com alguns jakarts modernos, como o GOST-2). Quando o Unified Client é instalado, naturalmente não é necessário pesquisar e colocar esta DLL na pasta com o programa; caso contrário, com o driver instalado o tipo específico de token, essa DLL deve estar na pasta do programa.
Todas as funções do jcFS são descritas em detalhes no site do fabricante, mas, no entanto, alguns parâmetros dessas funções tiveram que ser selecionados experimentalmente.
Para acessar o diretório raiz do token, você deve chamar a função ETRootDirOpen ou JCRootDirOpen (que é a mesma, pois a primeira na dll chama a segunda, isso é verdade para quase todas as funções, mas existem algumas exceções) com um identificador de fornecedor 0 (constantes como 0xF007 permitirão consulte apenas diretórios individuais do eToken antigo, que armazenam chaves bancárias geradas usando utilitários como PKIAdmin e MessagePRO).
O próximo recurso importante do jakarta moderno é a necessidade de saber o ID do applet instalado no token, a função JCSelectApplet é responsável por isso.
Os tokens mais antigos geralmente têm um applet padrão e a chamada dessa função não é especificamente necessária, mas para jakarts novos e relativamente novos sem saber o ID do applet, mais trabalho se torna impossível. Chamar todas as funções que recebem informações do token nesse caso retorna Falso. No meu projeto, nesse caso, uma força bruta de dois estágios é implementada (o token sempre responde a dois id, mas apenas um deles funciona) id e trabalha com o valor desejado.
Todas as informações são exibidas na janela de saída localizada sob a árvore de diretórios.
O código PIN foi inserido, as informações sobre as tentativas restantes para inseri-lo também são exibidas.
O conteúdo dos diretórios e informações breves sobre os arquivos são exibidos: o nome, se o arquivo é uma informação privada, é um código PIN privado - a letra p: (o arquivo é público depois, a unidade é privada) e o tamanho do arquivo em bytes após "s:". O arquivo é aberto clicando duas vezes.
Você pode visualizar e, se necessário, copiar o conteúdo dos arquivos de token para o buffer no formato hexadecimal ou salvar em formato binário em um computador.
Você também pode alterar o conteúdo do arquivo e selecionar “Salvar alterações” no menu (o código PIN deve ser inserido primeiro; caso não tenha sido inserido, uma mensagem apropriada será exibida; nesse caso, os dados editados podem ser selecionados e copiados para a área de transferência).
Para excluir um arquivo, selecione-o e clique em "Excluir", após o qual uma janela de confirmação será exibida.
O JaCarta File System possui um recurso interessante, presente em todos os tokens que testei. Se você criar um diretório ou vários diretórios sem arquivos no token, durante a próxima sessão de trabalho com o token, eles desaparecerão, aparentemente desta maneira o sistema de arquivos se encarregará de salvar a memória do token e limpar todo o lixo.
Portanto, quando você clica no botão Criar no programa, uma cadeia é criada imediatamente a partir de um diretório ou dois diretórios e um arquivo. A profundidade de aninhamento de diretórios no programa é duas, sem contar a raiz. No diretório raiz, você pode criar apenas diretórios, mas não arquivos.
Antes de criar, editar ou excluir entidades, você deve inserir um código PIN.
Uma observação muito importante sobre nomes de diretório!
Nos tokens em que o conteúdo é criado pelo fabricante, você nunca verá diretórios com o mesmo nome, onde quer que estejam. Isso ocorre devido aos recursos do sistema de arquivos.
Suponha que tenhamos a seguinte entidade no token: //
0001 / A001 / 0008 (ou seja, a pasta 0001 está no diretório raiz, a pasta A001 e o arquivo 0008) e criamos uma nova entidade no token: // CC00 /
0001/1010 . Ao acessar o arquivo 1010, a pesquisa pelo diretório 0001 será iniciada, localizada na raiz e será encontrada primeiro, mas não há esse arquivo. Como resultado, a função retorna False e a entidade se perde; você também não pode acessá-lo e excluí-lo. Somente a inicialização do token ajudará.
Destaca-se o EToken PRO e o JA Carta Pro, que diferem apenas na aparência, eles possuem arquivos de sistema no diretório raiz (são mostrados na tela), em um dos quais o hash do código PIN é armazenado, alterando os leads desses arquivos ao fato de que a autorização se torna impossível (o código PIN fica incorreto) e, depois disso, apenas a inicialização ajudará.
Em relação às chaves privadas, foi possível estabelecer o seguinte: se um contêiner criado por um provedor criptográfico de terceiros, como o CryptoPro, for armazenado no token, todo o seu conteúdo, incluindo chaves privadas, estará disponível, é apenas uma unidade flash com um código PIN (como mostrado na figura). Se o par de chaves foi gerado a bordo do token usando PKCS11, apenas o certificado e a chave pública estarão disponíveis.
Como este é um programa experimental, não recomendo usá-lo com tokens contendo chaves EDS válidas. Todas as operações são realizadas com medo e risco do experimentador. Isso é especialmente verdadeiro para a criação de novas entidades; em alguns casos, o resultado é difícil de prever.
Todas as informações para a criação do programa foram obtidas de fontes abertas, o objetivo de sua criação é puramente pesquisa.
O script em si
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(
Fontes de informaçãoGuia do desenvolvedor do eToken versão 3.50 (dezembro de 2003)