android绕过permission验证及fork进程权限提升

脱壳时写patch补丁时Native代码并没有太高的权限,以至于如文件IO、网络IO等基本的C函数都无法使用,提示权限不足。在网上搜索了资料大致进行以下几种尝试:

1、APK在安装时会在/data/system/packages.xml记录当前app需要申请的权限,如下:

 <package name="com.example.unpacker" codePath="/data/app/com.example.unpacker-1.apk" nativeLibraryPath="/data/app-lib/com.example.unpacker-1" flags="572998" ft="1504bc58f90" it="1504bad7c65" ut="1504bc5913e" version="1" userId="10078">
        <sigs count="1">
            <cert index="9" key="xxx" />
        </sigs>
        <perms>
            <item name="android.permission.ACCESS_WIFI_STATE" />
            <item name="android.permission.CHANGE_NETWORK_STATE" />
            <item name="android.permission.ACCESS_NETWORK_STATE" />
            <item name="android.permission.INTERNET" />
            <item name="android.permission.CHANGE_WIFI_STATE" />
        </perms>
        <signing-keyset identifier="1" />
    </package>

尝试将所有权限添加到此packages.xml里没有作用,测试失败,具体原因以后再看

2、直接绕过permission验证修改framework代码,相关参考http://www.cnblogs.com/GnagWang/archive/2011/03/21/1990507.html

ActivityManagerService.java (frameworks\base\services\java\com\android\server\am)中将checkPermission、checkCallingPermission、enforceCallingPermission函数返回值修改为PERMISSION_GRANTED,修改后编译framework.jar、framework2.jar、services.jar然后刷入机器测试发现此修改容易造成系统起不来,不稳定,具体原因以后再看;

3、修改zygote fork后的进程的权限,zygote fork进程最终会调用forkAndSpecializeCommon函数,在forkAndSpecializeCommon中会判断是不是启动systemserver进程还是其它app进程,其它进程的话permittedCapabilities和effectiveCapabilities将设置成0

if (isSystemServer) {
        /*
         * Don‘t use GET_ARG_LONG here for now.  gcc is generating code
         * that uses register d8 as a temporary, and that‘s coming out
         * scrambled in the child process.  b/3138621
         */
        //permittedCapabilities = GET_ARG_LONG(args, 5);
        //effectiveCapabilities = GET_ARG_LONG(args, 7);
        permittedCapabilities = args[5] | (int64_t) args[6] << 32;
        effectiveCapabilities = args[7] | (int64_t) args[8] << 32;
} else {
        mountMode = args[5];
        permittedCapabilities = effectiveCapabilities = 0;   //其它app进程则允许权限和有将权限清o
        //将上一行修改为 permittedCapabilities = effectiveCapabilities = 125910048;
        StringObject* seInfoObj = (StringObject*)args[6];
        if (seInfoObj) {
            seInfo = dvmCreateCstrFromString(seInfoObj);
            if (!seInfo) {
                ALOGE("seInfo dvmCreateCstrFromString failed");
                dvmAbort();
            }
        }
        StringObject* niceNameObj = (StringObject*)args[7];
        if (niceNameObj) {
            niceName = dvmCreateCstrFromString(niceNameObj);
            if (!niceName) {
                ALOGE("niceName dvmCreateCstrFromString failed");
                dvmAbort();
            }
        }
    }

因此直接强制将app启动进程时的允许权限和有效权限全设置成固定的就可以实现权限绕过:

编译Libdvm.so拷贝到手机发现现在进程权限已经和system_server权限一样了。

时间: 2024-10-13 06:49:01

android绕过permission验证及fork进程权限提升的相关文章

Android(permission)常用权限

Android应用需要在AndroidManifest.xml添加某些权限.才能调用系统功能.如应用提供震动功能.必须在配置文件中加入震动权限. 属性 说明 android.permission.ACCESS_CHECKIN_PROPERTIES 允许读写访问 "properties"表在checkin数据库中,改值可以修改上传 android.permission.ACCESS_COARSE_LOCATION 通过WiFi或移动基站的方式获取用户错略的经纬度信息,定位精度大概误差在3

Android笔记——permission权限大全

访问登记属性 android.permission.ACCESS_CHECKIN_PROPERTIES ,读取或写入登记check-in数据库属性表的权限 获取错略位置 android.permission.ACCESS_COARSE_LOCATION,通过WiFi或移动基站的方式获取用户错略的经纬度信息,定位精度大概误差在30~1500米 获取精确位置 android.permission.ACCESS_FINE_LOCATION,通过GPS芯片接收卫星的定位信息,定位精度达10米以内 访问定

