Accediendo (y "hackeando") el registro de Windows Phone

sábado, 28 de diciembre de 2013

Aunque Microsoft se esfuerza en proteger Windows Phone 8 de los hacks de la comunidad, acceder al registro de los dispositivos todavía es posible con algunas limitaciones. Escribir en el registro está denegado por defecto,  pero los permisos de lectura son bastantes laxos.

Primera aproximación

Si se quiere intentar leer el registro, la primera aproximación puede ser invocar a una librería a bajo nivel de las API WIN32, como puede ser winreg.h e importar las funciones necesarias. Sin embargo, PInvoke/DllImport no está disponible en Windows Phone, así que se tendría que implementar desde cero. No hace falta decir que esto viola los requerimientos de Microsoft para subir una aplicación a la Store.

Pero investigando un poco, podemos encontrar que una buena parte del trabajo ya está hecho y disponible para descarga desde el foro "XDA Developers". Es posible aprovechar un proyecto llamado "Native Access" de GoodDayToDie que hace exactamente eso. Sin embargo compilarlo y usarlo no es trivial, así que vamos a documentar un poco cómo hacerlo.

Dependencias

El código fuente del proyecto puede ser descargado desde esta dirección: http://forum.xda-developers.com/showthread.php?t=2393243. Para compilar el proyecto, es necesario hacerse con las librerías de referencias y convertir algunas DLL del teléfono en formato .lib usando, por ejemplo, dll2Lib (disponible en este enlace: https://github.com/peterdn/dll2lib). En realidad, las librerías necesarias están en el directorio system32, pero utilizar las del emulador no va a funcionar en un teléfono real. Así que se necesitarán imágenes de dispositivos reales y extraer de ellas las DLL. Hay imágenes ISO de teléfonos reales disponibles "ahí fuera", así que en realidad no es difícil extraerlas y conseguirlas.

Una vez hecho, es necesario, además, poner las librerías .LIB extraías en el directorio Libraries del SDK de WP8 (normalmente en Program Files (x86)\Microsoft SDKs\Windows Phone\v8.0\Libraries).

Problemas compilando

Sin embargo, si tienes problemas compilando el código, se puede tomar un atajo si se referencia el fichero .winmd de un proyecto ya existente que use Native Access (por ejemplo WebAcess). Se debe extraer el contenido del fichero XAP (que no es más que un zip) y buscar "Registry.dll" que ya es una versión compilada del proyecto.

Ahora ya estamos listos para usar la librería y escribir el código para buscar claves en el registro. La clase proporciona todos los métodos necesarios para acceder al registro: ReadDWORD, ReadString, ReadMultiString, ReadBinary, ReadQWORD, GetHKey, GetSubKeyNames, GetValues

Un ejemplo real

Aquí están los códigos para acceder a las diferentes ramas:
  • 80000000 -> HKEY_CLASSES_ROOT
  • 80000001 -> HKEY_CURRENT_USER
  • 80000002 -> HKEY_LOCAL_MACHINE
  • 80000003 -> HKEY_USERS
  • 80000004 -> HKEY_PERFORMANCE_DATA
  • 80000005 -> HKEY_CURRENT_CONFIG
Ejemplo de código para acceder al registro de Windows Phone 8
Para acceder a algunos puntos del registro que son muy sensibles, o para crear claves, se necesitarán ciertas capacidades especiales. Por ejemplo conseguir interop-unlock que por ahora solo se ha hecho en dispositivos Samsung que aprovechan la "Diagnosis tool" de la marca.

Tero de la Rosa
tero@11paths.com

No hay comentarios:

Publicar un comentario