2012-08-14 49 views
6

我不想做廣告,但我的應用程序的行爲示例應用程序是ESET防病毒。android手機控件

我的應用程序的一個要求的功能是,卸載是需要密碼。我將我的應用添加到設備管理員列表中,現在無法將其卸載。但是您可以將管理設備作爲Deactive應用程序。 Whan你去設置>位置&安全>選擇設備管理員,你試圖取消ESET安全性啓動活動(我想從DeviceAdminReceiver.onDisableRequested()),這是等待密碼和您的手機被鎖定。主頁按鈕,後退按鈕,甚至SwitchOff按鈕都不會反應=>

Home,Back,SwitchOff和Camera按鈕可能無法反應?

編輯 - 第二個問題去除 (後我從我的手機拿出電池 - ESET不是設備管理員太)

感謝您的想法。

+1

感謝您指出Android中的這些安全問題。通常情況下,您可以通過發送電子郵件至[email protected]而不是將其發佈到像StackOverflow這樣的位置來完成此操作。普通的SDK應用程序不應該能夠做你在這裏引用的內容,我會花一些時間來確定這是如何發生的,以確保它是固定的。 – CommonsWare 2012-08-14 12:17:10

回答

2

好吧,抱歉ESET不過這個功能看起來很有趣,所以我拍了一下反編譯來源:)

的基本工作流程如下:

  • com.eset.ems.antitheft.receiver.AdminReceiverDeviceAdminReceiver子類註冊了廣播行動DEVICE_ADMIN_ENABLEDDEVICE_ADMIN_DISABLED
  • 當設備管理被禁用com.eset.ems.antitheft.receiver.AdminReceiver.onDisabled()稱爲
  • com.eset.ems.antitheft.LockActivityAdminReceiver.onDisabled()
  • LockActivity開始顯示com.eset.ems.antitheft.LockingDialog哪裏最堵奇蹟發生

用於家居和其他按鈕塊防病毒做下面的技巧 - 它使用ActivityManagerNative從Android的內部。要將LockActivity保持在所有其他活動的頂部,它會啓動一個線程,該線程將ActivityManagerNative.moveTaskToFront()LockActivity任務ID配合使用。在API級別10之前,反射用於從ActivityManager類訪問隱藏的moveTaskToFront(),在API 10之後,它僅使用來自Android代碼庫的ActivityManagerNative代碼來訪問它。 方法LockActivityLockingDialog多次調用ActivityManagerNative.closeSystemDialogs()方法。可能這是爲了取消電源按鈕長按後出現的系統對話框。

至於停止執行DeviceAdminReceiver.onDisableRequested實際上我沒有注意到代碼中有什麼特別的地方。它只在設備管理員被禁用後纔開始活動,就這些了。在我拿出電池後,我的手機設備管理員被禁用。

+0

我很高興給你我的觀點。謝謝。 7個月後唯一有用的答案。現在我會試着用你的發現來達到這個目的。你是怎麼知道它是如何工作的?我可以再問你一些額外的信息嗎? – vlkpo 2013-04-10 10:37:47

+3

謝謝你的好問題。我使用了dex2jar(https://code.google.com/p/dex2jar/)工具來轉換ESET antivirus apk中提取的classes.dex文件。它生成的常規jar文件可以通過任何反編譯器進行瀏覽(特別是我使用http://java.decompiler.free.fr/中的JD,可能是最好的免費Java反編譯器)。其實就是這樣,之後我有源代碼文件,並可以看到它的工作原理。我剛剛從logcat注意到,當我禁用ESET防病毒的設備管理員並將其作爲起點時,LockActivity正在啓動。 – 2013-04-10 11:53:59

+0

@AndreiMankevich你可以請看看http://stackoverflow.com/questions/40282857/device-admin-confirm-before-deactivate並建議我你的想法嗎? – Smeet 2016-10-27 12:03:38