Mes: febrero 2014

Resolviendo captchas

Los captchas no sólo se utilizan para protegernos del spam sino que además supone una medida de seguridad que proporciona al usuario mayor confianza al visitar la página web, porqué cree que aquello en lo que está invirtiendo su tiempo o incluso su dinero no va a irse por el desagüe debido a unos bots.

Estas últimas semanas me he interesado por los bitcoins y he estado visitando algunas páginas webs que por ver una cierta cantidad de anuncios te proporcionaban una pequeña cantidad de bitcoins,unos cinco u ocho céntimos, por ver anuncios de 1 minuto o incluso 2 por una cantidad tan pequeña que apenas se podía ver en el monedero.

Me pregunté si las personas que pagaban por poner su anuncio en esas páginas de verdad creían que su dinero iba a ser protegido por un captcha y otros métodos de verificación tan simples como utilizar la cabecera de HTTP Referer para validar los formularios contra los bots. En ocasiones es posible que el motor de reconocimiento óptico no sea capaz de reconocer el captcha una vez eliminado el ruido, pero existen otros métodos más sencillos para identificar de que carácter se trata.

Algunas de las técnicas que he utilizado para identificar los caracteres que no han podido ser reconocidos correctamente por el motor ocr tesseract:

  • Calcular el peso de cada carácter en píxeles y compararlos con el peso que tiene cada carácter guardados en un base de datos.
  • Contar el número de coincidencias por posición (x,y).
  • Utilizar el ruido para recomponer el carácter.
  • Usar los errores del motor ocr para identificar los caracteres

Para eliminar el ruido en el siguiente captcha fue suficiente con seleccionarlos por la intensidad de cada píxel:

inDespués de eliminar el ruido y el borde:

outEl motor tesseract no podía reconocer correctamente todos los caracteres así que tuve que contar el número de coincidencias por posición (recogí las posiciones de cada número y después las guarde en una lista), con esto fue más que suficiente para identificar cada carácter.

Para los que nos estamos iniciando en esto de bitcoin acostumbramos a utilizar páginas PTC (Paid-to-click) que pagan por ver anuncios, una de las más conocidas es Bitvisitor.com que tiene un captcha que aparentemente es seguro, incluye rayas del mismo color que las letras lo que hace más difícil extraer los caracteres, pero se pueden extraer parcialmente y recomponer cada carácter y pasarlo por el tesseract.

a

Después de recomponer el captcha:

outComo se puede ver no ha servido de nada poner rayas xD. Las confusiones constantes de tesseract con ciertos caracteres se pueden utilizar para devolver el captcha correcto.

Los captchas son un buen método para proteger los sitios web de los bots pero deben ser robustos de lo contrario no sirven para nada. Por el tipo de captcha que utiliza Bitvisitor prefiero no pagar para poner un anuncio ahí. He escrito este post sólo para darle un toque de atención a los que van a invertir en esa página.

Anuncios