lunes, 28 de febrero de 2011

Selección de noticias de la semana 28/02/2011

Aquí está la selección de noticias de estas dos últimas semanas.

eAdministración:
Ciencia:
Tecnología:
Programación:
Matemáticas:
Humor y Curiosidades:

jueves, 24 de febrero de 2011

Mi primer análisis forense: recuperando fotos borradas de un iPhone


Estos días me he enfrentado con un amigo a un reto apasionante a la vez que estresante. Alguien había borrado unas fotos importantes de un iPhone 4, y necesitaba recuperarlas. La historia ha sido toda una odisea, aquí os cuento los pasos que dimos (se hizo todo en cuatro tardes/noches, no teníamos más tiempo e íbamos contra-reloj).

Fase 1: Jailbreak y Dump de disco
Lo primero que se hizo fue un Backup del iPhone utilizando iTunes, por si se perdían el resto de datos intentando recuperar las fotos borradas.
Después de investigar sobre el tema, se decidió proceder a realizar un jailbreak del iPhone, para intentar volcar todo el contenido de su disco interno y así tratar de recuperar las fotos.
Se realizó el jailbreak utilizando cynthia y nos conectamos a él según se indica aquí, es decir, montando un servidor ssh en el iPhone y conectándonos a él por Wifi (aquí está bien explicado, la password de root es alpine).
Como no conseguimos volcar toda la imagen de disco por Wifi (se desconectaba cuando llevaba unas megas), realizamos un tunnel para conseguir el volcado a través de USB.
Con esto se consiguió volcar el contenido de la partición de usuario (unos 15 Gb) a una imagen iso, y aquí comenzó la segunda fase.

Fase 2: Abrir la imagen de la partición e intentar recuperar las fotos
Una vez que teníamos la imagen de la partición, estuvimos viendo cómo poder abrirla e intentar recuperar las fotos. Después de investigar bastante, descubrimos que la partición está en formato HFS+, por lo que puede montarse en un Linux y tratar de recuperar los datos de ahí.
Probamos decenas de utilidades para tratar de recuperar las fotos borradas, pero ninguna era capaz de hacerlo. Entre otras muchas, probamos con photorecsleuthkit y autopsy, pero lo más que conseguimos fue sacar los ficheros ya existentes. También conseguimos sacar archivos existentes utilizando HFSExplorer en Windows, montando la imagen como si fuese un disco. Sin embargo, al examinar alguno de los ficheros que habíamos sacado (fotos que no se habían borrado), vimos que no se podían abrir. Hicimos también una aplicación en Java que fuese mirando sector a sector (cada 512 bytes), buscando la cabecera típica de los archivos JPG, pero no encontramos nada. Y no encontramos nada por lo mismo que no se podían abrir los archivos que extrajimos con autopsy o HFSExplorer, y es que el iPhone 4 encripta por hardware el contenido de todos los ficheros que almacena en el disco, por lo que aunque consigas sacarlos no hay manera de desencriptarlos. Se explica así en este thread, en el que se dice que tiene que ver con un sistema de encriptado hardware, y un archivo llamado "".
En este momento desistimos de tratar de recuperar las fotos borradas, porque aunque fuésemos capaces de extraerlas de la imagen del disco que habíamos hecho, no habría forma de desencriptarlas. ¿Y ahora qué?

Fase 3: Recuperar los thumbnails de las fotos
Como no podíamos recuperar las fotos borradas, pensamos que tal vez pudiésemos recuperar los thumbnails (las miniaturas) de las fotos que almacena el iPhone en su caché, y que milagrosamente no hubiese refrescado estas miniaturas después de borrar las fotos (se apagó el teléfono justo después de borrarlas). Buscando con el HFSExplorer en la imagen de la partición de usuario, encontramos dos archivos que podrían contener lo que buscábamos, los ficheros "120x120.ithmb" y "158x158.ithmb", además del fichero "thumbnailconfiguration" según se muestra en esta imagen:
Recuperamos esos tres ficheros de la imagen, pero al igual que el resto de ficheros que habíamos logrado extraer estaban encriptados. Sin embargo ya sabíamos dónde estaban los ficheros que queríamos, así que pensamos que tal vez conectándonos por ssh al iPhone y utilizando scp para traernos los ficheros, el iPhone se encargase de dárnoslos ya desencriptados. Y así fue, ya que trayendo los ficheros de los thumbnails por ssh vimos que el fichero thumbnailconfiguration estaba en formato legible (xml), y contenía esto:
¿Pero en qué formato estaban los archivos con extensión ithmb?

