2012-08-14 13 views
6

No quiero hacer publicidad, pero la aplicación de muestra para el comportamiento de mi aplicación es el antivirus de ESET.android mobile control

Una característica solicitada de mi aplicación es que para la desinstalación es necesaria una contraseña. Agrego mi aplicación a la lista de administración del dispositivo y no es posible desinstalarla ahora. Pero puede usar la aplicación Deactive como dispositivo de administración. Cuando accedes a Configuración> Ubicación & seguridad> Seleccionar administradores de dispositivos y tratas de desactivar ESET Security inicia la actividad (supongo que desde DeviceAdminReceiver.onDisableRequested()) que está esperando la contraseña y tu móvil está bloqueado. Botón de inicio, botón de retroceso e incluso botón de Desactivar no reaccionan =>

¿Cómo es posible que el botón de Inicio, Atrás, Interruptor de apagado y Cámara no reaccione?

EDITAR - segunda pregunta retira (Después saqué la batería de mi teléfono - ESET no era administrador de un dispositivo también)

Gracias por las ideas.

+1

Gracias por señalar estos problemas de seguridad en Android. Normalmente, harías esto enviando un correo electrónico a [email protected] en lugar de publicarlo en lugares como StackOverflow. Las aplicaciones ordinarias de SDK no deberían poder hacer lo que usted cita aquí, y dedicaré un tiempo a determinar cómo se está produciendo para asegurarme de que está solucionado. – CommonsWare

Respuesta

2

Ok, lo siento ESET pero esta característica se ve muy interesante, así que tomó un vistazo a las fuentes decompilados :)

El flujo de trabajo básico es el siguiente:

  • com.eset.ems.antitheft.receiver.AdminReceiver subclase de DeviceAdminReceiver se ha registrado para las acciones de difusión DEVICE_ADMIN_ENABLED y DEVICE_ADMIN_DISABLED
  • Cuando administrador de un dispositivo se desactiva com.eset.ems.antitheft.receiver.AdminReceiver.onDisabled() se llama
  • com.eset.ems.antitheft.LockActivity se inicia desde el AdminReceiver.onDisabled()
  • LockActivity muestra com.eset.ems.antitheft.LockingDialog, donde la magia más el bloqueo ocurre

En cuanto al otro antivirus bloque botón de hacer lo siguiente truco y Hogar - se utiliza ActivityManagerNative de elementos internos Android. Para mantener LockActivity en la parte superior de todas las demás actividades, inicia un hilo que contsantly llama a ActivityManagerNative.moveTaskToFront() con LockActivity ID de tarea. Antes de API, el reflejo de nivel 10 se usa para acceder a moveTaskToFront() oculto de la clase ActivityManager y después de API 10 solo usa el código ActivityManagerNative de la base de código de Android para acceder a él. También ambos LockActivity y LockingDialog llaman al método ActivityManagerNative.closeSystemDialogs() muchas veces. Probablemente esto se hace para cancelar el diálogo del sistema que surge después de presionar el botón de encendido.

En cuanto a la ejecución de detención de DeviceAdminReceiver.onDisableRequested en realidad no me di cuenta de nada especial en el código. Solo comienza la actividad después de que el administrador del dispositivo está deshabilitado y eso es todo. Y en el dispositivo de mi teléfono, el administrador se deshabilitó después de sacar la batería.

+0

Me complació darle mis puntos. Gracias. La única y útil respuesta después de 7 meses. Ahora intentaré lograr esto con tus hallazgos. ¿Cómo descubrió cómo funciona? ¿Puedo pedirle más tarde información adicional? – vlkpo

+3

Gracias por la gran pregunta. Utilicé la herramienta dex2jar (https://code.google.com/p/dex2jar/) para convertir el archivo classes.de extraído de la aplicación antivirus ESET.Produce un archivo jar normal que se puede visualizar con cualquier descompilador (particularmente yo uso JD desde http://java.decompiler.free.fr/, probablemente el mejor descompilador gratuito de Java). En realidad, eso es todo, después tuve los archivos de código fuente y pude ver cómo funciona. Me di cuenta por el logcat que LockActivity se está lanzando cuando desactivo el administrador del dispositivo para el antivirus de ESET y lo tomé como punto de partida. –

+0

@AndreiMankevich ¿Puedes mirar http://stackoverflow.com/questions/40282857/device-admin-confirm-before-deactivate y sugerirme tus ideas al respecto? – Smeet

Cuestiones relacionadas