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

28
Ago 2014
AnálisisDesarrolloModern UISeguridad y malwareSoftware

No me compares… con una aplicación de calidad

Volvemos al tema de las aplicaciones mierdosas. En este caso os voy a contar lo que hay dentro de las tripas de la aplicación de Sudoku de Microsoft. Entre otras cosas veremos el uso de productos Open Source sin que tal aparezca en el acerca de la aplicación, y otros temas no menos interesantes.

Os aseguro que son muy pero que muy interesantes. No vais a quedar defraudados.

Como ya sabéis de anteriores entradas, la aplicacion de Sudoku de Microsoft sube el uso de CPU a unos niveles completamente intolerables. Esto me llevó a intentar ver su interior.

Lo primero de todo es comentar que esto no debéis hacerlo en una máquina de producción, lo que en términos de la calle quiere decir: un ordenador o tableta que uses a diario ya sea en el trabajo como en casa. Yo instalé una máquina virtual de Windows 8.1 x64 mediante Hyper-V, aunque vosotros, si queréis repetir los pasos, podéis hacerlo con cualquier otra herramienta de virtualización. En mi caso utilizo esa porque es la única que tengo disponible ya que programo para Windows Phone y tengo que tener Hyper-V sí o sí, a la vez que este hypervisor es completamente incompatible con cualquier otro (léase Parallels, vmWare, …).

¿Por qué hay que virtualizar? Luego os lo explico.

Una vez tengas preparada la máquina virtual, instalad la aplicación de Sudoku desde la tienda. Ojo, la de Microsoft, no una de tantas otras como hay.

Ahora viene lo complicado. Tenéis que iros a “C:\Archivos de programa\WindowsApps” da igual si vuestro sistema es de 32 ó de 64 bits. Para ello hay que activar ver carpetas y archivos ocultos. Pero si intentas entrar ahí, descubres que el sistema no te deja.

El siguiente paso es, pues, tomar propiedad de la carpeta WindowsApps. Una vez hecho eso hay que darle permisos al menos de lectura para el usuario logueado. Si no sabéis cómo hacer esas cosas, mejor os estáis quietecitos y seguís leyendo.

El motivo de usar una máquina virtual y no una real es ese mismo: hemos cambiado los permisos a una carpeta muy importante de Windows y hemos dejado un sistema altamente vulnerable. Así, cuando terminéis de probar cosas, borráis la máquina virtual y a otra cosa mariposa.

Bueno, ya estamos dentro de esa carpeta. ¡¡Tachán!! Ahí es donde están almacenados todos los programas Modern UI (y sí, podríamos hacer cualquier trapacería, como veremos).

Imagen del portapapeles

Vereis que hay tres carpetas que comienzan con “Microsoft.Sudoku” y terminan con un número cualquiera. Esas son. Ahora debéis buscar la de la captura. Las otras dos apenas contienen ficheros de metadatos y otras cosas.

¿Qué significan? Pues no tengo la menor idea, aunque sí que me barrunto lo que son algunos. Tampoco es que de momento me importe mucho. Si alguna vez tengo interés ya veré qué son y qué hacen.

SI recorréis dicha carpeta veréis tres grupos de DLL. Unas comienzan con Arkadium, otras con SharpDX y unas más con Unitiy. Hay otras, pero son las normales de un programa .NET de Microsoft.

Esto, ya de por sí nos da una idea de que Sudoku usa tres Frameworks para juegos, que se llaman con el nombre con el que empiezan.

Arkady es el del propio creador del juego, y son todas sus cosas compartidas como el tema de los logros, puntuaciones y demás.

SharpDX es un port de DirectX para .NET. La página Web está aquí, y es un producto Open Source bajo licencia MIT para el código y Creative Commons Attribution-Share Alike 3.0 para el contenido… La primera licencia dice que si usas el software, tienes que ponerlo así en el Acerca de de tu aplicación. La segunda dice que si usas algo del contenido (imágenes, sonidos, etc) también tienes que citar al autor, que en estos dos casos es SharpDX.

Primero os pego una captura del Acerca de la aplicación de Sudoku:

Imagen del portapapeles 2

¿Vosotros veis algo sobre ello? Yo tampoco. Y no hace falta mover el scroll hasta abajo: no hay nada. Espero que no estén usando ni un solo sonido, aunque sea un “clic” o un solo JPG aunque sea un fondo blanco. Suponiendo que no usen el contenido, la biblioteca sí que deberían de citarla.

El otro framework utilizado es Unity. Este es un producto bastante caro, sobre todo para corporaciones. Aquí tienes la página web. Con este hay que pagar sí o sí. En este no he mirado el tipo de licencia, pero si tienes que pagar, supongo que el que salga en el Acerca de les importará una higa.

Pero esperad. Cojamos la DLL principal del Unity instalado en el juego y veamos sus propiedades:

Imagen del portapapeles 3

Lo único curioso aquí es que la DLL no tiene información de Copyright. Ignoro si es así o es que se trata de una versión “especial”.

Ya para finalizar la última sorpresa sorpresiva.

Vamos a coger los ficheros “sudoku.exe” y “Arkadium.LeaderboardModule.dll”.

También tenemos que instalar DotPeek o cualquier otro descompilador .NET.

Abrimos el citado DotPeek y dejamos caer la DLL sobre la ventan derecha. Solo nos queda explorar:

Imagen del portapapeles 4

Y ahora la gema de las gemas. Repetimos con Sudoku.exe:

Imagen del portapapeles 5

Podéis ver que termina siendo bastante fácil de obtener si no todo el código fuente, sí una parte muy importante. El código mostrado es parte de la generación de un nuevo Sudoku. Le método Generate crea una instancia de un objeto del tipo ClassicPuzzleGenerator() o del tipo IrregularPuzzleGeneator(). Luego esa instancia será utilizada por el método GenerateOrSendPredefined() para crear un  puzzle mediante la llamada a CreatePuzzle() del objeto devuelto.

La cosa pinta interesante, pero me he detenido ahí. Ni ClassicPuzzleGenerator ni IrregularPuzzleGenerator están dentro de sudoku.exe, pero seguro que sí en otra de las muchas DLL que pueblan la aplicación. Nuestro cometido aquí no es deshacer el juego, sino mostrar lo trivial que puede llegar a ser.

Y tampoco nos rasguemos las vestiduras: esto se sabe desde el primer día en que se anunció .NET: sacar el código fuente es trivial no, lo siguiente.

Lo que sí resulta un poco llamativo es que no hayan hecho nada para evitarlo. Existen unas herramientas que se llaman ofuscadores de código. Lo que hacen es, primero, renombrar todas las variables y métodos de forma que sean muy difícil de seguir por un ser humano. Suelen darle nombres de letras, a, b, c, d, etc,.

Otras de las cosas es reordenar el código. Un programa ofuscado está lleno de gotos y de switch/case.

Sin embargo, dada la idiosincrasia del desarrollo en .NET (jerarquía de clases bien abundante, contenido de métodos con pocas líneas, separación entre interfaces e implementación), muchas veces adivinar qué hace algo, aun con código ofuscado, es trivial.

Pero como el código ofuscado se suele ejecutar más despacio que el normal (y puede generar errores muy sibilinos y totalmente imposibles de detectar), muchas empresas lo dejan tal cual sale de los compiladores.

Esto puede que se solucione en un futuro no muy lejano, cuando Roslin (la nueva generación de compiladores .NET) esté en producción, ya que se supone que generarán código nativo directamente. De hecho es lo que, si no me equivoco, se hace en la actualidad en Windows Phone, en el que cuando tu instalas una aplicación desde la tienda, Microsoft la compila para ti.

En resumen, en esta entrada hemos descubierto

  • Usan SharpDX y no están cumpliendo la licencia por completo
  • Usan Unity y hay algo muy raro en cómo lo están haciendo
  • Sacar el código fuente de una aplicación escrita en C# es trivialmente sencillo.

Hala, hasta otra, amigos.

 

 

Por RFOG | 4 Comentarios | Enlaza esta entrada
contacto@wintablet.info tema WinTablet.info por Ángel García (Hal9000)