Fase 4: Recuperar las fotos a partir de los thumbnails
Buscamos en cientos de sitios para saber cómo convertir el fichero ithmb a jpg o a algún formato de fotos legible, pero no hubo manera (ni siquiera con aquellos programas como iThmbConv.exe que prometían hacerlo). ¿Y ahora qué? ¿En qué formato está un archivo con extensión ithmb y cómo conseguimos abrirlo para ver las fotos?. La pista nos la dio este post en el que un tipo prometía que había conseguido abrir un fichero de thumbnails con photoshop, tratándolo como un fichero raw con 16 bits de profundidad de color.
Hicimos una primera prueba, intentando abrir el archivo "158x158.ithmb" con las siguientes opciones:
Parece que nos íbamos acercando, porque aunque no se veía mucho, en lo que apareció se podía distinguir una imagen desplazada:
Parecía claro que el ancho no era 158, pero se aproximaba. Después de muchas otras pruebas abrimos la imagen con 160 píxels de ancho y apareció ante nosotros la primera imagen visible. ¿Y dónde estaban las otras?. Cambiamos el alto a 10000 pixels y empezaron a aparecer el resto de imágenes, unas debajo de otras, pero aparecían cada vez más desplazadas hacia la derecha:
Nos dimos cuenta de que esto era porque entre imagen e imagen parecía haber una cabecera, que era lo que hacía que la siguiente foto apareciese desplazada. Entonces hicimos un programa en Java para tratar el fichero ithmb y quitarle esas cabeceras. Después de mucha prueba y error (y de mucho visor hexadecimal para tratar de ver los patrones entre fotos) conseguimos eliminar las cabeceras con este pequeño programa en Java:


Y así, después de procesar el fichero raw con este programa, conseguimos quitar el ruido de los thumbnails y abrir el archivo con Photoshop, que por fin nos mostró todas las fotos colocadas unas debajo de las otras:


Y con esto, por fin, conseguimos recuperar las (miniaturas de) las fotos que se habían borrado. Fue suficiente con las miniaturas, pues tienen un tamaño de 158x158 pixels, con lo que se apreciaba bastante bien el contenido de las fotos:

Toda una odisea, pero después de muchos quebraderos de cabeza, dos noches casi sin dormir, cerca de treinta herramientas probadas, dos programas en java y un entendimiento preciso del sistema de ficheros HFS+... PRUEBA SUPERADA!

viernes, 18 de febrero de 2011

Segundo día en el Spring I/O 2011

#springio



Hoy he estado en la segunda jornada del Spring I/O 2011, asistiendo a las charlas del Track 2 (siguiendo con temas de Spring). Sólo he estado hasta el mediodía, así que he me he perdido las dos charlas de por la tarde.
Os comento mis conclusiones sobre las cuatro charlas a las que he asistido (las fotos de arriba son de ayer, hoy no he tirado):

In search of the grail of developer productivity - A Grails roadmap update (Graeme Rocher)
Charla del que es la cabeza visible del desarrollo en Grails para SpringSource. La verdad es que no he programado en Grails por lo que me he perdido un par de veces en la charla. Me ha gustado la pequeña demo de Spring Insight para monitorizar los beans del contexto de Spring.
En la charla se ha hablado sobre el futuro de Grails (Grails 2.0 está previsto para diciembre de este año).


