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.