測試機型 | 是否支持第三方應用檢測開機啓動 | 是否支持第三方應用跳轉到設置頁 |
---|---|---|
小米2s | 支持 | 不支持(僅能進入到應用詳情) |
華爲Mate7 | 不支持 | 支持 |
進入設置開機啓動的界面. 經過 adb shell dumpsys activity activities | grep "*"
可見當前堆棧信息java
// 這個就是最上層的activity名字。可見目標apk的包名是com.android.settings。初步推斷應該是系統的Setting的apk com.android.settings/com.miui.securitycenter.permission.AppPermissionsEditor
去系統中找到對應的apkandroid
確定是系統級。因此咱們直接去/system/app/
下面看看.shell
能夠找到Settings.apk. 這個看上去頗有可能就是咱們找到。app
後面就是反編譯apk了。unzip >> dex2jar >> jad .細節這裏就不在贅述。ide
查看AppPermissionsEditor 找到以下的關鍵代碼:函數
結論:測試
miui經過applicationInfo的flags中來斷定是否支持開機啓動。ui
代碼:3d
僅能進入應用詳情界面。沒法跳轉到設置開機權限界面code
代碼:
華爲的歷程仍是比較艱難的。
思路和Miui同樣。找到對應的apk,反編譯,找到關鍵代碼。看看是否能復現。
進入設置開機啓動的界面. 經過 adb shell dumpsys activity activities | grep "*"
可見當前堆棧信息
發現包名是com.huawei.systemmanager Activity爲.optimize.bootstart.BootStartActivity
一樣去system/app
找到最類似的apk
這個是odex文件。因此須要將odex轉爲dex. 這個須要下載baksmali,smali這個東西。 具體odex到dex命令以下 adb pull /system/framework . java -jar baksmali-2.0.3.jar -d . -x HwSystemManager.odex java -Xmx512M -jar smali-2.0.3.jar out -o classes.dex 這樣咱們就拿到dex了.路上會一堆警告先不用管。
而後dex反編譯。發現根本走不通。會出現error。是得咱們不能找到想要的optimize.bootstart.BootStartActivity。
只能經過查看smali文件。
思路:
界面是個ListView。那麼確定對應有adapter。裏面的數據確定包含是否容許開機啓動的變量。
並且確定有入口設置開機啓動狀態。由於界面有個button麼。哈。
最終咱們找到changeSwitchStatus這個函數發現mAllow屬性就是控制是否開機啓動的。
同時發現重要的成員變量:mFilteredAllStartAppList
而後順着mFilteredAllStartAppList。能夠發現Adapter在構造的時候第一參數傳進去的。
mFilteredAllStartAppList加載是經過StartupInfoLoadingTask加載的。而後經過靜態方法access$100把結果放回去。
天然去doInBackground搞去
發現高能函數BootStartManager#getAllStartAppList。以後可找到getForbidAppListInTable。這個是加獲取禁止啓動加載數據的。
最 終,可見經過ContentProvider獲取禁止啓動app的數據。
下面這句話說明的請求的uri
sget-object v1, Lcom/huawei/systemmanager/optimize/Const;->START_UP_FORBIDDEN_APPS_URI:Landroid/net/Uri;
而後經過Uri,本覺得能夠happy的拿到數據了。寫完代碼以後。運行。Crash...
java.lang.SecurityException: Permission Denial: opening provider com.huawei.systemmanager.optimize.db.OptimizeProvider from ProcessRecord{43aae548 15462:com.gudong.client/u0a95} (pid=15462, uid=10095) requires com.android.permission.system_manager_interface or com.android.permission.system_manager_interface
請求其餘app時須要權限。加上提示中的權限也不可。
反編譯AndroidManifest.xml。看看究竟是什麼緣由。
java -jar ~/Software/java-decompile/AXMLPrinter2.jar AndroidManifest.xml >> AndroidManifest.txt
protectionLevel值爲3.查文檔以下。非相同證書籤名或系統才能使用此權限
結論:
並不能直接讀取華爲meta7中,禁止開機啓動的數據
有AndroidManifest.xml。 直接啓動該Activity便可。
代碼: