ACESSANDO SMART CARD USANDO JACCAL

O que é Jaccal?
Jaccal (Java Card Communication Access Layer) é uma antiga API de comunicação Smart Card para aplicações Java e desde de 2006 não recebe atualizações, provavelmente por conta da introdução da API Java Smart Card I/O no Java 6.

Porque Jaccal?
Ele é uma ótima ferramenta para se testar rapidamente aplicações Smart Card de maneira fácil e descomplicada, graças a uma poderosa e simples Interface Gráfica de Scripts. Porém você não utilizará a API Jaccal para desenvolver suas aplicações Java, considere nesse caso utilizar a API Java Smart Card I/O.

O Material Necessário:
  • Cartão Java Card de Desenvolvimento com o Applet Hello World instalado.
  • Leitor / Gravador padrão PC/SC ISO7816.
  • Jaccal Instalado na máquina.
O Jaccal pode ser baixado gratuitamente no seguinte endereço: 


Após baixar o Jaccal, instale-o no lugar de sua preferência, eu aconselho ser na raiz C: para ser de fácil acesso.
Por ser desenvolvido em Java, o Jaccal necessita de ao menos uma JRE instalada na máquina.
Após instalado, vá ao diretório de instalação e você verá dois executáveis o "jaccal.exe" e "anubis.exe", execute então a aplicação anubis.exe.

Editor de Scripts Anubis

ENTRE EM CONTATO PARA ADQUIRIR SOFTWARE

Ok, não parece ser grande coisa a primeira vista, mas ele é exatamente do jeito que eu gosto, simples, rústico, fácil de usar e por consequencia eficiente.
O Programa possui apenas quatro botões com as seguintes funções (da esquerda para a direita), Open (Carrega um Script), Save (Salva um Script), Run (Executa um Script) e Reset (Reseta a camada PC/SC).

Escrevendo o Script :
  1. atr = open();  
  2. prints(atr);  
  3.   
  4. prints("Select Application");  
  5. cmd = new ApduCmd("00A404000B0102030405060708090000");  
  6. prints(cmd);  
  7. card_response = execute(cmd);  
  8. prints(card_response);  
  9.   
  10. prints("Teste Bytes");  
  11. cmd = new ApduCmd("00000000060A0B0C0D0E0F");  
  12. prints(cmd);  
  13. card_response = execute(cmd);  
  14. prints(card_response);  
  15.   
  16. close();  
Como pode ter notado é um script extremamente simples, vamos então analisar algumas linhas chaves neste script:
Na linha 1, o comando open() realiza toda a função de se conectar ao cartão na leitora, esse comando retorna o atr do cartão que na linha 2 é impresso pelo comando prints(atr).
Na linha 5, o comando new ApduCmd("00A4...") cria um cmd que nada mais é que um APDU de envio para o cartão que é também impresso pelo comando da linha 6 prints(cmd).
Na linha 7 o APDU cmd criado na linha 5 é transferido para o cartão através do comando execute(cmd) que retorna a resposta do cartão em card_response, impresso na linha 8 pelo comando prints(card_response). No caso card_response pode ou não conter dados mas ele sempre conterá o Status Word SW1 e SW2.
Por fim na Linha 16 o comando close() finaliza a comunicação com o cartão, é sempre importante que seus scripts contenham o comando close() no final pois se não o canal de comunicação ficará aberto e futuras tentativas de comunicação com o cartão terminará em erros. Caso esqueça do close() você poderá forçar esse comando através do botão Reset do Anubis.

Execute o Script clicando no botão Run.


Uma segunda aba é criada e preenchida com os testes do script.


Para interpretar o resultado dos testes é igualmente simples, como pode ver existe uma Tag seguido pelos bytes de teste onde [ATR] é o Answer To Reset do cartão, [S] indica um APDU de envio (Send), [R] indica um APDU de resposta (Receive) e [SW] o Status Word (SW1 e SW2).
O Jaccal possui alguns módulos internos como GSM, serviços de criptografia SAM (Security Authentication Module), Global Platform e funções para cartões MULTOS.
Porém esses módulos são muito mau documentados e pode acabar sendo um bom desafio coloca-los para funcionar.

0 comments:

Post a Comment