第三十九讲:Android之AndroidManifest.xml文件中注册权限

积土而为山,积水而为海.--<荀子·儒效> 本讲内容:android权限详细 1 访问登记属性 android.permission.ACCESS_CHECKIN_PROPERTIES ,读取或写入登记check-in数据库属性表的权限 2 获取错略位置 android.permission.ACCESS_COARSE_LOCATION,通过WiFi或移动基站的方式获取用户错略的经纬度信息,定位精度大概误差在30~1500米 3 获取精确位置 android.permission.ACCESS

Linux基础:用户身份与进程权限

一.基本概念 权限: 定义了用户对资源的访问能力. 用户: 对于多用户多任务的Linux操作系统来说,是通过什么来区分不同的使用者呢? 用户:用户就是获取资源或服务的凭证.当我们登录系统的时候,系统会提示输入用户名和密码进行登录验证.对于Linux系统来说,用户通常就是一个标识,以 UID 来表示. 进程: 程序的执行过程.所谓对计算机的操作,比如双击某个应用程序图标或者是通过命令提示符敲入命令,其最终产生的结果就是创建进程.看似用户的操作,实际上是进程在代替我们完成,进程就是我们访问计算机资源

android 学习十四 探索安全性和权限

1.部署安全性:应用程序必须使用数字证书才能安装到设备上. 2.执行期间的安全性: 2.1 使用独立进程 2.2 使用固定唯一用户ID 2.3  申明性权限模型 3数字证书 3.1.数字证书的用处:使用数字证书对应用进行签名后,防止应用程序被非法更新(只有相同的数字证书才能更新应用) 3.2.数字证书:包含相关信息(如:公司名称和地址等)的工件. 重要特性包括(签名和公/私钥). 3.3.数字证书的获取:a.从证书授权机构购买 b.使用keytool等工具生成. 3.4数字证书的存储:存储在密钥

Android M Permission 学习笔记

Android应用权限简要介绍 一个Android应用默认情况下是不拥有任何权限的, 这即是说, 在默认情况下, 一个应用是没有权利去进行一些可能会造成不好影响的操作的. 这些不好的影响可能是对其它应用,操作系统,或者是用户. 如果应用需要一些额外的能力,则它需要在AndroidManifest.xml中静态地声明相应的权限. 如果应用没有在manifest中声明权限, 却使用了相应的功能, 在调用到相应功能的时候, 将会抛出异常. 比如程序要发送一个请求,却忘记加Internet权限, 那么在

Android应用程序在新的进程中启动新的Activity的方法和过程分析

Android应用程序在新的进程中启动新的Activity的方法和过程分析 - 老罗的Android之旅 - 博客频道 - CSDN.NET ? ? ? ?前面我们在分析Activity启动过程的时候,看到同一个应用程序的Activity一般都是在同一个进程中启动,事实上,Activity也可以像Service一样在新的进程中启动,这样,一个应用程序就可以跨越好几个进程了,本文就分析一下在新的进程中启动Activity的方法和过程. ?? ? ? ?在前面Android进程间通信(IPC)机制B

Android获取设备隐私 忽略6.0权限管理

1.前言 (1).由于MIUI等部分国产定制系统也有权限管理,没有相关api,故无法判断用户是否允许获取联系人等隐私.在Android 6.0之后,新增权限管理可以通过官方api判断用户的运行状态: (2).我们指定targetSdkVersion为23或者之后我们还需要在运行时请求这些所需的权限.这很重要,因为已经出现了很多开发者把targetSdkVersion飙到了最新,然后发现自己的app疯狂的崩溃,这是由于他们没有实现执行运行时权限请求的代码.当你已经把一个targeting API

Android 6.0版本以后运行时权限提醒

Android发布6.0以后对app运行所需要的权限提示进行了友好的提示,类似于苹果系统,比如在某个页面要用到打电话的权限,会弹出一个提示框,提示你是否需要同意这个权限,如果同意则app就有了打电话的权限,既可以拨打电话了,不同意则不能拨打电话,只能去设置中勾选,在6.0以前,权限配置都是在AndroidManifest.xml文件中添加例如: <?xml version="1.0" encoding="utf-8"?> <manifest xml