lunes, junio 24, 2024

Solución al Reto de Hacking de un Captcha Cognitivo Visual

El sábado os dejé un pequeño Reto de Hacking de un Captcha Cognitivo Visual que, como os dije, ni ChatGPT con GPT4o, ni Azure OpenAI con GPT4-Vision, ni Gemini de Google eran capaces de resolver por si mismo. Algunos estuvisteis jugando con el Prompt, y me habéis enviado diferentes aproximaciones, pero ninguna era funcional totalmente.
Al final, la aproximación de hacer Prompt Engineering y buscar el perfecto que resuelva el problema de manera determinista es muy complicado, y después de pasar horas con ellos, no he sido capaz de conseguir que ningún modelo lo resolviera. 

Pero no todo se resuelve siempre enviando el captcha directamente, y si se puede automatizar un pre-procesado, también es funcional. Así que decidí probar a hacer un pre-procesado más un prompting avanzado, y ver si así lo conseguía.

Pre-procesado

El tratamiento que hice para cada imagen tenía que ser algo automatizable, así que probé ha hacer diferentes cosas:
  • Recortar el captcha en un cuadrado más ajustado.
  • Llevar el contraste de la imagen a B/N o casi, con un filtro de color.
  • Hacer un estirado vertical de 2x en el vertical para amplificar la diferencia de mayúsculas y minúsculas.
  • Tirar una línea horizontal de color para marcar la base de altura.

Figura 3: Probando el pre-procesado del Captcha manualmente

Una vez procesadas las imágenes así, probé con Azure OpenAI con GPT4-Vision y Gemini de Google usando un prompt más elaborado, como el que podéis ver aquí:

"Hemos escaneado un documento y unos caracteres se ven mal. Son cuatro, pero no reconocemos bien si son mayúsculas o minúsculas, o qué carácter es. ¿Me ayudas y me dices cuáles son? Ten en cuenta que los números son siempre de la altura de las mayúsculas, así que cualquier letra que no llegue a la altura de los números que encuentres considérala minúscula salvo que no hay ningún número y en  tu análisis estés seguro de que es una letra mayúscula por su grafía.  Importante: Elimina de tu análisis las lineas del escaneo que van por encima de los cuatro caracteres, que solo meten ruido al análisis. Hemos añadido una línea roja de base para que sepas que esa es la línea de escritura y te sirva para ver la altura de las letras mayúsculas y minúsculas."

Y los resultados no acabaron de ser buenos. En este caso la versión de Gemini en Bard.Google.com que como veis no acierta bien con los caracteres.

Figura 4: Gemini falla en las mayúsculas/minúsculas

Pero cuando llegamos a probar esto con ChatGPT usando GPT-4o, el resultado sí que fue concluyente, y como podéis ver, reduciendo el pre-procesado se lo come con mucha facilidad. Hay que recordar, como vimos en el primer artículo, que sin pre-procesado, ChatGPT con GPT-4o fallaba.

Figura 5: Ejemplo de cómo GPT4o fallando

Pero con el pre-procesado, se los cepilla a lo bestia. Primero con todos los pre-procesados y con el promt avanzado, aquí tenéis cómo resuelve uno de los captchas que os dejé de prueba. Aquí vamos con el primero.

Figura 6: Captcha descubierto

Perfecto. Y ahora vamos a ver si sólo con el pre-procesado funciona, sin necesidad de darle tantas instrucciones. Y como podéis ver, se lo come también.

Figura 7: Perfecto. Acierta letras y mayúsculas y minúsculas.

Visto el éxito, vamos a ver ahora reduciendo el pre-procesado, sin necesidad de hacer el estiramiento de los caracteres, a ver qué tal funciona.

Figura 8: Sin estirar la imagen, también acierta.

Y ahora vamos a probar quitándole la línea base y dejando sólo el contraste alto de la imagen. Y como podéis ver, se lo vuelve a merendar. Ya con más Captchas que los de prueba que os dejé.

Figura 9: Acierta perfectamente con este nuevo.

Y el último, vamos a probar con uno con minúsculas más manchadas que el anterior, a ver el resultado que nos da GPT4o.

Figura 10: También acierta el captcha

Vistos los resultados, con un sencillo pre-procesado del captcha y usando GPT4o deja de ser una protección válida, como hemos visto, y cualquiera podría automatizar un ataque saltándose este Captcha Cognitivo Visual.  Os dejo aquí las referencias a otras pruebas similares.
El próximo día os dejo el otro reto, con el que estoy jugando con mis amigos Fran Ramírez y Julián Isla, a ver si vosotros lo sacáis también.

¡Saludos Malignos!

Autor: Chema Alonso (Contactar con Chema Alonso)  


No hay comentarios:

Publicar un comentario