大家好,我是考100分的小小码 ,祝大家学习进步,加薪顺利呀。今天说一说Android 激活成功教程vivo手机权限管理「终于解决」,希望您对编程的造诣更进一步.
Android 激活成功教程vivo手机权限管理
国产厂商基本都对权限管理做了深度的定制,会自定义很多权限,如获取应用列表和后台启动Activity(AndroidQ之前vivo和小米就自定义了),但是却没有提供API来判断这些权限的状态,这里激活成功教程一下vivo机器,获取权限状态。
获取权限管理系统APK
获取系统APK前面已经说过,不了解的可以看这篇文章Android反编译系统应用。
激活成功教程权限管理APK
通过上述步骤可以得到权限管理APK文件和dex文件,使用JADX分别将APK文件和dex文件打开,下面介绍常规分析步骤:
- 查看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为对外暴露且可以读的组件。
-
根据Provider方法分析
使用jadx反编译PermissionManager.apk的dex文件,并且打开类com.vivo.permissionmanager.provider.PermissionProvider上图为所有该Provider访问的URI地址,看到这些URI是不是很激动,通过名字就能知道该Provider对这些自定义权限提供了增删改查功能,通过上面Provider配置我们只能读取这些自定义权限的状态,下面介绍怎么判断当前是否有获取安装应用的权限和后台启动Activity权限。
-
权限状态读取
- 读取已安装应用权限判断
- 确定访问URI
获取已安装应用权限从上图URI集合中可以知道为read_installed_apps,所以最后拼装的URI为
content://com.vivo.permissionmanager.provider.permission/read_installed_apps
-
确定访问返回列名
找到Provider的query方法对应URI的判断处:看到这里有一个aoo,再找下这个aoo的定义:
好了,所有的列名称也找到了
-
获取权限状态
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”,肯定有插入的逻辑:
果然在上面的类中找到一个全局常量,下面看下哪里引用了,重点看下插入数据的方法:
找到了上面这个地方,再找下str的生成逻辑:
找到了,哈哈哈,看来是固定明文加密,直接反编译处理就好了,这里就不细介绍了,处理后的代码如下:
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手机权限管理的步骤,一般激活成功教程系统应用主要有如下个步骤:
- 反编译应用APK并且获取dex文件
- 查看AndroidManifest.xml查找Provider
- 找到Provider后看下是否export=true,并且能读写,如果读写都没有权限,基本就结束了
- 找到Provider的代码,确认访问的URI和参数
这里给出反编译后的dex文件和demo地址:github.com/LiweiGogoin…
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/13768.html