Acessando SmartCards usando Jaccal
Autor: Ricardo Massao | Publicado: 2010-12-19T06:42:00-08:00

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:&nbsp;
http://jaccal.sourceforge.net/&nbsp;

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

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 :
atr = open();
prints(atr);

prints("Select Application");
cmd = new ApduCmd("00A404000B0102030405060708090000");
prints(cmd);
card_response = execute(cmd);
prints(card_response);

prints("Teste Bytes");
cmd = new ApduCmd("00000000060A0B0C0D0E0F");
prints(cmd);
card_response = execute(cmd);
prints(card_response);

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.Espero que tenha gostado de aprender sobre esse excelente e simples software para Smart Cards.
Um Abraço, e até a Próxima!