sábado, 21 de octubre de 2017

Reconocimiento Óptico de Caracteres, Un ejemplo

Hace algunos días me encontré con algunos sistemas CAPTCHA (Completely Automated Public Turing test to tell Computers and Humans Apart) bastante peculiares en Internet con algunas características interesantes como el uso pocos colores(1,2,3), con zonas determinadas, una fuente sin curvaturas, etc,etc.


Quiero compartir un pequeño análisis


Tomaremos por ejemplo los siguientes CAPTCHAS:


Figura 1: Ejemplo Numero 1

Figura 2: Ejemplo Numero 2

Figura 3: Ejemplo Numero 3

Análisis:
Cada imagen presenta 2 colores primarios, existe una degradación entre estos colores con una serie de letras y números en el centro de la imagen.

Figura 4: Colores primarios

Al ser una imagen sencilla se resolverá en 2 pasos:

Paso 1.-

Se debe colorear cada pixel que no sea una letra de color blanco, para esto usaremos los códigos RGBA seleccionando cada pixel que no cumpla con el patrón

        • R > 170  
        • G > 220
        • B < 250 

Si se cumple el pixel se pinta de Blanco y en lo contrario de Negro.


for y in xrange(alto):
        for x in xrange(ancho):
            if (pixel[x, y][0] > 170) and (pixel[x, y][1] > 220) and (pixel[x, y][2] < 250):
                pixel[x, y] = (0, 0, 0, 255)
            else:
                pixel[x, y] = (255, 255, 255, 255)


Paso 2 .-

En la parte inferior, alrededor del 75% al 100%(tomando como punto de partida la parte superior) cumplen con el patrón anteriormente mencionado, pero al ser una zona de la imagen que no presenta pixeles significativos para este análisis, se pintan todos de Blanco.


ancho = img.size[0]
alto = img.size[1]

altom = img.size[1] * 0.78

for y in xrange(int(altom),alto):
        for x in xrange(ancho):
            pixel[x, y] = (255, 255, 255, 255) 



Estas tareas realizan modificaciones en la imagen permitiéndonos obtener lo siguiente:
Figura 5: Salida de la imagen modificada.



Pytesseract


Pytesseract es una librería para python que sirve como Python wrapper para Google Tesseract, permitiendo reconocer y/o "leer" el texto incrustado en las imágenes.

Entonces usaremos el método image_to_string y limpiando la salida de cualquier cosa que no sea un numero o letra, como se muestra continuación:

print "Opcion 1: ",
    text1 = image_to_string(img)
    salida1 = re.sub('\W+','', text1 )
    print salida1


Así también se uso otra técnica de escalar la imagen  

big = im_orig.resize((ancho * porcentaje,alto * porcentaje), Image.NEAREST)

y luego analizar esta nuevamente con Pytesseract.

El script Completo se puede encontrar en mi github:


Uso: python websis-ocr.py 15.jpg
Tomando en cuenta la siguiente imagen:

Figura 6: Archivo con el nombre 15.jpg


Figura 7: Uso del Script.


Conclusiones:
Es relativa mente sencillo crear un script para romper un Captcha sin mucha complejidad(toda la tarde de un sabado), se recomienda utilizar:

Muchas gracias por su tiempo:


domingo, 10 de septiembre de 2017

¿Que puedes hacer los Sabados?

|Lo mejor que se puede compartir es el conocimiento.

-Alain Ducasse-
Cuando me di cuenta que pasaría mucho tiempo en Panamá, empezamos a conocer mucha personas interesadas en seguridad informática, en las distintas universidades donde nos invitaban.
Entonces con @crhystamil planificamos crear un grupo de aprendizaje en el área de Seguridad Informática (tenemos experiencia con un grupo similar en SCESI-UMSS en Cochabamba - Bolivia) y @aandradex también se puso manos a la obra, con todo el apoyo posible.
Entonces después del FLISOL 2016 Panamá se hizo la invitación para poder formar un grupo de aprendizaje en Seguridad Informática.
Desde el inicio hasta la fecha de hoy fueron parte del grupo una gran cantidad de personas, en su mayoría estudiantes universitarios, pero también profesionales que trabajan en el área. El enfoque de aprendizaje del grupo fue cambiando, desde temas de Seguridad Web, Seguridad en Redes, Resolución de Wargames, GNU/Linux, etc, etc, etc.
Solucionando Problemas



El objetivo de este grupo es crear una comunidad de Seguridad Informática, dispuesta a colaborar y compartir conocimientos, así también actualizar a los participantes sobre las novedades y actualidad del mundo de la Seguridad Informática, Actualmente la reunión se realiza en las Oficinas de Ethical Hacking Consultores.

Compartiendo con los amigos


Gracias a Ethical Hacking Consultores por brindarnos el espacio y muchas veces el refrigerio.
Entonces nos reunimos todos los sábados a las 10:00 am hasta las 12:00 en las oficinas de Ethical Hacking Consultores, para formar parte del grupo no se necesita un nivel alto de conocimiento, solo ganas de aprender. Por cierto es Libre no tiene ningún Costo.
En el grupo se encuentran personas de distintos lugares de Latam, por eso decidimos bautizarlo LatamSec.
Nos comunicamos por Telegram, en el grupo LatamSec

Por su puesto que estas invitado a ser parte del grupo.

Personalmente me siento agradecido con los grupos de Fedora Panama y FLOSSPA que gracias a ellos conocí personas muy maravillosas.
Estamos Creciendo

Compartiendo experiencias.
Como Ethical Hacking Consultores estamos comprometidos a mejorar la seguridad informática, por ello compartimos el conocimiento.