Category Archives: Mac

StringTransformer: the transformation tool

st

Hola lectores, en esta ocasión me gustaría compartir con ustedes una herramienta opensource que he publicado en mi repositorio de github, se trata de StringTransformer, un script desarrollado en python cuya finalidad es tomar una cadena de texto y transformarla a distintas representaciones equivalentes de la misma, por ejemplo binario, hexadecimal, octal, md5, sha256, etc. Las funciones de transformación son clases separadas del script principal por lo que la herramienta es modular, esto significa que es bastante fácil para cualquier programador (que sepa python) crear sus propias transformaciones y extender la funcionalidad de la herramienta.

Esta herramienta les puede ser útil cuando están jugando Capture the flags y necesitan una forma rápida de analizar cadenas de texto (o al menos esa es su finalidad), la herramienta sigue en desarrollo, corrigiendo bugs e implementando nuevas funcionalidades.

Instalación

Su instalación es bastante sencilla, primero deben de clonar el repositorio usando git

[bash]
$ git clone https://github.com/Alevsk/stringTransformer.git
[/bash]

Una vez descargado el repositorio acceden a la carpeta del proyecto, dan los permisos de ejecución necesarios y lanzan el script:

[bash]
$ cd stringTransformer
$ chmod +x stringTransformer.py
$ ./stringTransformer.py

_______
_____ | _ | ____
| | \ V / | |
| \ \ \_ _/ / / |
\ \ \ \ ‘ / / / /
\ \ | ‘V’ | / /
|\ \_____| \ / |_____/ /|
| \ | | / |
| | ,/|| ||\, | |
| `| ‘ || || ‘ |` |
| | | || || | | |
\ | | || || | | /
\. | | ||_|| | | ./
\ | | |___| | | /
\’ , _____ , ‘/
\/ ___ \/
/___\

