2012-08-14 12 views
6

Non voglio fare pubblicità ma l'app di esempio per il comportamento della mia applicazione è l'antivirus ESET.controllo mobile Android

Una caratteristica richiesta della mia applicazione è che per la disinstallazione è necessaria la password. Aggiungo la mia app all'elenco dei dispositivi e non è possibile disinstallarla ora. Ma puoi usare l'app Deactive come dispositivo di amministrazione. Vado a Impostazioni> Posizione & sicurezza> Seleziona gli amministratori dei dispositivi e provi a disattivare ESET Security avvia l'attività (credo da DeviceAdminReceiver.onDisableRequested()) che è in attesa di password e il tuo cellulare è bloccato. Pulsante Home, pulsante Indietro e pulsante Interruzione pari non reagisce =>

Come è possibile che il pulsante Home, Indietro, SwitchOff e Camera non reagisca?

EDIT - seconda domanda rimosso (dopo ho tirato fuori la batteria dal telefono - ESET non era dispositivo di amministrazione troppo)

Grazie per le idee.

+1

Grazie per aver segnalato questi problemi di sicurezza in Android. Normalmente, lo faresti inviando un'email a [email protected] piuttosto che pubblicandolo in posti come StackOverflow. Le app SDK ordinarie non dovrebbero essere in grado di fare ciò che citi qui, e passerò un po 'di tempo a determinare come ciò avvenga per assicurarti che sia corretto. – CommonsWare

risposta

2

Ok, scusate ESET ma questa caratteristica sembra molto interessante così ho preso uno sguardo a fonti decompiled :)

Il flusso di lavoro di base è il seguente:

  • com.eset.ems.antitheft.receiver.AdminReceiver sottoclasse di DeviceAdminReceiver è registrato per le azioni di trasmissione DEVICE_ADMIN_ENABLED e DEVICE_ADMIN_DISABLED
  • Quando amministrazione periferica è disattivata com.eset.ems.antitheft.receiver.AdminReceiver.onDisabled() è chiamato
  • com.eset.ems.antitheft.LockActivity viene avviato dal AdminReceiver.onDisabled()
  • LockActivity mostra com.eset.ems.antitheft.LockingDialog dove la magia più il blocco avviene

Per quanto riguarda la casa e gli altri antivirus di blocco pulsante DO il seguente trucco - usa ActivityManagerNative da interni Android. Per mantenere LockActivity nella parte superiore di tutte le altre attività, viene avviato un thread che chiama costantemente ActivityManagerNative.moveTaskToFront() con ID attività LockActivity. Prima dell'API, il riflesso di livello 10 viene utilizzato per accedere alla classe moveTaskToFront() nascosta dalla classe ActivityManager e dopo l'API 10 utilizza solo il codice ActivityManagerNative dalla base di codice Android per accedervi. Anche il numero LockActivity e LockingDialog chiama il metodo ActivityManagerNative.closeSystemDialogs() molte volte. Probabilmente questo è fatto per cancellare la finestra di dialogo del sistema che si presenta dopo aver premuto a lungo il pulsante di accensione.

Per quanto riguarda l'arresto di esecuzione di DeviceAdminReceiver.onDisableRequested in realtà non ho notato nulla di speciale nel codice. Avvia l'attività solo dopo che l'amministratore del dispositivo è stato disabilitato e questo è tutto. E sul mio dispositivo, l'amministratore del dispositivo è stato disabilitato dopo aver tolto la batteria.

+0

Sono stato felice di darti i miei punti. Grazie. L'unica e utile risposta dopo 7 mesi. Ora proverò a raggiungere questo risultato con le tue scoperte. Come hai scoperto come funziona? Posso chiederti in seguito per alcune informazioni aggiuntive? – vlkpo

+3

Grazie per la bella domanda. Ho usato lo strumento dex2jar (https://code.google.com/p/dex2jar/) per convertire il file classes.dex estratto dall'apk dell'antivirus ESET.Produce file jar standard che possono essere visualizzati con qualsiasi decompilatore (in particolare utilizzo JD da http://java.decompiler.free.fr/, probabilmente il miglior decompilatore Java gratuito). In realtà è tutto, dopo che ho avuto i file del codice sorgente e ho potuto vedere come funziona. Ho appena notato dal logcat che LockActivity è stato lanciato quando ho disabilitato l'amministratore del dispositivo per l'antivirus ESET e l'ho preso come punto di partenza. –

+0

@AndreiMankevich Puoi guardare http://stackoverflow.com/questions/40282857/device-admin-confirm-before-deactivate e suggerirmi i tuoi pensieri a riguardo? – Smeet

Problemi correlati