第十二节_Android_权限机制

第十二节 Android 权限机制

(第1章 安卓逆向概论)

学习目标

学完本节,希望你能够:搞清 Android 权限模型(普通、危险、特殊);掌握 6.0+ 运行时权限和动态申请流程;会查、改、绕过权限检查(仅学习);会用 Frida/Xposed Hook 权限验证;知道 SELinux 在权限里干啥。


一、Android 权限模型是啥?

Android 采用 基于权限的安全模型 ,应用在访问敏感数据(如相机、定位、电话)时,必须 声明并获得权限

权限分类

权限类型 描述 示例
普通权限(Normal) 低风险,安装时自动授予 INTERNET, ACCESS_NETWORK_STATE
危险权限(Dangerous) 涉及隐私,用户需手动授权 READ_CONTACTS, CAMERA, LOCATION
特殊权限(Signature/Privileged) 仅系统应用或特定签名的应用可使用 MANAGE_EXTERNAL_STORAGE, SYSTEM_ALERT_WINDOW

查看所有 Android 权限

bash 复制代码
adb shell pm list permissions


二、Android 6.0+ 运行时权限是咋回事?

Android 6.0(API 23)引入运行时权限 ,危险权限需要 动态申请

示例:申请 CAMERA 权限

java 复制代码
if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
    ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, 100);
}

📌 监听权限结果

java 复制代码
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    if (requestCode == 100 && grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
        Log.d("Permission", "Camera permission granted!");
    }
}


三、权限管理命令咋用?

查看某应用的已授予权限

bash 复制代码
adb shell dumpsys package com.example.app | grep permission

授予/撤销应用权限(需 root)

bash 复制代码
adb shell pm grant com.example.app android.permission.CAMERA
adb shell pm revoke com.example.app android.permission.CAMERA

查询当前启用的 SELinux 模式

bash 复制代码
adb shell getenforce

输出:

复制代码
Enforcing  # SELinux 启用

禁用 SELinux(Root 权限)

bash 复制代码
adb shell setenforce 0


四、咋绕过权限验证?(仅学习)

1. Hook 权限检查

使用 Frida 绕过 checkSelfPermission

js 复制代码
Java.perform(function() {
    var ActivityCompat = Java.use("androidx.core.app.ActivityCompat");
    ActivityCompat.checkSelfPermission.implementation = function(context, permission) {
        console.log("Bypassing checkSelfPermission: " + permission);
        return 0;  // 直接返回 PERMISSION_GRANTED
    };
});

Frida 命令执行

bash 复制代码
frida -U -n com.example.app -e "..."

2. 修改 AndroidManifest 以绕过权限

逆向分析 APK 并修改权限

bash 复制代码
apktool d app.apk -o decompiled/
vim decompiled/AndroidManifest.xml

修改:

xml 复制代码
<uses-permission android:name="android.permission.CAMERA"/>

重新打包:

bash 复制代码
apktool b decompiled -o modded.apk
jarsigner -verbose -keystore my.keystore modded.apk alias_name
adb install modded.apk

3. 绕过运行时权限

使用 Xposed 模块 Hook requestPermissions

java 复制代码
findAndHookMethod("android.app.Activity", lpparam.classLoader, "requestPermissions",
    String[].class, int.class, new XC_MethodHook() {
        @Override
        protected void beforeHookedMethod(MethodHookParam param) {
            Log.d("Xposed", "Bypassing requestPermissions");
            param.setResult(null);
        }
    }
);


五、SELinux 在权限里干啥?

用一句话说清楚

SELinux 是 Android 的 强制访问控制(MAC) 机制:

  • Enforcing 模式(默认):阻止未经授权的访问。
  • Permissive 模式:仅记录日志,不拦截访问。

查询 SELinux 策略

bash 复制代码
adb shell dmesg | grep avc

Hook SELinux 以绕过权限

c 复制代码
int selinux_android_setcon(const char *context) {
    return 0;  // 绕过 SELinux 访问控制
}


动手练一练

  1. 查询设备上的所有权限
bash 复制代码
adb shell pm list permissions
  1. 查看某应用的权限
bash 复制代码
adb shell dumpsys package com.example.app | grep permission
  1. 逆向分析 APK 权限
bash 复制代码
apktool d app.apk -o decompiled/
vim decompiled/AndroidManifest.xml
  1. Hook checkSelfPermission 绕过权限检查
js 复制代码
Java.perform(function() {
    var ActivityCompat = Java.use("androidx.core.app.ActivityCompat");
    ActivityCompat.checkSelfPermission.implementation = function(context, permission) {
        console.log("Bypassing checkSelfPermission: " + permission);
        return 0;
    };
});

本节小结

你只要记住这几条就行:权限分普通、危险、特殊,危险权限 6.0+ 要运行时申请;用 pm list permissionsdumpsys package 查权限,用 Frida/Xposed Hook checkSelfPermission 可绕过(仅限学习);SELinux 是强制访问控制,getenforce 可看状态。


本节思考与练习

  1. 概念:普通权限和危险权限有啥区别?运行时权限是啥时候引入的?
  2. 动手:用 adb shell pm list permissionsdumpsys package 看某应用的权限。
  3. 动手:用 Frida Hook checkSelfPermission,让某应用「以为」有相机权限(仅学习环境)。

下一节预告 :下一节讲 Android APP 目录结构 (第十三节),把 /data/data/包名 下 cache、databases、shared_prefs、lib 等是干啥的讲清楚。

相关推荐
长沙火山2 小时前
第十六节_反汇编工具介绍
逆向·安卓逆向
长沙火山4 小时前
第十一节_Android_进程管理
逆向·安卓逆向
长沙火山4 小时前
第九节_Android_CPU_架构解析
逆向·安卓逆向
长沙火山1 天前
第六节_x86_vs_ARM_汇编
逆向·安卓逆向
泡泡以安1 天前
Android 逆向实战:从零突破某电商 App 登录接口全参数加密
android·爬虫·安卓逆向
长沙火山1 天前
第五节_汇编语言基础
逆向·安卓逆向
夏了茶糜3 天前
Electron应用逆向分析思路
逆向
嫂子的姐夫6 天前
25-jsl:gov公安(全扣补环境版)
爬虫·逆向·加速乐
嫂子的姐夫6 天前
24-MD5:红人点集登录+凡客网登录
爬虫·python·逆向·小白逆向练手