2 votos

¿Cómo deshabilitar FLAG_SECURE modificando un archivo APK?

Quiero modificar un APK para que su FLAG_SECURE pueda ser desactivado. ¿Alguien puede por favor guiarme en cómo hacerlo?

He usado apktool para descompilar la aplicación, pero no sé en qué archivo específico encontrar en smali para desactivarlo.

3voto

pr0nin Puntos 353

No hay un archivo específico que debas editar. En su lugar, debes buscar todos los archivos smali para una llamada específica. Afortunadamente, la sintaxis smali es muy específica para que puedas buscar fácilmente usando una herramienta de búsqueda de texto completo. Prefiero Agent Ransack (Windows) o grep -R (en la línea de comandos).

En detalle, debes buscar los archivos smali para una de las siguientes llamadas:

Landroid/view/Window;->setFlags(II)V
Landroid/view/Window;->addFlags(I)V

Antes de cada llamada en la misma línea, se indica qué registros contienen los parámetros.

addFlags

const/16 v2, 0x2000
invoke-virtual {v1, v2}, Landroid/view/Window;->addFlags(I)V

La segunda entrada entre las llaves es la interesante (v2 en el ejemplo).

Si este parámetro se establece en 0x2000. En detalle, esto es una máscara de bits y si se activa el bit 14, se aplica la protección de captura de pantalla a la pantalla actual.

De hecho, solo importa la cuarta posición. Si es 2 o 6 (2+4) o A (8+2) o C (2+4+8) entonces el bit que estás buscando está activado. Pero generalmente (en el 99% de los casos), encontrarás el valor 0x2000.

Busca las líneas antes del invoke-virtual si hay un comando que establece el registro que estamos buscando como: const/16 v2, 0x2000.

Si hay la llamada, y el segundo parámetro tiene un parámetro con el hexadecimal 2 en la posición mencionada, simplemente puedes comentar toda la línea invoke-virtual ... colocando un # al principio de la línea.

setFlags

const/16 v1, 0x2000
const/16 v2, 0x2000

invoke-virtual {v0, v1, v2}, Landroid/view/Window;->setFlags(II)V

Para setFlags, es muy similar, solo que el parámetro 0x2000 debe estar presente en el segundo v1 y el tercer v2 registro mencionado en las llaves.

Hazlo con cada ocurrencia de las invocaciones setFlags/addFlags.

Nuevamente, comenta toda la línea invoke-virtual ... colocando un # al principio de la línea.

Reconstruir APK

Luego reconstruye (apktool b ...) el archivo APK (puedes encontrarlo en la subcarpeta dist) y luego usa apksigner para firmar el APK construido con un certificado personalizado y estarás listo para instalar la aplicación. Apksigner es parte de Android SDK, pero también se puede descargar manualmente, consulta por ejemplo mi publicación aquí.

Alternativamente para firmar, puedes usar una herramienta como uber-apk-signer que simplifica la generación de certificados APK y claves + firma del APK.

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X