Redes Sociales

sábado, 16 de noviembre de 2013

Automatización de raton en diferentes arquitecturas

Todos tenemos nuestros hobbies fuera de la informática. Y uno de los mios es la genealogía. Me encanta rebuscar entre documentos que tienen 400 años en busca de un misero dato que en el fondo no nos dice nada.

Para los que no sepáis cómo es este mundo. Básicamente consiste en pasarse múltiples horas hojeando los libros de bautismos y matrimonios que los curas de las iglesias iban escribiendo. Por suerte muchos de estos libros han sido escaneados y esos valiosos documentos de 400 años pueden mantenerse a salvo de incautos como yo.

Entrando ya en materia, el problema que tenía con la aplicación donde se almancenan esas copias escaneadas de los libros es que:

  • a) La web es lenta
  • b) Sólo deja descargarse hojas sueltas
  • c) Es necesario revisar a veces libros de 600 páginas, folio a folio.

Estas características hacen el trabajo del genealogista, ya de por si muy pesado, aún más tedioso.

Como soy informático y me gusta mucho el tema de la automatización de tareas me planteé la forma de automatizar al descarga de libros completos, pagina a página para, una vez descargados, unirlos en un PDF.

El primer problema que encontré fue la aplicación que utilizaban era embebida y solo tenia un frontend en flash. No me valia pues Python.

Me puse a buscar un lenguaje de programacion que me permitiera hacer clicks en posiciones de la pantalla, y encontre aplicaciones como Automouse o autoclick que permiten hacer clicks en posiciones de pantalla en concreto, sin embargo no me valia, necesitaba que se metiera texto cuando lo necesitaba y que tuviera variables que crecieran donde se alojara por ejemplo la página que estaba en ese momento descargándome.

Así conocí AutoIT, un lenguaje de scripting que me permitía hacer todo lo que quería desde Windows.

Con comandos como MouseClick("left",75,43) que me llevaba a la posición 75,43 de la pantalla y me hacia click con el botón izquierdo. Y comandos como InputBox("Titulo") que me permitía guardar en variable lo que escribiera el usuario. Así saque este script:

Este script en concreto, detecta si el directorio donde se va a guardar las imagenes existe o no, se adapta a los libros automaticamente, se recupera de errores y al final convierte las imagenes en PDF.

Una vez conocí bien AutoIT lo he utilizado en el trabajo para automatizar tareas repetitivas. Eso lo contaré en otras entrada.

Recientemente en casa me di cuenta que mientras descarga libros no puedes hacer nada más en el equipo (la aplicación mueve el raton cada pocos segundos) durante un par de horas, a no ser que tuviera máquinas virtuales donde poder correr el script.

Como tenia a mano un linux en otra máquina pense si existiría AutoIT para Linux. La respuesta fue negativa. Pero si encontré algo parecido y conocido como xdotool

Aunque aún no la he estudiado en profundidad, tiene aspecto de permitirme hacer todo lo que he podido hacer con AutoIT. A diferencia de AutoIT, que es un lenguaje de scripting, xdotool es una aplicación que admite una serie de parametros o comandos y que debe ser lanzado de forma repetitiva desde un script BASH. Para hacer muchas otras tareas que hace autoIT, nos tenemos que basar en los comandos de Linux desde linea de comandos. En cualquier caso no me costó mucho conseguir algo parecido a lo que tenia hecho en AutoIT en WIndows:


‎#!/bin/bash

PAGINAS=421
DIRECTORY=/home/lmartin/Genealogia
PUEBLO=MARAZOLEJA
C=197
mkdir $DIRECTORY/$PUEBLO 2>/dev/null

xdotool sleep 3 

while [ $C -lt $PAGINAS ]
do

#ESPERO 10SG A QUE SE CARGUE LA IMAGEN
xdotool sleep 10 

#LE DOY A GUARDAR IMAGEN
xdotool mousemove 1218 565 click 1

#ESPERAMOS 10SG A QUE SE GUARDE EN DISCO
xdotool sleep 10 

mv /home/lmartin/Descargas/record-image.jpg $DIRECTORY/$PUEBLO/$C.jpg

#HAGO CLICK EN "SIGUIENTE IMAGEN":
xdotool mousemove 208 235 click 1

((C++))
done

