viernes, 21 de febrero de 2014

Solución al desafío 25 de ESET Latinoamérica


por ThE InSpEcToR

Hoy se cumple una semana desde la publicación del desafío 25 de ESET y esta entrada se dispone a compartir el como llegué a la solución.

El reto dice: "Te dejo el mapa con la “info” de las torres de celular" y efectivamente la imagen tiene marcadas dos torres de celular, sin embargo, esta información no es suficiente, así que procedí a guardar una copia de la imagen, de la cual lo primero que se observa es que se encuentra en formato jpg, y si se abre el archivo con un editor hexadecimal se puede observar al final una cantidad de bytes que no corresponden al formato de la imagen, dado que esta debe terminar con la secuencia 0xFFD9.



Tomando los bytes que le siguen y guardándolos aparte, se obtiene un archivo cuyos primeros bytes son 0x504B, lo que indica que es un archivo comprimido en zip, que al intentar descomprimirlo, pregunta por una contraseña, si se mira el archivo zip con el editor hexadecimal se pueden ver al final una secuencia de bytes que no pertenecen al formato:


Usando la pagina md5decrypter se puede obtener el texto plano del hash: password123, al ingresar la contraseña para descomprimir el zip se obtiene la "info", que corresponde a 4 archivos de texto que son:


El archivo notas dice que el tiempo de procesamiento de las torres y del celular se tomará como 0.
Los archivos de Log Torre1 y 2 tienen tiempos de comunicación entre un móvil y las torres.
El archivo triangulación tiene la url de una pagina que permite trazar un radio alrededor de un punto geográfico Free map tools.

La descripción del reto tiene las coordenadas de las dos torres:


Sin embargo, se encuentran en un formato de grados, minutos y segundos, mientras que la pagina espera esa información solo en grados, así que una función en Python para hacer la conversión podría ser:


Aplicando la función con las coordenadas suministradas se obtiene:

>>> gradminseg2grad('S',34,37,19.2)
-34.622
>>> gradminseg2grad('W',58,22,29.9)
-58.374972
>>> gradminseg2grad('S',34,37,57.1)
-34.632527
>>> gradminseg2grad('W',58,23,18.5)
-58.388472

La descripción del reto da la velocidad de la luz en microsegundos que es:

1μs -> 299792,458mm

Así que tomando el tiempo entre la comunicación de las torres y el móvil y teniendo en cuenta que el log de la torre mide el tiempo de ida y vuelta se debe dividir ese tiempo entre 2 para obtener el tiempo que tarda en llegar la info hasta el móvil, luego se multiplica por la distancia recorrida por la luz en un microsegundo y se obtiene:

μs entre el móvil y la torre uno
18,07918 / 2 = 9,03959
9,03959 x 299792,458 = 2710000,90541222

μs entre el móvil y la torre dos
17,27862 / 2 = 8,63931
8,63931 x 299792,458 = 2589999,980324

Por ultimo hay que tener en cuenta que esos datos están en milímetros, por lo que deben convertirse a km que es el formato que pide la pagina de triangulación, la pagina también permite cargar los datos en formato CSV, asi que el contenido con las coordenadas y el radio de la circunferencia quedaría:



La pagina genera dos circunferencias en el mapa donde hay dos puntos que cumplen con las distancias entre el movil y las dos torres, sin embargo la descripción del reto dice: "El punto de encuentro esta dentro del mapa" por tanto, de los dos puntos, el punto que se encuentra dentro del mapa es la "Plaza del Almirante Brown" el cual desde donde se originó la llamada y a su vez el punto para la reunión el día jueves a las 18:00h.






No hay comentarios.:

Publicar un comentario