Acerca de...
El equipo
Encuestas
Política de privacidad
WinTablets

Encuesta

¿Cual crees que triunfará?

Ver Resultados

Cargando ... Cargando ...

últimas entradas importantes

Categorías

Archivos

05
Jun 2012
Opiniones

Ingeniería inversa de una aplicación Metro: más fácil que nunca

[Ya sé que para este blog el tema es algo demasiado técnico, pero creo que vale la pena echarle al menos un vistazo rápido porque pone en peligro la seguridad de cualquier aplicación Metro.]

Andaba yo esta mañana mirando mis fuentes de noticias cuando me encuentro con esta entrada: Your Metro-style app needs protection and here is why.

En principio no me lo creí, o pensé que el contenido venía de versiones anteriores a la última Release Preview de Windows 8. Pero no, es completamente cierto.

Todos debéis saber que realizar ingeniería inversa a un programa escrito en .NET es cosa de minutos y es una tarea enormemente sencilla incluso si la aplicación está ofuscada. Si no lo está, podemos obtener el código fuente completo tal y como lo escribió el autor, y encima en el lenguaje que queramos.

Esto nos da un truco muy sencillo para usar código de terceros escrito en un lenguaje .NET que no conocemos. Tomamos el código a copiar, creamos una aplicación, le aplicamos un Reflector (que es como se llaman a estos programas) y obtenemos el código fuente en el lenguaje deseado, ya sea VB.NET, C# o incluso C++/CLI.

Si el programa está ofuscado la ingeniería inversa es algo más difícil, pero con un poco de práctica es posible convertir el resultado en algo legible. No obstante, si queremos copiar un bloque de código o ver cómo está hecha una cosa, no necesitamos más. Copiamos, pegamos y listo. A ver, no es tan fácil, pero un ofuscador de código lo único que hace es cambiarle el nombre a todo y allí donde es posible, separar o juntar cosas. Nada que un experto medianamente espabilado no pueda deshacer.

Pues bien, las aplicaciones Metro en Windows 8 todavía son más fáciles de desensamblar. Estoy intentando instalarme un programa de demo, pero todavía no sé cómo se hace localmente pese a tener el paquete listo para su instalación.

Mientras averiguo eso, podéis jugar un ratín como he jugado yo. Lo primero de todo es hacer que la carpeta “C:\Program Files\WindowsApps” esté visible. Para ello abrimos la ventana de Windows Explorer en el escritorio y en la opción “View” del menú, seleccionamos “Options”. Allí, en la pestaña “View”, marcamos “Show hidden files, folders and drives” y ya de paso, también “Hide extensions for known file types”, que no es imprescindible pero ayuda.

Ahora ya podemos ver la carpeta WindowsApps. Desde el explorador de Windows nos dice que no podemos entrar. Podríamos tomar control de la carpeta, pero al menos yo no lo he hecho, ya que abriendo una consola de comandos con permisos elevados podemos entrar y ver el contenido:

clip_image002

Vaya. Tenemos acceso a todas las aplicaciones Metro instaladas… Aunque podemos navegar por ellas desde la ventana de comandos, también podemos copiarlas a otro destino con el comando “xcopy <origen> <destino> /r/s”. Y eso es lo que he hecho. Me he movido el “Reader” de Microsoft.

Y ahora puedo entrar sin tocar nada de nada:

clip_image004

Interesante, ¿no? Tenemos archivos XAML, ejecutables, imágenes, metadatos, todos ellos al alcance de la mano. Dos pantallazos más:

clip_image006

clip_image008

Creo que es suficiente, ¿no?

Pues no, ahora vamos a abrir y desensamblar algún ejecutable. La aplicación Reader que hemos estado viendo parece ser que es binaria (luego volveremos sobre ello), pero por ejemplo la “BingFinance” es .NET pura y encima está sin ofuscar:

clip_image010

En la imagen de arriba vemos dos ficheros de dicha aplicación abiertos de… esto… piernas.

***

