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.
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.
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.
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.
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.
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 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.