Implementando un Hard-Reset por código en Windows Mobile 6.x

Un tema bastante peliagudo en los tiempos que corren es el de la seguridad de los datos que almacenamos en nuestras aplicaciones, sobre todo cuando hablamos de aplicaciones de gestión empresarial, en las cuales almacenamos datos confidenciales de nuestros clientes, como facturación, deudas, compras habituales…

Si bien es cierto que si en nuestra empresa contamos con un servidor Exchange podemos forzar el borrado remoto, también es cierto que hasta que no nos demos cuenta de que el dispositivo ha «cambiado» de dueño no podremos dar dicha orden.

Aquí os dejo un ejemplo muy simple de como implementar el hard-reset del dispositivo para Windows Mobile 6.x utilizando el sistema de aprovisionamiento OMA Client.

Este sistema nos permite configurar nuestros dispositivos, desde agregar enlaces a la lista de favoritos del Explorer, hasta el ejecutar el borrado mediante Hard-Reset de nuestro dispositivo, esto último es lo que ha propiciado la redacción de este post.

Para ello es tan sencillo como componer el documento XML correspondiente.

<wap-provisioningdoc>
  <characteristic type=»RemoteWipe»>
      <parm name=»doWipe» value=»1″/>
  </characteristic>
</wap-provisioningdoc>

En este documento vemos que vamos a ejecutar la característica RemoteWipe y como parámetro le especificamos la acción doWipe.

Como ejecutamos esto desde nuestra aplicación, muy sencillo, para ello utilizaremos el método ProcessConfiguration esta clase se encuentra dentro del ensamblado Microsoft.WindowsMobile.Configuration por lo que deberemos agregar este nombre de espacio como referencia a nuestro proyecto.

Éste método tiene dos parámetros, veamos la sintaxis:

XmlDocument ProcessConfiguration (XmlDocument configDoc,bool metadata)

Donde configDoc será el documento XML con el que se aprovisionará nuestro dispositivo, y con el parámetro de metadata especificamos si vamos a recoger la respuesta, este último parámetro es muy útil si queremos controlar los errores que se puedan producir o por si el archivo de aprovisionamiento debe generar una salida, como puede ser por haber realizado algún tipo de consulta.

Una vez visto esto vamos a por el ejemplo:

public bool doWipe()
{
string WipeCSP = @»<wap-provisioningdoc>
                    <characteristic type=’RemoteWipe’>
                    <parm name=’doWipe’ value=’1’/>
                    </characteristic>
                   </wap-provisioningdoc>»;

//Documento en el que almacenaremos la respuesta
System.Xml.XmlDocument xmlDocRes;

//Documento donde cargaremos el xml de aprovisionamiento

XmlDocument configDoc = new XmlDocument();
configDoc.LoadXml(WipeCSP);

//Llamada al configuration manager
xmlDocRes = ConfigurationManager.ProcessConfiguration(configDoc, true);

//TODO: aquí iría el procesamiento del documento de retorno
return true;
}

Ojo que esto solo es valido para dispositivos con Windows Mobile 6.0 o superior no funciona en Windows Mobile 5.0 ni en Windows Mobile 2003.

Otro tema importante es que, muy bien, ya he flaseado la PDA pero que pasa con mi tarjeta de almacenamiento… y es que muchas veces los datos guardados en la tarjeta de memoria de nuestro dispositivo es mucho más importante que el contenido de la propia PDA, bien porque la aplicación guarde los datos en la tarjeta de memoria (bien porque hayamos hechos fotos comprometedoras que no queremos que nadie vea jeje) a partir de Windows Mobile 6.1 también es posible forzar el cifrado de la tarjeta SD utilizando el mismo sistema que hemos implementado para realizar el reset de la pda, tan solo hemos de utilizar el siguiente xml de aprovisionamiento y listo.

<wap-provisioningdoc>
<characteristic type=»MobileEncryption»>
   <parm name=»Enable» value=»1″ />
</characteristic>
</wap-provisioningdoc>

Con esto y un bizcocho aquí os dejo un listado de enlaces para los que estéis interesados en investigar un poquito más en el tema del aprovisionamiento de los dispositivos móviles.

Understanding Provisioning (MSDN)

Options for Delivering Provisioning XML Files to Windows Mobile-Based Devices

Ejecutando archivos de aprovisionamiento desde nativo c++

Como final, desearos a todos una felices fiestas, ya que a muchos no nos ha tocado la lotería, nos seguiremos viendo por aqui.

¡Un saludo!

José Antonio Gallego

Mobile .NET Users Group