工作总结——绕过系统权限检测调用特定接口

问题描述:
在日常使用中framework的一些接口是不想给第三方非system app使用的。这样做不但安全,也防止第三方会做一些流氓的事情。以android 5.1.1为例,无论是在调用ams中forceStopPackage还是pms中的addPreferredActivity在调用前都会check调用方的 permission,这就导致的不该调用的人调用后被抛出异常。但是如何能绕过这个check去做一些事情呢?

解决步骤:
just read the fucking souce code!!!
查看源码的过程中我们发现在AcitivtyManagerNative中有一个checkPermission的接口这个接口就是用来检测调用者权限的,但是这个是java层的代码我们无能为力,继续看!我们知道每个apk在安装后都有自己的uid,启动后进程都有自己的pid,而这个pid和uid是受apk签名和androidmanifest中的配置影响的。比如setting.apk这个android系统中都有的apk就是在androidmanifest 中写了

    coreApp="true"
    android:sharedUserId="android.uid.system"

又有和系统一样的签名才使得他能够调用forceStopPackage这种接口。我们看见系统在检测权限的时候就是用了这个性质进而来检测调用方的pid和system service的pid进行相互对比,如果一致那就授权调用方可以使用接口!ok那么就依照这个来欺骗系统吧。根据源码我们可以知道最后获取pid的代码是在android_util_Binder.cpp这个类中,这个类是在android_runtime.so这个文件中的类。我们知道这个so文件是java运行环境不可缺少的so文件,而一些system service恰巧也是需要这个so文件的ok那我们就通过注入指定的system service进程找到指定的模块,然后根据函数在模块中的相对地址去找这个函数,然后hook他就搞定了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值