Aplicaciones web ultraescalables con Redis (Alberto Gimeno)
Me ha encantado esta charla, la mejor con diferencia. He aprendido el uso básico de Redis de la mano de Alberto, que se ha pegado con esta base de datos NOSQL que permite hacer 100.000 operaciones en un segundo sin pestañear. Se trata de una base de datos basada en pares clave-valor al más puro estilo tablas hash. La principal ventaja es que es super rápida y escala hasta el infinito. Las desventajas: que como desarrollador tienes que implementar toda la lógica (hasta la de búsqueda), y que no es óptima para operaciones del estilo "LIKE" de SQL (ni por supuesto para Full Text Search).
Muy interesante la futura aparición de Redis Cluster, que va a permitir crear/eliminar nodos en caliente. Por ahora hay que conformarse con Redis Sharding, que nos obliga a hacerlo en frío con el servidor tirado.
Me ha encantado la arquitectura minimalista de esta base de datos, que por defecto guarda todo en RAM (aunque existe DiskStore para gestionar lo que se almacena en disco y/o en memoria).
Sus tres recomendaciones para cuándo usar Redis:
  1. Como caché de memoria (al estilo memcache, pero aprovechando que se tiene persistencia, soporte para expiración y estructuras de datos).
  2. Como Base de Datos auxiliar para cuando se necesita mucha velocidad
  3. Como Base de Datos principal (aquí creo que la decisión depende mucho del proyecto, en aplicaciones de gestión como las que hacemos en la Comunidad de Madrid, en las que hay búsquedas por la mayoría de los campos - al estilo LIKE - no lo veo viable).

Spring Mobile y Spring Android: Spring y el desarrollo para móviles (Daniel Jiménez Pérez)
Aunque Dani ha empezado algo nervioso, luego la charla ha ido rodada.
Se han expuesto las razones por las que uno debería plantearse una versión especial de su website para móviles:
  • Por el tamaño reducido de la pantalla - no se puede asumir que el cliente tiene una gran resolución.
  • Por la diferencia del dispositivo de apuntado (ratón vs dedo) - no hay que poner las cosas muy juntas.
  • Por el límite de ancho de banda de algunos dispositivos móviles - no hay que poner imágenes, html o css que pesen mucho.
Luego se ha hablado sobre la eterna duda: ¿Detectar el dispositivo en cliente o en servidor? Parece que Daniel tenía claro que es mejor utilizar, cuando se pueda, la detección en servidor.
Luego se ha hablado sobre Spring Mobile y Spring Android, por ahora están un poco verdes y ofrecen funcionalidad bastante limitada (en idealista todavía no lo usan en producción, están haciendo pruebas).


Spring Web Services: REST vs. SOAP (Sam Brannen)
Sam Brannen (que por cierto hablaba rapidísimo en inglés, a veces me he perdido), ha empezado contando los principios de los servicios web, y las dos aproximaciones (Contract Last o Contract First). Luego ha estado explicando cómo pueden hacerse servicios web con Spring+REST y Spring+SOAP, y ha mostrado un ejemplo con REST (no le ha dado tiempo a mostrar el de SOAP).
Parece que bastante gente utiliza servicios web con Spring. En la Comunidad de Madrid no utilizamos actualmente Spring MVC, para servicios web (tanto la parte cliente como la servidor) utilizamos Axis2. Me ha gustado la configuración con anotaciones (tanto con REST como con SOAP).

Esto ha sido todo, la verdad es que han sido dos días muy productivos. Espero poder asistir de nuevo el año que viene.

jueves, 17 de febrero de 2011

Conclusiones del primer día en el Spring I/O 2011

#springio
Estas son mis conclusiones sobre el primer día del Spring I/O (he asistido a las charlas del Track 1 - Spring). La verdad es que ha sido un día intenso, se ha hecho un poco largo pero ha merecido la pena.

