开机启动调研

开机启动调研


结论

测试机型 是否支持第三方应用检测开机启动 是否支持第三方应用跳转到设置页
小米2s  支持  不支持(仅能进入到应用详情)
华为Mate7  不支持  支持

详细步骤

Miui
--开机启动
  • 进入设置开机启动的界面. 通过 adb shell dumpsys activity activities | grep "*"可见当前堆栈信息

    // 这个就是最上层的activity名字。可见目标apk的包名是com.android.settings。初步推断应该是系统的Setting的apk
    com.android.settings/com.miui.securitycenter.permission.AppPermissionsEditor
    
  • 去系统中找到对应的apk

    肯定是系统级。所以我们直接去/system/app/下面看看.

    可以找到Settings.apk. 这个看上去很有可能就是我们找到。

  • 后面就是反编译apk了。unzip >> dex2jar >> jad .细节这里就不在赘述。

  • 查看AppPermissionsEditor 找到如下的关键代码:

  • 结论:

    miui通过applicationInfo的flags中来判定是否支持开机启动。

  • 代码:

--启动设置页
  • 仅能进入应用详情界面。无法跳转到设置开机权限界面

  • 代码:

华为
--开机启动

华为的历程还是比较艰难的。

思路和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即可。

  • 代码:

  •  

posted @ 2014-12-17 14:33  wFeng  阅读(1042)  评论(0编辑  收藏  举报