Android 破解vivo手機權限管理

Android 破解vivo手機權限管理

國產廠商基本都對權限管理作了深度的定製,會自定義不少權限,如獲取應用列表和後臺啓動Activity(AndroidQ以前vivo和小米就自定義了),可是卻沒有提供API來判斷這些權限的狀態,這裏破解一下vivo機器,獲取權限狀態。android

獲取權限管理系統APKgit

獲取系統APK前面已經說過,不瞭解的能夠看這篇文章Android反編譯系統應用github

破解權限管理APKbash

經過上述步驟能夠獲得權限管理APK文件和dex文件,使用JADX分別將APK文件和dex文件打開,下面介紹常規分析步驟:markdown

  1. 查看AndroidManifest
    反編譯獲取的PermissionManager.apk,反編譯後查看AndroidManifest.xml文件中的Provider,找到export=true的Provider而且有讀的權限,這裏找到PermissionProvider,具體定義以下所示:
<provider android:name=".provider.PermissionProvider" 
android:writePermission="com.vivo.permissionmanager.provider.write" 
android:exported="true" 
android:authorities="com.vivo.permissionmanager.provider.permission"
/>
複製代碼

該Provider爲對外暴露且能夠讀的組件。app

  1. 根據Provider方法分析
    使用jadx反編譯PermissionManager.apk的dex文件,而且打開類com.vivo.permissionmanager.provider.PermissionProvider
    ide

    image

    上圖爲全部該Provider訪問的URI地址,看到這些URI是否是很激動,經過名字就能知道該Provider對這些自定義權限提供了增刪改查功能,經過上面Provider配置咱們只能讀取這些自定義權限的狀態,下面介紹怎麼判斷當前是否有獲取安裝應用的權限和後臺啓動Activity權限。

  2. 權限狀態讀取oop

  • 讀取已安裝應用權限判斷
  1. 肯定訪問URI
    獲取已安裝應用權限從上圖URI集合中能夠知道爲read_installed_apps,因此最後拼裝的URI爲
content://com.vivo.permissionmanager.provider.permission/read_installed_apps
複製代碼
  1. 肯定訪問返回列名
    找到Provider的query方法對應URI的判斷處:
    post

    image
    看到這裏有一個aoo,再找下這個aoo的定義:
    image
    好了,全部的列名稱也找到了

  2. 獲取權限狀態加密

public static int getVivoApplistPermissionStatus(Context context) {
    Uri uri2 = Uri.parse("content://com.vivo.permissionmanager.provider.permission/read_installed_apps");
    try {
        Cursor cursor = context.getContentResolver().query(uri2, null, null, null, null);
        if (cursor != null) {
            cursor.moveToFirst();
            while (cursor.moveToNext()) {
                String name = cursor.getString(cursor.getColumnIndex("pkgname"));
                int currentmode = cursor.getString(cursor.getColumnIndex("status"));
                		Log.d("liwei8", "name------>" + name + "------status---->" + currentmode);
            }
        }
    } catch (Throwable throwable) {
        throwable.printStackTrace();
    }
    return -1;
}
複製代碼

上面將全部的應用和獲取已安裝應用權限狀態所有輸出,這裏截取一條:

name------>eK98u5S/S9VCK2ojfw6nenojEIDY3VBwS2FZQw/RBXE=------status---->2
複製代碼

從輸出能夠知道能獲取當前權限的狀態,可是應用的包名是處理過的,須要分析包名的處理,這裏一個技巧就是全局搜URI的關鍵字「read_installed_apps」,確定有插入的邏輯:

image

果真在上面的類中找到一個全局常量,下面看下哪裏引用了,重點看下插入數據的方法:
image

找到了上面這個地方,再找下str的生成邏輯:
image
找到了,哈哈哈,看來是固定明文加密,直接反編譯處理就行了,這裏就不細介紹了,處理後的代碼以下:

public static int getVivoApplistPermissionStatus(Context context) {
    Uri uri2 = Uri.parse("content://com.vivo.permissionmanager.provider.permission/read_installed_apps");
    try {
        Cursor cursor = context.getContentResolver().query(uri2, null, null, null, null);
        if (cursor != null) {
            cursor.moveToFirst();
            while (cursor.moveToNext()) {
                String name = cursor.getString(cursor.getColumnIndex("pkgname"));
                String newName = CryUtils.akt(name,"iqoo11-14");
                		int currentmode = cursor.getString(cursor.getColumnIndex("status"));
                Log.d("liwei8", "name------>" + newName + "------status---->" + currentmode);
            }
        }
    } catch (Throwable throwable) {
        throwable.printStackTrace();
    }
    return -1;
}
複製代碼

最後輸出以下:

name------>com.sankuai.meituan------status---->2
name------>com.youku.phone------status---->2
name------>com.jm.android.jumei------status---->2
name------>com.tencent.mm------status---->2
複製代碼

上面已經能夠獲取權限的狀態和應用包名了

總結

上面主要講解破解vivo手機權限管理的步驟,通常破解系統應用主要有以下個步驟:

  1. 反編譯應用APK而且獲取dex文件
  2. 查看AndroidManifest.xml查找Provider
  3. 找到Provider後看下是否export=true,而且能讀寫,若是讀寫都沒有權限,基本就結束了
  4. 找到Provider的代碼,確認訪問的URI和參數

這裏給出反編譯後的dex文件和demo地址:github.com/LiweiGogoin…

相關文章
相關標籤/搜索