Pitch: Utilizando Python Para Quebrar Captchas
Desafio
Alguns dias atrás um amigo me desafiou a quebrar um captcha utilizando qualquer linguagem de programação, só não poderia utilizar um Site que ja faz isso! hahah
Qual linguagem utilizar ?
Atualmente temos N linguagens de programação, tornando assim um verdadeiro paradigma escolher qual utilizar e porque;
Contudo, resolvi escolher a linguagem Python por ser menos verbosa e mas prática, e não menos importante por ser a queridinha de todos, mesmo eu atuando com Java em meu cotidiano no trabalho haha.
Como eu fiz ?
Então, para quebrar captchas temos diversas formas manuais, sites especializados e libs. Neste meu desafio eu resolvi utilizar Lib pytesseract do Python, você pode encontrar mas sobre ela aqui.
De acordo com o site principal da lib, Pytesseract é uma ferramenta de reconhecimento óptico de caracteres (OCR) para python. Ou seja, ele irá reconhecer e “ler” o texto embutido nas imagens.
Basicamente ela extrai os conteudos de imagens e transforma em Texto, com isso, utilizei outra lib interna do Python chamada PIL para ter acesso a classe Image.
Utilizando a classe Image eu pude acessar o metodo open para abrir a imagem e colocar os seus binarios em uma variavel.
Logo após, utilizei o metodo image_to_string do Pytesseract que como dito, extrai os conteudos da imagem e então atribui para outra variavel.
Por fim, fiz uso de dois Prints para visualizar os conteudos extraitos das images.
- 1° Print mostra a quantidade de tentativas utilizadas para chegar ao sucesso ou falha da extração.
- 2° Print mostra o conteudo da imagem captcha.
Para ter um controle sobre a quantidade de tentativas utilizei uma variavel denominada tentativa que inicia com valor Zero, e a cada execução do While ela incrementa mais um.
Também fiz uso da lib interna do python chamada time, para deixar as execuções rolarem a cada 1 segundo.
tentativa = 0
while True:
image = Image.open("data/"+config.imagem)
result = pytesseract.image_to_string(image)
print('tentativa {}'.format(tentativa))
print('captcha -> {}'.format(result))
print('----------------------------')
tentativa += 1
time.sleep(1)
Onde encontro o Projeto ?
Disponibilizei em meu github o projeto open source break capctha. sintam-se a vontade para melhorias e novas ideias de captchas que possamos tentar burlar para fins de conhecimento.
Peço que leiam atentamente o Readme do projeto, e que, se forem realizar mudanças criem uma branch a partir da Main e abram o Pull Request. Para novas ideias podem abrir uma ISSUE.