Android 激活成功教程vivo手机权限管理「终于解决」

Android 激活成功教程vivo手机权限管理「终于解决」国产厂商基本都对权限管理做了深度的定制,会自定义很多权限,如获取应用列表和后台启动Activity(AndroidQ之前vivo和小米就自定义了),但是却没有提供API来判断这些权限的状态,这里激活成功教程一下vivo机器,获取权限状态。 获取系统APK前面已经说过,不了解的可以看这篇…

Android 激活成功教程vivo手机权限管理

国产厂商基本都对权限管理做了深度的定制,会自定义很多权限,如获取应用列表和后台启动Activity(AndroidQ之前vivo和小米就自定义了),但是却没有提供API来判断这些权限的状态,这里激活成功教程一下vivo机器,获取权限状态。

获取权限管理系统APK

获取系统APK前面已经说过,不了解的可以看这篇文章Android反编译系统应用

激活成功教程权限管理APK

通过上述步骤可以得到权限管理APK文件和dex文件,使用JADX分别将APK文件和dex文件打开,下面介绍常规分析步骤:

  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为对外暴露且可以读的组件。

  1. 根据Provider方法分析
    使用jadx反编译PermissionManager.apk的dex文件,并且打开类com.vivo.permissionmanager.provider.PermissionProvider

    image

    上图为所有该Provider访问的URI地址,看到这些URI是不是很激动,通过名字就能知道该Provider对这些自定义权限提供了增删改查功能,通过上面Provider配置我们只能读取这些自定义权限的状态,下面介绍怎么判断当前是否有获取安装应用的权限和后台启动Activity权限。

  2. 权限状态读取

  • 读取已安装应用权限判断
  1. 确定访问URI
    获取已安装应用权限从上图URI集合中可以知道为read_installed_apps,所以最后拼装的URI为
content://com.vivo.permissionmanager.provider.permission/read_installed_apps
  1. 确定访问返回列名
    找到Provider的query方法对应URI的判断处:

    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…

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/13768.html

(0)

相关推荐

  • SQL 语句执行很慢的原因「建议收藏」

    SQL 语句执行很慢的原因「建议收藏」大多数情况是正常的,只是偶尔会出现很慢的情况 网络问题 数据库在刷新脏页 获取锁失败,我们可以用 show processlist这个命令来查看当前的状态 刷脏页有下面4种场景(后两种不用太

    2023-02-19
    153
  • Chaos Mesh® 正式进入 CNCF 沙箱托管项目[亲测有效]

    Chaos Mesh® 正式进入 CNCF 沙箱托管项目[亲测有效]近日,云原生计算基金会 (CNCF) 宣布云原生的混沌工程 Chaos Mesh 正式进入 CNCF 沙箱托管项目,这是 CNCF 接纳的第二个由 PingCAP 团队设计并研发的项目。 Chaos…

    2023-03-24
    140
  • delete-drop语句生成的存储过程[亲测有效]

    delete-drop语句生成的存储过程[亲测有效]问题: 开发时有时候需要对很多表进行操作。 例如:清空(删除)所有(某些)表,删除所有表某时间点之后导入的数据(类似于回滚) 解决方式: 对选定的表集合执行相同的查询条件(可为空),如果这个执行结果大

    2023-05-05
    221
  • 使用 Python 输入整数的方法

    使用 Python 输入整数的方法计算机科学的许多应用需要输入整数,Python 中有多种方法可以输入整数。在本篇文章中,我们将介绍 Python 中输入整数的方法,并提供代码示例,帮助读者更好地理解。

    2024-07-21
    38
  • 大数据技术栈,主要有哪些[亲测有效]

    大数据技术栈,主要有哪些[亲测有效]往大数据方向发展需要学哪些技术?网上一搜真是指不胜屈。对于小白来说,实在是一头雾水,到底哪些是当下流行的?哪些是必须要先学会的?流行?主次搞不清。为了解决这些疑惑,羚羊专门花了些时间, 挨个技术去研究

    2023-03-11
    139
  • 数据库三范式例子_数据库如何判断范式

    数据库三范式例子_数据库如何判断范式前言 “学长,SqlServer数据库三范式可以简单帮我理解一下吗?”。 学妹的一句话把我问蒙了,因为三范式的概念早就丢到外太空去了。 但是呢,我不能直接说我忘记了,为了不影响在学妹心目中的形象(你懂

    2023-04-25
    147
  • oracle快速向表插入大量数据[亲测有效]

    oracle快速向表插入大量数据[亲测有效]当需要对一个非常大的表INSERT的时候,会消耗非常多的资源,因为update表的时候,oracle需要生成 redo log和undo log;此时最好的解决办法是用insert, 并且将表设置为n

    2023-02-26
    152
  • Linux命令之apt-get「建议收藏」

    Linux命令之apt-get「建议收藏」一、清理 sudo apt-get autoclean 如果你的硬盘空间不大的话,可以定期运行这个程序,将已经删除了的软件包的.deb安装文件从硬盘中删除掉。 如果你仍然需要硬盘空间的话,可以试试ap

    2023-08-10
    131

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注