Acesso a bancos sem software livre

Há muitos anos, usuários de grandes bancos no Brasil são obrigados a utilizar software não livre em seus computadores para fazerem consultas e operações via Internet.

Em muitos desses casos, era comum a utilização de um applet Java, muitas vezes funcionando apenas com um plugin e um JRE não livre, fornecido pela Sun, hoje Oracle. Tal JRE utilizava uma EULA draconiana, que me recordo interpretar como impedindo aquele que a aceitasse de realizar engenharia reversa, algo que algumas juridições permitem.

Recentemente, vários bancos passaram a exigir a instalação de um software que opera fora da caixa do applet da JVM, executando como superusuário. Trata-se, na verdade, de um servidor WebSocket, com o qual o JavaScript fornecido pelo Internet Banking ao acessá-lo se conecta.

Esses bancos e outros que não exigem tais instalações operam com bastante JavaScript, muitas vezes obfuscados, código não livre executado em nossos computadores. Não há como utilizar o sistema sem desabilitá-los. E executar versões modificadas e distribuí-las para que sejam de fácil uso para o usuário ainda é um desafio hoje.

Além do mais, há a limitação da interface a um browser Web, dificultando o acesso via outras interfaces, como linha de comando, e automação de operações por parte do usuário.

Acesso a bancos com software livre

Não seria muito melhor se o software para acesso aos bancos fosse livre e permitisse o uso de diferentes interfaces e automação? Que modificações a esse software pudessem ser feitas e compartilhadas para que outras pessoas pudessem utilizá-las?

Imagine poder obter seus extratos periodicamente e alimentar um banco de dados próprio, agregando movimentações financeiras de múltiplas fontes. E fazê-lo de forma automática, conhecendo como o software funciona e o adaptando como preferir.

Documentação

Esse é um projeto em que venho trabalhado há algum tempo, sem muito sucesso, mas com algum progresso que nunca documentei apropriadamente. Tal documentação é uma forma de compartilhar meu trabalho com outros, para que possam contribuir e ajudar no progresso de tal trabalho.

Meu objetivo com este post é documentar uma parte do trabalho que venho fazendo com a Caixa Econômica Federal. A CEF exigia um applet Java até alguns meses atrás, quando passou a exigir a instalação de um servidor WebSocket.

Cookies

Uma primeira observação importante é que, independente do mecanismo, seja o applet ou o servidor WebSocket, após o login, cookies podem ser reutilizados e operações realizadas.

Ou seja, é possível fazer o login utilizando um computador com o software proprietário instalado, exportar os cookies da sessão de navegação, e importá-los em outra sessão em outro computador. A partir daí, as operações podem ser realizadas sem utilização e interferência do software não livre.

Isto é importante, pois permite que o software livre para realização de consultas e operações possa ser desenvolvido sem a engenharia reversa desse software proprietário, e apenas a engenharia reversa da comunicação Web e, talvez, do JavaScript.

Login

Antes da substituição do applet Java, escrevi um script que permitia fazer um login e obter o saldo através de requisições HTTP. Sem utilização do applet Java, uma máquina podia ser cadastrada e seu cadastro utilizado para o login. No entanto, outras operações não eram permitidas. Ainda que utilizado o cookie em um browser, até mesmo qualquer consulta que não o saldo era negada.

Talvez fosse uma falha no cadastro, ou na operação de login, mas não pude determinar antes que a substituição acontecesse.

No entanto, novamente nenhuma substituição de operações realizadas pelo applet foram necessárias. O que me levou a descobrir que o applet não estava sequer operando como esperado.

WebSocket

Uma nova opção é fazer a engenharia reversa da comunicação WebSocket e substituir o servidor WebSocket. Daí, tal comunicação poderia ser substituída por chamadas locais.

Ainda assim, deve ser avaliada a possibilidade de ignorar tal comunicação totalmente. No entanto, ainda não tive sucesso em realizar o login como anteriormente, sem uso de algumas chaves aparentemente geradas pelo servidor.

Contribuindo

Para aqueles que quiserem saber mais detalhes e contribuir mais com o projeto, tenho um escopo de código aqui e aqui, que funcionavam anteriormente.

Também sugiro conversar na lista de e-mails software-impostos.