JMReversi

This entry is about JMReversi, a free implementation of classic Reversi. At this moment, this application is not in the Store but hopefully will be available soon, because I didn’t have any problem validating it locally.

My personal reason to develop this application is to implement Alfa-Beta algorithm.

My idea is release some day another version with more features that are currently half developed, but now I don’t have time so I decided release it.

Any comment and suggestion is well appreciated.

Windows Store

General features

Version 1.0

  • Play classic Reversi game.
  • Computer decissions are based on Alfa-Beta algorithm.

Screenshots

JMTwitter

This entry is about JMTwitter, a free Twitter client for Windows 8 (metro style) I’m currently developing. At this moment, the application is not published in the official store (in fact, has been rejected because didn’t pass performance tests, therefore I need to improve it, sure).

I think I will also release the source code when I finish to comment it and have time for that. I would like to continue developing this application and all comments and suggestions will be well appreciated.

General features

Version 1.0

  • Visualize your timeline, mentions and trending topics (refresh every minute).
  • Automatically stores your timeline and mentions to visualize offline.
  • Send tweets and replies.
  • Automatic splited tweets and replies.
  • Snapview mode.

Screenshots

External libraries (credits)

  • LinqToTwitter by Joe Mayo is the library used to interact with Twitter service itselft.
  • SQLite-net by Frank Krueger is the library used to store timeline tweets to have them available offline.

Twitter Stalker. Script para obtener datos de una cuenta de Twitter

Mitad por entretenimiento y mitad por motivos personales, me vi desarrollando una aplicación en Bash que me permitiera obtener los datos de una cuenta de Twitter, a partir del nombre de usuario del que quisiera obtener dichos datos.

Hace algunos dias la terminé, y ayer la traducí a PHP, puesta hoy pública (aunque todavia no el código) para detectar posibles fallos y ser reportado de algún tipo de bug o comentario, es por eso por lo que animo a que cualquiera que tenga un rato la pruebe: http://old.delanover.com/projects/twitter.

Quisiera relatar un poco la experiencia que tuve en este post. Como dije, al principio la escribí en Bash. Viene muy bien saber comandos de linux para esto, y en el proceso de creación del script descubrí algunas cosas interesantes de Bash.

El comando paste, nos permite juntar dos ficheros desde la consola. Pero no de la misma forma que hariamos con cat archivo1 archivo2. De esta última forma, concatenariamos archivos. Entenderemos este comando mejor con un ejemplo:
Archivo 1
Hola
Adios
Archivo 2
Mundo
Mundo

Realizamos: paste archivo1 archivo2 > final y obtenemos un fichero final cuyo contenido es:
Hola Mundo
Adios Mundo
(Palabras separadas por un tabulador)

Parece que no, pero puede ser útil este comando, y con lo sencillo que es, me parecia raro no haber oido hablar de él.

También tuve que lidiar con la búsqueda de expresiones regulares de forma un-greedy (o non-greedy). ¿Qué es esto? Lo veremos también claro con un ejemplo. Imaginemos que tenemos la siguiente string: inicio intermedio fin basura basura fin y queremos obtener lo que hay entre inicio y fin (el primer fin, no el último). Usando expresiones regulares, podriamos pensar en algo así:

