Captcha Solver para iniciantes

Resolvendo captcha de imagens com inteligência artificial em menos de 10 minutos.

Bruno Vilela
3 min readJul 26, 2022

--

NL;ML: Sistemas de captcha são velhos conhecidos da internet, solução para freiar a utilização de bot’s na internet em 1997, veio se atualizando e aumentando a dificuldade/mecanismo ao longo dos anos. Porém ao mesmo tempo em que conseguimos criar algoritmos de captcha mais complexos, também criamos solver’s mais complexos que são capazes de competir com os mesmos. Neste post resolveremos um captcha de imagem de forma prática. (Este post tem cunho educativo, uma vez que só continuaremos evoluindo se conhecermos as tecnologias atuais e criarmos maneiras mais elegantes/complexas de se efetuar as mesmas funcionalidades. Não me responsabilizo pelo uso indevido)

PRÉ-REQUISITOS:

  1. Python3
  2. Pytesseract
  3. Skimage

AGENDA

  1. Imagens
  2. Desvendando o código
  3. Removendo ruído
  4. Validando a eficácia

IMAGENS

Primeiramente precisamos definir onde está o sistema de captcha que desejamos testar a segurança. Nesse exemplo, utilizarei um sistema web (o qual não vou citar qual é, por motivos óbvios), que carrega as imagens do captcha diretamente em uma tag <img>.

É ideal que realizemos um simples cálculo para sabermos quantas imagens precisamos ter para nossa validação, e qual o grau de confiança da nossa solução. No nosso exemplo, o captcha é constituído de 6 caracteres, que inclui todo alfabeto (minúsculo), e os números.

Utilizando arranjo simples, podemos chegar a quantidade máxima de caracteres possíveis nesse captcha. A resposta é 1402410240 possibilidades. Com isso podemos chegar a quantidade de imagens que precisamos para validar, tornando nosso solver estatisticamente válido. A fórmula para cálculo do tamanho da amostra é dada por:

Os valores de confiança mais utilizados e os valores de Z correspondentes podem ser encontrados abaixo:

Usando essa fórmula no nosso exemplo, com grau de confiança de 95%, chegamos ao tamanho final de 385 imagens necessárias. Neste exemplo, realizei uma automação simples utilizando o puppeteer, onde ele acessa o site, baixa a imagem, joga para nosso script python de detecção e testa no input do código, em 385 imagens DIFERENTES (nada impede a utilização de outra tecnologia ou até mesmo uma validação manual, onde você baixa a imagem e a nomeia com o captcha válido, depois testando-a no script). A porcentagem de acertos será nossa validação.

DESVENDANDO O CÓDIGO

Aqui chegamos na parte legal. Vamos tratar nosso captcha e jogar para que o tesseract nos diga quais caracteres ali estão contidos. Posteriormente, ensinarei como criar uma CNN própria para colocarmos no lugar do tesseract, mas esse post já está bem longo para isso.

Vamos iniciar removendo ruídos com operações de imagem, a biblioteca skimage irá nos auxiliar nesse processo.

--

--

Bruno Vilela
0 Followers

Stats, ML/AI, data, technology, game, music, decision science. https://vilelabruno.github.io/