En el artículo anterior se explicó cómo modificar la aplicación para evadir la detección de rooteo del dispositivo. En este vamos a ver cómo reempaquetar, firmar, instalar y probar.

Una vez tenemos ya la aplicación parcheada, el siguiente paso consiste en reempaquetar la aplicación con el siguiente comando:

				
					apktool b 
				
			

En esa ocasión utilizamos apktool con la opción “b”, para indicar que hay que construir (build) la aplicación. Este comando creará un archivo .apk en la ruta: 

<DIRECTORIO_APP>/dist/<DIRECTORIO_APK>.apk.

Ahora, para firmar la aplicación, primero necesitamos un almacén de claves (keystore) para poder firmar. Para crear este keystore usamos el siguiente comando:

				
					keytool -genkey -alias test -keyalg RSA -keystore test.keystore -storepass test123 -keysize 2048 -validity 10000 -dname "CN=TEST, OU=TEST, O=TEST, L=TEST, S=TEST, C=TEST"
				
			

 

 

Este comando crea un keystore de pruebas con la contraseña “test123” y un alias llamado “test” que usaremos para firmar.
Después firmamos la aplicación con el siguiente comando:

				
					jarsigner -sigalg MD5withRSA -digestalg SHA1 -storepass test123 -keystore test.keystore base/dist/base.apk test
				
			

Es importante destacar que, aunque se use MD5 con RSA y SHA1 (lo cual también indica jarsigner), no es relevante puesto que esta aplicación no se va a distribuir, solamente está firmada con una clave de pruebas para hacer pruebas.

En este punto tenemos una aplicación parcheada y firmada, queda pendiente instalar y probar. Antes de instalar debemos desinstalar la aplicación legítima puesto que, al no estar firmadas por la misma clave, va a dar error.

Por tanto, desinstalamos la aplicación legítima con el siguiente comando:

				
					adb uninstall 
				
			

Ahora se instala la aplicación parcheada con el siguiente comando:

				
					adb install 
				
			

Debería haber aparecido una nueva aplicación instalada en el dispositivo, la ejecutamos y vemos si el comportamiento nuevo es el esperado:

Comprobamos que, efectivamente, hemos evadido la detección de rooteo del dispositivo. En el caso de esta aplicación sólo cambia un mensaje, pero en una aplicación real puede suponer que, si el dispositivo está rooteado la aplicación se cierre. Esta técnica permite eliminar este tipo de impedimentos para poder realizar un análisis de una mejor forma.