Pero todavía hay más. Vamos a echar un vistazo a un par de aplicaciones escritas por uno mismo. La primera es un SplitView en C++ tal y como sale del asistente de Visual Studio 2012RC. Entre otras cosas genera dos ficheros “ejecutables”. Un EXE tradicional, que es binario o al menos así lo parece, y otro con la extensión Winnmd y el mismo nombre. Este sí que es manejado, pero parece ser que sólo contiene las exportaciones a WinRT. Tampoco tengo claro qué es, aunque parece ser que WinRT necesita las exportaciones del programa y MS lo ha solucionado de esta manera. En fin, aquí esta:

clip_image012

Ahora veamos la misma aplicación tomada del asistente de C#. En este caso sólo hay un ejecutable, el propio programa que es desensamblable por completo:

clip_image014

***

¿Os mola? A mi nada de nada. Esperemos que Microsoft se ponga las pilas con esto, porque si no mal vamos.

Por RFOG | 11 Comentarios | Enlaza esta entrada

10 Comentarios

Quique
Enviado el 05/06/2012 a las 17:39 | Permalink

Muy interesante.

¿Significa esto que si yo hago mi super complicada aplicación de pedos al cabo de un tiempo todos pueden hacer la misma aplicación con distinto nombre?

¿Quiere decir que Metro es parte del movimiento open source?

    RFOG
    Enviado el 05/06/2012 a las 17:45 | Permalink

    Si no lo cambian, sí a la primera si no la hacen con C++/CX, que va a ser que no porque los programadores (sobre todos los malos) huyen como de la peste del C++…

    La segunda, bueno, ejem, la dejamos abierta. :-P

Quique
Enviado el 05/06/2012 a las 17:41 | Permalink

Casi lo olvido ¿Vamos a poder hacer nuestras propias versiones de Word, Excel, etc.? ¿Cómo impiden estas grandes aplicaciones de Office metrificadas que terceros desarrolladores accedan a su código?

    RFOG
    Enviado el 05/06/2012 a las 17:47 | Permalink

    Quiero creer que no se va a poder, porque Office es nativo al escritorio. Es decir, hasta la versión para Metro en ARM es nativa de escritorio y no de Metro.

    Y como he comentado antes, al parecer si se hace en C++/CX sólo queda «reversible» el API público o de importación, que no es del todo malo.

Enviado el 05/06/2012 a las 18:00 | Permalink

Bueno, este problema se tiene también con las aplicaciones .NET normales (no Metro) en Windows de escritorio y en Windows Mobile, y supongo que en Windows Phone. Y por supuesto también es una pega de las aplicaciones Java, en Android por ejemplo. Pero la moda parece estar en lo «managed» en contra de lo nativo.

Quique
Enviado el 05/06/2012 a las 18:12 | Permalink

Para los novatos como yo ¿qué es «managed»? y a ¿qué se refieren cuando distinguen a «nativo» de otra cosa?.
¿.NET es una especie de intermediario entre la aplicación y el sistema operativo? Gracias.

    RFOG
    Enviado el 05/06/2012 a las 18:13 | Permalink

    Espera, que estoy escribiendo una entrada nueva menos técnica sobre todo esto.

      Quique
      Enviado el 05/06/2012 a las 18:17 | Permalink

      Muchas gracias.

      Quique
      Enviado el 05/06/2012 a las 18:21 | Permalink

      Muchas gracias.

      Igualmente, yo considero que es sumamente positivo que wintablet.info abarque comunicaciones de carácter lo más técnico posible.

      No me agradan los sitios que suponen que sólo lo leen novatos y consumidores finales. Prefiero los que tienen una mayor diversidad en contenido para satisfacer a un público más amplio. Ante todo, porque esto también contribuye a que a los novatos y aficionados les pique la curiosidad y comiencen a explorar asuntos más complejos.
      Obviamente, los artículos de «difusión científica», básicos y populares también son muy importantes.

Una Mención

El 05/06/2012 a las 19:01

[…] anterior entradaha quedado demasiado técnica porque no iba destinada aquí, pero en un acto reflejo pensé que […]

Deja un comentario  

Tu email nunca se publica o se comparte. Los campos obligatorios están marcados con *

*
:wink: :-| :-x :twisted: :) 8-O :( :roll: :-P :oops: :-o :mrgreen: :lol: :idea: :-D :evil: :cry: 8) :arrow: :-? :?: :!:
Puedes usar las siguientes etiquetas y atributos HTML:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

contacto@wintablet.info tema WinTablet.info por Ángel García (Hal9000)