xdotool esta disponible para Debian y Ubuntu, FreeBSD, Fedora, Mac OS X y OpenSUSE.

Y una vez hecho me dije y por que no hacerlo en el IPAD, en el fondo es un UNIX... Si, es verdad pero lo que me daba cuenta eran las fuertes restricciones que aplica Apple al desarrollo de Apps. De hecho no encontré ninguna App comercial que hiciera algo similar. En esta web recomendaban hacerlo via VNC desde el PC. No me parecia una solucion factible. Finalmente encontré en Cydia una App de pago llamada AutoTouch que permite grabar una serie de taps y sus posiciones y luego reproducir esa secuencia de movimiento, a la par que genera código LUA que luego podemos modificar.

Autotouch, una App muy recomendable para automatizar miles de tareas con nuestro Ipad, aunque eso sí, es necesario hacer jailbreak a nuestros dispositivo iOS. Cabe mecionar que también esta disponible para Android, aunque es posible que para Android haya otro tipo de Apps de características similares.

martes, 5 de noviembre de 2013

La importancia de la actualizarse, Andres

Desde hace unos dias venia notando que la conexión a internet me iba lenta. Por mas que desactivaba servicios y herramientas como el utorrent, la cosa no iba del todo bien.

Me ha llamado la atencion ver esta mañana en los logs del router que el mes pasado descargue 40Gb.... y subi 55Gb!!. Esto puede ser en cualquier caso a causa del uTorrent, pero en todo caso me sigue pareciendo un uso excesivo de Internet.

A raiz de esta ingente cantidad de datos subida a internet desde mi red, me puse a mirar los logs. Cual fue mi sorpresa encontrar mensajes de indicaban a grandes rasgos (no tengo el mensaje original) que me estaban accediendo desde las IPs 46.174.199.10 (Rusia) y 113.200.214.43 (China) entre otras a un mismo puerto (el 64662) de mi portatil:

(...)
[LAN access from remote] from 46.174.199.10:22342 to
192.168.XX.XX:64662, Tuesday, Nov 05,2013 11:16:22
[LAN access from remote] from 113.200.214.43:33121 to
192.168.XX.XX:64662, Tuesday, Nov 05,2013 11:14:01
(...)

¡Bicho!, pensé y seguro que no ando desencaminado. El caso es que al mirar los puertos abiertos dicho puerto no aparece en mi portatil, lo cual no quiere decir nada, puede ser que tenga un bicho que se conecta con un servidor C&C cada X tiempo.

Lo primero que he mirado ha sido a ver si el router (Un NetGear N-150 WR1000) tenia alguna vulnerabilidad y Google me ha respondido que si:

http://www.exploit-db.com/exploits/24916/

Según nos comentan aqui en los NETGEAR N-150 WNR100v3 con firmware anterior a 1.0.2.60 se puede conseguir el fichero de configuración del router accediendo a la URL indicada en el articulo:

http:///NETGEAR_fwpt.cfg?.jpg

...y ciertamente se descarga un fichero cifrado con extension .cfg:

Como indica el articulo, el fichero esta cifrado. Pero dan una "solución" para eso: Un programita en Python.

Al pasarle el programita en python, con alguna pequeña modificación necesaria, entre toda la morralla de la configuración del NetGear, la contraseña aparece en limpio la contraseña de la interfaz web del router:

La solución ha sido, por supuesto, actualizar el firmaware del Router, cosa que he hecho, desde la versión 1.0.2.18 a la 1.0.2.62 (tiene sus años el aparato).

También he cambiado la contraseña del router y de la red wifi

Lo cierto es que despues de adoptar estas medidas:

  1. Me va mejor la red
  2. Me va mejor internet
  3. Han dejado de aparecer esos mensajes que mostraba más arriba.

En cualquier caso, dicho router no esta abierto al exterior, por lo que es poco probable que me hayan sacado la contraseña del router de esta manera. Tiene más bien aspecto de que uno de mis equipos ha sido infectado.

Ahora solo me queda revisar todos los equipos y seguir monitorizando la red. O sea lo de siempre!.

La verdad es que constantemente se recomienda actualizar todo el software y el sistema operativo a la ultima version, pero nos olvidamos muchas veces de que por los routers pasa toda la información y que tambien tenemos que actualizarlos y hacerles un mantenimiento...