stringTransformer v0.1 (https://github.com/alevsk/stringTransformer/)

Usage: stringTransformer.py -i INPUT_STRING | –input INPUT_STRING | –load FILE

stringTransformer.py: error: Required argument is missing. Use ‘-h’ for help.

[/bash]

Con el comando -h o –help podran ver el menu de ayuda:

[bash]
Options:
-h/–help show this help message and exit
-i/–input=INPUT set the input string to test with
-l/–load=LOAD_FILE load list of input strings (one per line)
-x/–exclude=EXCLUDE exclude this representations
-o/–only=ONLY transform input only to this representations
-O/–output=OUTPUT generate an output file
-p/–params=PARAMS use custom parameters on transformation functions
–list list available input representations
–update update from the official git repository

Examples:
./stringTransformer.py -i [STRING]
./stringTransformer.py -i [STRING] –exclude "hexa, octal"
./stringTransformer.py -i [STRING] –only "hexa, octal"
./stringTransformer.py -i [STRING] –params "rot.cipher=13,rot.encoding=utf-8"
./stringTransformer.py –load list.txt
./stringTransformer.py –list

[/bash]

Para ver las funciones de transformación actualmente disponibles pueden utilizar –list:

[bash]

stringTransformer v0.1 (https://github.com/alevsk/stringTransformer/)

– sha1
– octal
– binary
– sha256
– html_entities_decode
– html_entities_encode
– md5
– base64_encode
– base64_decode
– ascii
– slug
– rot_encode
– hexa
– urlencode

[/bash]

Puedes ayudar a crear más funciones de transformación para la herramienta, para eso sugiero lean la documentación en la página principal del repositorio (o en el archivo README.md) https://github.com/Alevsk/stringTransformer

Ejemplos de uso

Queremos aplicar una transformación hexadecimal, rot 13 encode y ascii a la cadena de texto “The transformation tool”
[bash]
$ ./stringTransformer.py -i "The transformation tool" -o "hexa,rot_encode,ascii"
[/bash]

Obtenemos como resultado:

[bash]
stringTransformer v0.1 (https://github.com/alevsk/stringTransformer/)

[i] Loaded 3 representations to apply.
[i] Starting tests at: "23:54:04"

The transformation tool

[i] applying transformation…

ascii:

84 104 101 32 116 114 97 110 115 102 111 114 109 97 116 105 111 110 32 116 111 111 108

rot_encode:

Gur genafsbezngvba gbby

hexa:

54 0x68 0x65 0x20 0x74 0x72 0x61 0x6e 0x73 0x66 0x6f 0x72 0x6d 0x61 0x74 0x69 0x6f 0x6e 0x20 0x74 0x6f 0x6f 0x6c

==================================

[/bash]

Incluso podemos pasar parámetros a las funciones de transformación que lo soporten, rot_encode por defecto utilizar 13 posiciones de desplazamiento pero aquí indicamos que use 51

[bash]
$ ./stringTransformer.py -i "The transformation tool" -o "rot_encode" –params="rot_encode.cipher=51"

stringTransformer v0.1 (https://github.com/alevsk/stringTransformer/)

[i] Loaded 1 representations to apply.
[i] Starting tests at: "23:58:11"

The transformation tool

[i] applying transformation…

rot_encode:

Sgd sqzmrenqlzshnm snnk

==================================

[/bash]

La herramienta cuenta con muchísimos otros parámetros que los invito a explorar.
saludos

Git Hack Recovery

En esta ocasión quiero compartir con ustedes una pequeña herramienta que desarrolle (y lo sigo haciendo) y que presente en #CPMX5 como parte de las charlas dadas por miembros de la Comunidad Underground de México, la herramienta se llama Git Hack Recovery y a grandes rasgos permite que en el caso de que tu sitio web haya sido comprometido por un atacante, los archivos regresen al último estado de confianza de manera automática, ahora explico un poco más.

1487876_10203003583025374_7182323267010208382_o

Montando el entorno

Para empezar tenemos dos opciones, montar nuestro propio servidor con git o utilizar el servicio de algún tercero que permita crear repositorios privados, para este ejemplo Bitbucket es una buena opción puesto que nos permite crear repositorios ilimitados. (https://bitbucket.org/repo/create)

bitbucket

Después debemos de crear 2 cuentas y agregarlas al repositorio, un administrador del con permisos de lectura y escritura y “esclavo” que solo será capaz de leer los archivos del repositorio pero no subir ni modificar nada. (para agregar usuarios al repositorio debes ir a settings > access management)

bitbucket2

Después para mayor comodidad vamos a utilizar pki authentication por lo que debemos crear nuestras respectivas ssh keys en cada maquina (el servidor de producción y la máquina de desarrollo / administración), tutorial: https://help.github.com/articles/generating-ssh-keys
Recapitulando debemos de tener:

  • Repositorio privado
  • Una cuenta con acceso de escritura y lectura al repositorio
  • Una cuenta con acceso de solo lectura al repositorio

Ahora con las tres cosas que tenemos debemos montar una infraestructura como la siguiente:

git-hack-recovery

Tip: En el caso de que nuestro sitio web utilice urls amigables como wordpress, es recomendable que en nuestro servidor de desarrollo utilicemos virtual-host y agreguemos una entrada con el dominio del sitio web que apunte a 127.0.0.1 en nuestro archivo hosts, esto porque algunas veces CMS como wordpress causan problemas con las urls.

Explicación de los Scripts

Esta primera versión de la herramienta está conformada por 5 scripts que se supone deben de correr en segundo background en el servidor de producción, los he separado en dos grupos para que sean más fácil de explicar.

Scripts de administración
Deben de correr en nuestro “trusted system”

  • auto_commit.sh: Como su nombre lo indica, hace un commit, es util a la hora de que terminamos de agregar algo en localhost y queremos que los cambios sean agregados al repositorio
  • db_checksum_backup.sh: En el caso de que nuestro desarrollo utilice bases de datos con este script podemos crear un backup de las tablas y almacenar el checksum de las mismas en un archivo para que posteriormente sean revisadas

Scripts de producción
Deben de correr en nuestro servidor de producción

  • auto_update.sh: Como su nombre lo indica, el trabajo de este script es revisar si hay nuevos cambios en el servidor Git, si los hay los descargara con el fin de mantener el sitio de producción actualizado
  • deface_recovery.sh: Este script se encarga de detectar cambios en los archivos locales, en el caso de que se elimine, modifique o cree un archivo, el script devolverá todo a como estaba originalmente
  • db_checksum_validator.sh: En el caso de que un atacante haya comprometido nuestra base de datos (agregado, eliminado o modificado información de la misma), este script detectara que hubo una modificación de las tablas utilizando el checksum y las restaurara utilizando la copia que tiene del servidor Git
Tip: Es recomendable que los script de producción corran mediante cronjobs mientras que los de administración sean bajo demanda

Integrar los scripts con un proyecto

Primeramente, en nuestra laptop o la máquina de donde subiremos los cambios (normalmente localhost) clonaremos el repositorio usando la cuenta de administrador, y agregaremos los archivos de nuestro sitio web, blog de wordpress, joomla, desarrollo a la medida o lo que sea, después para integrar Git Hack Recovery es tan fácil como descargar los archivos del siguiente enlace Git Hack Recovery y colocarlos junto con los archivos del sitio web que queremos proteger, el archivo .gitignore ya contiene las entradas para que los scripts de administración sean ignorados al momento de hacer los commits. Una vez tenemos los archivos listos en la maquina “trusted” podemos correr los scripts de administración (en este orden)

[bash]
$ ./db_checksum_backup.sh host-name db-name db-user db-pass
$ ./auto_commit.sh remote-name branch-name "your-commit-message"
[/bash]

En este punto tanto nuestro sistema “trusted” como nuestro servidor Git estarán sincronizados con los mismos archivos, ahora en el servidor de producción vamos a clonar el repositorio de Git utilizando la cuenta “esclavo”, esto nos asegura que en caso de que alguien vulnere el servidor de producción (que es el que normalmente está expuesto a Internet), solo seguirá teniendo acceso de lectura al repositorio en el servidor Git. En el servidor de producción es donde debemos de correr los 3 scripts que nos faltan como taras cron, para hacerlo podemos abrir el archivo de configuración de cronjobs usando el comando:

[bash]
# crontab -e
[/bash]

Y agregar las siguientes entradas

[bash]
*/1 * * * * cd /path/production-repository/; /bin/bash deface_recovery.sh –arguments > /path/deface_recovery.txt</li>
*/1 * * * * cd /path/production-repository/; /bin/bash auto_update.sh –arguments > /path/auto_update.txt</li>
*/1 * * * * cd /path/production-repository/; /bin/bash db_checksum_validator.sh –arguments > /path/db_checksum_validator.txt</li>
[/bash]

Estos scripts se estarán ejecutando cada minuto y guardaran un log en el path que le indiquemos. Listo, esto ha sido un pequeño tutorial de cómo integrar la herramienta, es la versión 1.0 pero cumple con su cometido, estaré trabajando para agregarle funcionalidades extras así como soporte para manejar más motores de bases de datos. Próximamente estaré subido algunos vídeos de donde se aprecie el funcionamiento de la misma.

Git Hack Recovery en acción

Descargar Git Hack Recovery

salu2

50% de descuento para Campus Party 2014!

cover2

Uno de los eventos más importantes de Tecnología y ambiente tecnológico del mundo se celebrará en nuestro país en Zapopan, hablamos de CPMX5 y hoy te mostraremos la oportunidad de como obtener tus entradas con el 50 de descuento.

  • Deben registrarse como campusero en www.campus-party.com.mx.
  • Si ya tienes usuario solo debes hacer login.
  • Una vez hecho login en el panel de usuario deben seleccionar la opción «Comprar entrada». (http://www.campus-party.com.mx/webapp/fichaUsuario/pago)
  • Elegir la opción «Comprar con descuento».
  • En el proceso deben usar el siguiente código de descuento: CD501ihw35hi (copia y pega).
  • Una vez elegido el tipo de entrada se procede al pago de la cantidad vía PayPal.

¡Y listo! solo faltaría esperar a que llegue el día de comienzo de #CPMX5 para disfrutar de una semana de contenidos para los fans de la tecnología y lo que esto implica.

Juegos en la nube utilizando Dropbox

blog-11

Hace 10-12 años nadie hubiera imaginado que podríamos comenzar a escribir un documento en nuestra computadora personal, guardarlo, y luego continuar en la computadora de la oficina, todo de forma totalmente automática. El concepto de almacenamiento en la nube era algo muy nuevo que apenas se estaba desarrollando, reservado únicamente para grandes compañías, universidades e instituciones del gobierno. Afortunadamente hoy en día el almacenamiento de archivos en la nube es ya una realidad, muchas compañías como Dropbox o Microsoft (Skydrive) han sido lo bastante flexibles como para permitir que cualquier persona tenga la oportunidad de utilizar sus servicios y disponer de sus archivos en cualquier lugar y en cualquier momento y de manera gratuita.

Hoy en día la industria de los videojuegos ha evolucionado bastante, plataformas como Steam y Origin nos permiten utilizar nuestros juegos en cualquier computadora, guardar nuestro progreso y continuar justo donde nos quedamos en cualquier otra computadora que tenga el cliente instalado, todo esto haciendo uso del almacenamiento en la nube :), por supuesto hoy en día solo los juegos más modernos tienen incluida esta característica, pero ¿qué pasa con los juegos viejos que no tienen esta funcionalidad implementada?, en lo personal es bastante molesto empezar una historia (si nuestro juego es de historias, etc) en la computadora que llevamos a la universidad, y al regresar a nuestra casa utilizar la computadora de escritorio y darnos cuenta que tenemos que jugar de nuevo la historia. Es aqui donde entran a nuestro rescate servicios gratuitos como Dropbox :).

Para que un videojuego utilice el “almacenamiento en la nube” en lugar del almacenamiento local tenemos que hacer básicamente 2 cosas.

  • Encontrar la carpeta donde el juego almacena nuestro progreso
  • Engañar de alguna manera al juego para que utilice nuestra carpeta de dropbox

El primer punto requiere un poco de investigación, muchas veces en las FAQ o en foros se indican cuáles son las carpetas que el juego utiliza para almacenar los avances, siempre podemos dar una revisada a los archivos del juego y tratar de entender cómo se comporta y utilizar google para obtener esta información. El segundo punto es bastante interesa y se puede realizar de varias formas, podemos complicar tanto esta parte como queramos, desde hacer ingeniería inversa al juego y forzar para que escriba directamente en la carpeta que queramos, utilizar enlaces simbólicos para “engañarlo” o cambiar la ruta por defecto si el juego nos lo permite :).

Para este ejemplo utilizare un videojuego (novela visual) llamada Katawa Shoujo, es un buen ejemplo puesto que el juego es multiplataforma (Windows, Linux y MAC OSX), asumiendo que tienen instalado Dropbox en todas las maquinas donde tendrán sus partidas sincronizadas comenzamos.

Primero tenemos que crear una carpeta en dropbox donde se almacenaran y sincronizaran nuestros datos para el juego

ks_dropbox

Como se ve en la imagen la carpeta se llama Renpy, respetando el nombre original, si tenemos progreso local de una vez copiarlo manualmente para que se vaya sincronizando con la nube de dropbox, las rutas de dropbox tanto en windows como en mac quedaron de la siguiente forma

  • Mac OS X: /Users/alevsk/Dropbox/games/katawa_shoujo/RenPy
  • Windows 8: C:\Users\Alevskey\Dropbox\games\katawa_shoujo\RenPy

Es importante guardar estas rutas en algún lado ya que más adelante las necesitaremos. Ahora, como mencionaba anteriormente tenemos que conocer es el directorio en donde Katawa Shoujo guarda el progreso de los jugadores, así que vamos a buscar esa información en el foro oficial del juego y en menos de 5 minutos encontramos que los directorios son:

  • Mac OS X: /Users/usuario/Library/RenPy
  • Windows 8: C:\Users\usuario\AppData\Roaming\RenPy

Bien, ahora tenemos que engañar al programa, como el juego no nos da la libertad de modificar la ruta del directorio donde guarda los progresos y hacerle ingeniería inversa seria tardado optamos por crear enlaces simbólicos, tanto en Windows como en sistemas basados en Unix esto es muy sencillo de realizar.

En Mac OSX lo que tendríamos que hacer seria abrir nuestra terminal y escribir los siguiente comandos

[bash]
# Nos movemos al directorio donde está la carpeta Renpy
$ cd /Users/usuario/Library
# Si no hiciste un respaldo de tu avance con anterioridad ahora es un buen momento, ya que el siguiente comando borrara la carpeta Renpy
$ rm -rf Renpy
# Ahora creamos un enlace simbólico llamado Renpy que apunta a nuestra carpeta sincronizada en dropbox
$ ln -s /Users/usuario/Dropbox/games/katawa_shoujo/RenPy RenPy
[/bash]

Listo terminamos con la versión Mac de KS, ahora vamos a Windows y hacemos lo mismo, los enlaces simbólicos son creados desde la consola (CMD) utilizando el comando mklink.

[bash]
# Nos movemos al directorio donde está la carpeta Renpy
> cd C:\Users\usuario\AppData\Roaming
# Si no hiciste un respaldo de tu avance con anterioridad ahora es un buen momento, ya que el siguiente comando borrara la carpeta Renpy
> rmdir RenPy /s /q
# Ahora creamos un enlace simbólico llamado Renpy que apunta a nuestra carpeta sincronizada en dropbox
> mklink /D RenPy C:\Users\usuario\Dropbox\games\katawa_shoujo\RenPy
[/bash]

Y listo con esto Katawa Shoujo ya utiliza la nube, ahora podemos tener sincronizado nuestro progreso de manera automática en todas nuestras computadoras :).

Avance guardado en Windows

Avance guardado en Windows

Avance del juego guardado en Mac

Avance del juego guardado en Mac

Siguiente estos sencillos pasos podemos tener la mayoría de nuestros juegos no tan modernos utilizando la nube en un abrir y cerrar de ojos, con esto quiero que se den cuenta que dropbox no está solo limitado a sincronizar documentos de ofimática, las posibilidades son infinitas :).

Lista de ganadores de entradas para Campus Party 2013

Muchas gracias a todos los que participaron el sorteo de 3 entradas gratis para asistir a Campus Party México 2013, las personas listadas a continuación ganaron una entrada con puesto en sala para el evento :), muchas felicidades.

  • Braicot Espinoza
  • Rocio Barragan
  • Jose Vazquez Quezada

Si no resultaste ganador no te desanimes, todavía puedes conseguir tu entrada con un 20% de descuento :)!

¿Como? Muy fácil, tan solo pídela utilizando nuestra sección de contacto y con mucho gusto te enviare un código promocional para que puedas adquirir tu entrada!.

Ya falta poco, nos vemos en Campus Party México 2013

salu2