Spring in 2011 and Beyond: From Java EE 6 to Cloud Computing (Juergen Hoeller)
Interesante conferencia de uno de los padres de Spring. Básicamente ha tratado tres temas:
  1. Tendencias del mercado a las que el framework tiene que dar respuesta:
    • Fuentes de datos que no están en bases de datos relacionales
    • Cachés distribuidas (Genfire, Coherence)
    • Gran variedad de clientes web, y paso de la lógica de presentación a la capa del browser
    • Java SE 7 y la programación concurrente (preparando las aplicaciones para el cloud computing). ForkJoinPools.
  2. Posicionamiento de Spring en 2011. 
  3. Nuevas funcionalidades en Spring framework 3.1 (la semana pasada ha salido un milestone):
    • Perfiles para poder configurar beans por entornos
    • Abstracción de cachés y anotaciones para cacheo de objetos
    • Gestión del nivel de conversación en aplicaciones web (por ejemplo el "conversation" scope para JSF). Interesante para distinguir sesiones entre pestañas del navegador.
TBD Escuela de Groovy
Pequeña charla marquetiniana de uno de los patrocinadores. Han hablado sobre sus líneas estratégicas para el 2011:
  1. Evangelización
  2. Partnerships
  3. Formación
  4. Soporte 
Supongo que de estos dos últimos es de donde viene el ROI del negocio, los otros son para divulgar y establecer una red de partners (de formación, según he entendido).

Spring Data (Costin Leau)
Se ha hablado sobre algo que no conocía. Spring Data se trata de varios módulos de Spring para intentar estandarizar el acceso a bases de datos NOSQL (Not Only SQL). Se ha hablado sobre cuatro subáreas de Spring Data, para:
  1. Fuentes de Datos Clave-Valor (Ej: Redis)
  2. Fuentes de Datos de Mapeo de Objetos.
  3. Fuentes de Datos de Documentos (Ej: MongoDB)
  4. Fuentes de Datos de grafos (Ej: Neo4j)
  5. Spring Hadoop (para Apache hadoop)
Spring AMQP (Sergi Almar)
No conocía Spring AMQP, un sistema de mensajería similar a JMS, pero independiente del lenguaje (en realidad se trata de un protocolo, no de un API). Existen varias implementaciones de AMQP, una de ellas adquirida por SpringSource (RabbitMQ)

Effective out-of-container Integration Testing (Sam Brannen)
Esta charla me ha parecido interesantísima, igual que la siguiente. En esta se hablaba sobre el uso de Spring TestContext para simular las dependencias externas de la aplicación en un entorno de producción (es decir, para poder hacer pruebas de integración en un entorno de desarrollo sin tener que tener acceso a las dependencias externas). Para ello, se ha hablado de varias librerías Open Source que nos permiten simular las dependencias externas de varios tipos:
  1. Servidores de BBDD: HSQLDB, H2, Derby, etc.
  2. Servidores JMS: ActiveMQ
  3. Servidores SMTP: Dubster SimpleSmtpServer
  4. Servidores FTP: MockFtpServer
  5. Contenedor de Servlets: Jetty/Tomcat en modo embebido de Spring, o el plugin de jetty para maven (el que utilizamos en el framework ATLAS).
Pruebas de aplicaciones web con Selenium 2 y Webdriver (David Gomez)
También muy interesante. En ATLAS utilizamos Selenium 1, pero desconocía la versión de Selenium 2 integrada con WebDriver. Me ha encantado el "Page Object Pattern", creo que es la mejor idea que me llevo del día de hoy.

Spring Social (Federico Caro)
No sé si es por lo tarde que era, pero en mi opinión Federico se ha explicado como un libro cerrado (se ve que es muy buen tecky, pero creo que se ha liado un poco dando la charla). Spring Social es un módulo muy reciente que permite integrarse con las redes sociales de manera estándar. Actualmente existen implementaciones para Twitter, Facebook, LinkedIn, y TripIt. Por lo que he visto está todavía un poco verde.

