7

広告を出したくないのですが、私のアプリケーションの動作のサンプルアプリはESETアンチウイルスです。

私のアプリケーションで要求される機能の1つは、アンインストールにはパスワードが必要なことです。アプリをデバイス管理者リストに追加しましたが、今はアンインストールできません。ただし、管理デバイスとして非アクティブなアプリを使用できます。[設定]>[場所とセキュリティ]>[デバイス管理者の選択]に移動し、ESETセキュリティを無効にしようとすると、パスワードを待機しているアクティビティ(DeviceAdminReceiver.onDisableRequested()から推測)が開始され、モバイルがロックされます。ホームボタン、戻るボタン、さらにはスイッチオフボタンも反応しません=>

[ホーム]、[戻る]、[スイッチオフ]、[カメラ]ボタンが反応しない可能性はありますか?

編集-2番目の質問が削除されました(電話からバッテリーを取り出した後-ESETもデバイス管理者ではありませんでした)

アイデアありがとうございます。

4

1 に答える 1

2

わかりました、申し訳ありませんがESETですが、この機能は非常に興味深いように見えるので、逆コンパイルされたソースを調べました:)

基本的なワークフローは次のとおりです。

  • com.eset.ems.antitheft.receiver.AdminReceiverのサブクラスはDeviceAdminReceiverブロードキャストアクションに登録されてDEVICE_ADMIN_ENABLEDおり、DEVICE_ADMIN_DISABLED
  • デバイス管理が無効になっている場合com.eset.ems.antitheft.receiver.AdminReceiver.onDisabled()
  • com.eset.ems.antitheft.LockActivityから開始されますAdminReceiver.onDisabled()
  • LockActivitycom.eset.ems.antitheft.LockingDialog最もブロックする魔法が発生する場所を示します

ホームおよびその他のボタンブロックアンチウイルスについては、次のトリックを実行します。Android内部のActivityManagerNativeを使用します。他のすべてのアクティビティの先頭を維持するために、タスクIDでLockActivity継続的に呼び出すスレッドを開始します。APIレベル10より前は、 ActivityManagerクラスから非表示にアクセスするためにリフレクションが使用され、API 10以降は、Androidコードベースのコードを使用してアクセスします。また、両方とメソッドを何度も呼び出します。おそらくこれは、電源ボタンを長押しした後に発生するシステムダイアログをキャンセルするために行われます。ActivityManagerNative.moveTaskToFront()LockActivitymoveTaskToFront()ActivityManagerNativeLockActivityLockingDialogActivityManagerNative.closeSystemDialogs()

実際の実行の停止DeviceAdminReceiver.onDisableRequestedについては、コード内で特別なことは何も気づいていませんでした。デバイス管理が無効にされた後にのみアクティビティが開始され、それだけです。そして、私の電話デバイスでは、バッテリーを取り出した後、管理者が無効になりました。

于 2013-04-09T17:49:25.207 に答える