grep 'inicio.*fin' -o archivoCualquiera (el -o es para que nos muestre todo lo que abarca esa expresión regular. Es decir, que nosotros queremos: “inicio intermedio fin basura basura fin“, pero en lugar de eso, nos devuelve “inicio intermedio fin basura basura fin“. ¿Pero por qué? Porque primero busca “inicio”, después busca todos los carácteres posibles (todos los que simbolizan el punto) y cuando ya los tiene todos, se pone a buscar hacia atrás (de izquierda a derecha) “fin”. En otras palabras se podría interpretar con que empieza a buscar “inicio” por la izquierda y “fin” por la derecha, y muestra todo lo que hay de por medio.

El caso es que yo no quería esto. Yo quería que empezase a buscar por la derecha, y siguiese buscando desde ese momento hacia la derecha. De esta forma obtendríamos el “inicio intermedio fin basura basura fin“. Pues bien, este método de buscar se llama non-greedy o un-greedy, y nativamente, bash no lo permite y digo nativamente, porque grep tiene un parámetro que nos permite usar expresiones regulares de Perl y este sí que permite hacer lo que buscamos.

Solución final: grep -P 'inicio.*?fin' -o archivoCualquiera

Simplemente añadiendo un símbolo de interrogración tras el asterisco.

Volviendo al tema del script, mencionar que he usado la API de twitter que podeis encontrar aquí: https://dev.twitter.com/docs/api
Un apunte: Twitter permite como máximo 150 peticiones por hora por IP. Parecen suficientes o incluso muchas, pero innumerables veces me ha saltado el error de que he excedido el límite.

Por otra parte, al re-programarlo en PHP y al tratarse de que las respuestas vienen dadas en formato JSON, éste tiene una función que ayuda mucho: json_decode. El resultado no se trata como una matriz cualquiera, así que hablaré un poco. Por un lado, miraremos la estructura de esto. Para acceder a las propiedades del primer nivel sería tan fácil como:

$objeto = json_decode($cadena_json);
echo $objeto->{'created_at'}; //Ejemplo de acceso a un primer nivel
echo $objeto->{'user'}->{'name'}; //Ejemplo de acceso a un segundo nivel

De esta forma podemos acceder individualmente. Para ver todo el contenido de la petición es todavía más sencillo:

$objeto = json_decode($cadena_json);
var_dump($objeto);

Insisto en que lo probeis y me comentéis algo: http://old.delanover.com/twitter

Un saludo, lipman

¿Cuánta información lleva un tweet? y los identificadores de Twitter

Otro post más acerca de Twitter.. debe ser que estoy tan enganchado que no puedo pensar en otra cosa. Esta vez, quisiera hablar de los identificadores a la vez que averiguamos el contenido de un tweet (que, a pesar de lo que pueda parecer, no es poco precisamente).

Los identificadores numéricos nos permiten poner un orden a nuestra base de datos usándolos como Primary Key, sin embargo el usuario normal no necesita conocerlos para nada, así que no es un dato explícito tal y como lo sería nuestro nick en un foro por ejemplo.

Primero de todo, vamos a obtener el ID de un tweet, que es un procedimiento (si se puede llamar así) bastante sencillo, y para ello, hay que poner el ratón sobre el indicador del tiempo de cúando se envió el tweet.

Ahora sencillamente, mediante cualquier herramienta con la que podamos usar cURL (ya sea desde la consola de Linux o desde el Cygwin con Windows, o con PHP..) o incluso poniendo la URL en nuestro navegador (que nos pedirá de descargar un archivo .json el cual podremos abrir con cualquier editor de texto) hacemos una petición a al siguiente enlace: http://api.twitter.com/1/statuses/show.json?id=XXXXXXXXXXXXXX en donde XXXX.. es la ID del tweet.

Nos devolverá el siguiente resultado:
{“geo”:null
“coordinates”:null
“retweeted”:false
“in_reply_to_status_id_str”:null
“in_reply_to_user_id_str”:null
“retweet_count”:0
“contributors”:null
“user”:
—{“follow_request_sent”:false
—“verified”:false
—“profile_background_image_url_https”:”https:\/\/si0.twimg.com\/images\/themes\/theme1\/bg.png”
—“profile_link_color”:”0084B4″
—“protected”:false
—“following”:false
—“profile_sidebar_border_color”:”C0DEED”
—“followers_count”:106
—“location”:”Burgos, Espa\u00f1a”
—“name”:”Juan Miguel Lipman”
—“default_profile”:true
—“favourites_count”:10
—“profile_use_background_image”:true
—“utc_offset”:3600
—“url”:”http:\/\/delanover.com”
—“description”:”Otaku. Computer Engineering student. PHP+MySQL Developer. Fedora user. Rammstein lover (as EBM, NDH and Melodic Death Metal music).”
—“listed_count”:6 —“time_zone”:”Madrid”
—“profile_background_color”:”C0DEED”
—“screen_name”:”jmlipman”
—“contributors_enabled”:false
—“notifications”:false
—“profile_background_image_url”:”http:\/\/a0.twimg.com\/images\/themes\/theme1\/bg.png”
—“id_str”:”103288301″
—“show_all_inline_media”:false
—“geo_enabled”:true
—“lang”:”es”
—“created_at”:”Sat Jan 09 14:55:42 +0000 2010″
—“profile_text_color”:”333333″
—“default_profile_image”:false
—“profile_sidebar_fill_color”:”DDEEF6″
—“profile_image_url”:”http:\/\/a1.twimg.com\/profile_images\/1307866230\/MWSnap062_normal.jpg”
—“statuses_count”:9368
—“profile_background_tile”:false
—“friends_count”:84
—“profile_image_url_https”:”https:\/\/si0.twimg.com\/profile_images\/1307866230\/MWSnap062_normal.jpg”
—“id”:103288301
—“is_translator”:false
}
“in_reply_to_user_id”:null
“in_reply_to_status_id”:null
“id_str”:”118319553267761152″
“truncated”:false
“created_at”:”Mon Sep 26 13:42:34 +0000 2011″
“place”:null
“favorited”:false
“source”:”web”
“id”:118319553267761152
“in_reply_to_screen_name”:null
“text”:”Tweet de prueba para un post sobre Twitter en #Delanover”
}

Igual después de ver todo esto entendemos la cantidad de herramientas que hay para twitter que te dicen cosas como de dónde son tus followers o cuanto tiempo de antigüedad tiene la cuenta de twitter.

Para obtener el los datos de un usuario dado una ID (del propio usuario obviamente) simplemente tendriamos que mandar una petición del tipo: http://api.twitter.com/1/users/show.json?id=XXXXXXX.

Y para recorrer el camino inverso, es decir, obtener el nombre de usuario a partir de una ID, simplemente sería cambiar el ID de antes por ‘screen_name=nick’ de forma que quedaria: http://api.twitter.com/1/users/show.json?screen_name=NICK

En general, disponemos de un listado interesante de peticiones que podemos realizar, que como dije es el que usan muchas aplicaciones, justo aquí.

Análisis de tráfico en las aplicaciones de Twitter más “seguras” para Android

Parte 1
Parte 2

En relación al post acerca de la seguridad de nuestros tweets pudiendo ser atacados por un MitM, he decidido analizar el tráfico de datos generado por cada una de las cuatro aplicaciones que usaban SSL para transmitir los tweets y alguna otra información. La verdad es que me he llevado una sorpresa un tanto desagradable, puesto que no hay ninguna que sea segura en su totalidad.

Las aplicaciones analizadas son: Twitter (Oficial), TweetDeck, Seesmic y HootSuit. Tienen en común estas aplicaciones, que se pueden acceder a ellas y ver los tweets cargados anteriormente, junto con lo que esto conlleva (avatares, biografias…). Esto quiere decir que esta información está guardada dentro del teléfono y cada vez que nos conectamos a Internet se va actualizando y reemplazando. Esto es un tanto obvio la verdad. Lo que también deberia ser obvio, es que para el transporte de estos datos, de Internet al telefono, se hiciese todo mediante el protocolo seguro y no es así.

Por un lado, las cuatro aplicaciones cargan los avatares que posteriormente son guardados en el teléfono sin usar SSL, así que con un MitM podriamos sacar todos los avatares.

La otra falta de seguridad que comparten las cuatro aplicaciones son que, si subimos una imagen desde la aplicación para twittearla junto con nuestro estado, esta imagen también se puede recuperar al realizar un ataque MitM y cualquiera que esté escuchando, podria obtenerla, al contrario que en la versión web de Twitter, que si subimos una imagen, no se puede obtener (en la versión segura claro está).

Twitter (Oficial)

Como anteriormente dije, se pueden obtener los avatares que se cargan en la aplicación:

Cabe destacar que la recuperación de tweets, privados, menciones, búsquedas, listas, y todo en general, se hace a través de SSL, por lo que no podrán leer lo que escribimos o recibimos.

Sin embargo, como anteriormente también dije, si que podemos recuperar una imagen que subamos a Twitter directamente desde la aplicación, como podemos ver a continuación:

Finalmente, añadir que otro dato que también podemos recuperar con total precisión, es la geolocalización, es decir, la localización que se recupera al usar el propio GPS del teléfono móvil para posteriormente incluirla en los tweets. Como podemos ver, recuperamos las coordenadas que luego las ponemos en GMaps y tan tranquilamente vemos el sitio, aunque ciertamente poco sentido tiene si esto se realiza en un MitM puesto que al realizarlo en un entorno controlado, ya sabemos donde está.

TweetDeck

Al sincronizar todo por primera vez, como con todas las aplicaciones, se transfieren los avatares, incluso podemos ver que llega un paquete cuyo host es: tracking.tweetdeck.com y realiza una petición GET a la siguiente URL: /track/add_account?cl=android&tw=103288301&tz=120&v=2 de la obtenemos el número identificador de la cuenta de twitter (se hablará sobre esto en otra entrada).

Al actualizar la timeline, tweets de perfiles, privados y demás, se realiza todo mediante SSL, aunque cada 15 minutos (configurable) al actualizarse automáticamente, podemos interceptar un paquete sin tampoco demasiada importancia aunque con ciertos datos, cuyo contenido también es una petición GET de URL /track/ping?android-model=MT15i&android-sdk=2.3.3&cl=android&interval=900&tw=103288301&tz=120&v=2&ver=1.0.7.3. Aparecen el identificador, el modelo, versión de Android y el intervalo de tiempo.

Por otro lado, al subir una imagen, podemos recuperarla al igual que con la aplicación anterior, pero no solo eso, sino que también disponemos del link de la subida que se ha generado, como podemos ver:

Otra característica curiosa que tiene TweetDeck es la posibilidad de traducir tweets o biografias, pero esto tampoco pasa por SSL y es totalmente transparente, por lo que podemos ver el mensaje traducido y el original:

Por último, al agregar y desagregar de favoritos, recibimos los identificadores de los tweets que nos sirven para saber qué tweet hemos añadido o no, también en texto plano.

Como podemos ver, tenemos el identificador del tweet 104311621911982080. De esto también se hablará próximamente.

Seesmic

Al sincronizar por primera vez nuestra cuenta de twitter, además de recoger los avatares de los usuarios, podemos obtener nuestra descripción y último tweet. Al subir una imagen, además de poder recuperarla como en las demás aplicaciones, podemos ver el enlace generado junto con nuestro nombre de usuario e identificador.

Por otra parte, en un paquete de datos, vemos que alguna información es guardada en la siguiente ruta de nuestro teléfono: /sdcard/ANdroid/data/com.seesmic/stats.txt

HootSuit

Esta, es la más insegura de las cuatro sin lugar a dudas: cierto es que los tweets y privados que enviamos se hace a través de la capa segura, pero al actualizar de forma automática (cosa que hace cada 300 segundos) o de forma manual, son totalmente visibles los tweets de nuestro timeline, de nuestro usuario, y nuestros privados. Además, al sincronizar por primera vez también aparecen algunas cookies interesantes junto con nuestra descripción.

Y por supuesto, al subir alguna imagen, también la podemos obtener junto con el enlace en donde se ha subido:

Conclusión

Tristemente, no hay ninguna aplicación segura en su totalidad, pero si de alguna manera tuvieramos que ordenarlas por orden de más seguro a inseguro, seria el siguiente:

Twitter (Oficial) > Seesmic > TweetDeck > HootSuit

Resumen:
–>Todos:
-Recuperación de avatares.
-Recuperación de imágenes subidas al enviar tweet.

–>Twitter (Oficial):
-Recuperación de coordenadas al usar el GPS para ubicarnos.

–>TweetDeck
-Enlace de la imagen subida
-Sistema Operativo, versión y modelo del teléfono.
-ID del tweet que faveamos o desfaveamos.
-Nuestro ID identificador de twitter.
-Obtención de los tweets que traducimos (ambos, el original y el traducido).

–>Seesmic
-Enlace de la imagen subida.
-Nuestro ID identificador de twitter.
-Nuestro nombre de usuario de twitter.
-Sistema Operativo, versión y modelo del teléfono.

–>HootSuit
-Obtención de cookies interesantes.
-Enlace de la imagen subida.
-Obtención de los tweets de nuestro timeline, perfil y privados (junto con información de los usuarios).

Un saludo, lipman

Seguridad en las aplicaciones de Twitter para Android

Parte 1
Parte 2

Desde mi reciente adquisición de un teléfono móvil con Android (más concretamente el Xperia NEO) no he parado de usarlo y descubrir cosas sobre él, ya que era la primera vez que tenia un Android en mi poder (un poco tarde, lo sé). Como soy un adicto al Twitter y no estoy sujeto a una tarifa de datos 3G, siempre que veo una red abierta velozmente activo el Wifi para ver las novedades de mi red social favorita como no (y aquí algunos nos daremos por aludidos, verdad?).

Además de eso, como me gusta probarlo todo (las aplicaciones) para luego poder elegir, busqué por Internet aplicaciones para Twitter y demás, y me topé con un post que listaba un top 10 de tales aplicaciones.

Por ello, me dispuse a instalarme las ocho que me faltaban (ya que siempre he usado la oficial, y la última de la lista la descarté), y tras realizar un MitM entre el dispositivo y el router, pude comprobar que solo cuatro de ellas transmiten los tweets por SSL:

Aplicación ¿SSL?
Plume NO
Tweetdeck SSL
Twicca NO
Twitter Oficial SSL
TweetCaster NO
Twitdroyd NO
Seesmic SSL
HootSuit SSL
TweetTopics NO

Así que si sois de los que nada más detectais una red Wifi abierta os conectais y no os importa correr el riesgo de lo que pueda pasar, al menos usad un cliente de Twitter que use SSL para enviar los tweets.

Un saludo, lipman