Spring Puzzlers (Erick Camacho & Sergi Almar)
Muy buena idea, someter al público a una serie de problemas típicos con Spring. Se han planteado cuatro "puzzles" muy bien orientados. 
  1. El primero de ellos trataba sobre una variable estática que por tanto no puede inyectarse. 
  2. El segundo sobre un error al inyectar una dependencia causado por el proxy que mete Spring para tratar las transacciones. Pasaba por trabajar con objetos de la implementación en lugar de la interfaz (error de diseño).
  3. El tercero sobre las llamadas que se hacen al proxy de AOP, y cómo no se llama al proxy si la llamada es desde dentro del propio objeto. Además los aspectos de Spring AOP sólo funcionan sobre beans que estén dentro del contexto de Spring, no sobre todos los objetos.
  4. El cuatro sobre las anotaciones de transacciones, y el "REQUIRES_NEW", que crea una nueva transacción por lo que al hacer rollback de la principal, no se hacía de la hija.
Me han gustado mucho los cuatro (tres los sabía, pero he fallado el primero porque no sabía que no se podían inyectar valores a atributos estáticos).

En conclusión, ha sido un día muy productivo en el que he aprendido mucho, me llevo muchas y muy buenas ideas para implementar en el framework ATLAS.

Hoy estaré en el Spring I/O


Hoy y mañana acudiré al evento Spring I/O que se celebrará en la EPS de la Universidad CEU San Pablo. Como arquitecto de software para Informática de la Comunidad de Madrid, parte de mi trabajo consiste en estar al día de las tecnologías de desarrollo de aplicaciones. El nuevo framework para el desarrollo de aplicaciones en la Comunidad de Madrid que estamos a punto de liberar (framework ATLAS, al que pronto dedicaré un post) se basa principalmente en tres tecnologías: Spring, JSF e Hibernate.
Esta tarde os contaré qué tal ha ido el evento, aquí está la agenda para el día de hoy:


viernes, 11 de febrero de 2011

Selección de noticias de la semana 11/02/2011

Aquí tenéis la selección de noticias de esta semana, clasificada por temas:

eAdministración:
Ciencia:
Tecnología:
Programación:
Humor y curiosidades:

miércoles, 9 de febrero de 2011

Acertijo: ¿Cuántos cuadrados hay en la imagen?

Vamos a ver si sois capaces de adivinar cuántos cuadrados hay en esta imagen (ojo, digo cuadrados y no rectángulos).

¿Quién se anima?

martes, 8 de febrero de 2011

Vídeo: Andador para hamsters

Interesante este aparato que aprovecha la energía que genera un hamster al andar en una esfera para darle una vueltecilla y llevarle a ver mundo.

Visto aquí.

lunes, 7 de febrero de 2011

Vídeo: ¿Qué pasaría si pusieses palomas o gatos en gravedad cero?

Curiosos estos experimentos de la fuerza aérea de los Estados Unidos para ver el comportamiento de palomas y gatos a gravedad cero (como si estuviesen en el espacio).
Los gatos están despistados, pero las palomas las pobres...



Visto en fogonazos.

domingo, 6 de febrero de 2011

Selección de noticias de la semana 06/02/2011

Como cada semana, aquí está la selección de noticias y posts interesantes:
eAdministración:
Ciencia:
Tecnología:
Programación:
Humor y Curiosidades:

Vídeo: Aterrizando en Los Ángeles desde la cabina de un avión

Grabado por el piloto de un avión que aterriza en Los Ángeles al atardecer.

Visto aquí

Vídeo de una tribu jamás contactada por la civilización

Lo leí hace poco en cooking ideas, y ahora he visto el vídeo de esta tribu amazónica que jamás ha sido contactada por la civilización. En estas imágenes tomadas desde una avioneta, se les ve señalando hacia el cielo a ese "aparato volador" que sus mentes son incapaces de concebir.

Parece ser que hay 67 tribus separadas en la selva amazónica que nunca han tenido contacto con el mundo exterior.

viernes, 4 de febrero de 2011

miércoles, 2 de febrero de 2011

Vídeo: Congelando pompas de jabón

Lo he visto en Microsiervos y me ha gustado, unos tipos que hacen las típicas pompas de jabón, pero a temperaturas de entre -28ºC y -33ºC. Lo mejor al final del todo, cuando el tipo coge una pompa congelada con la mano y "se la come":