【胖虎的逆向之路】如何绕过 Android11新特性之 “包的可见性“
前言
距离Android11 发布已经过去了,当初我有大概了解过一些Android 11上的行为变更,总体变化虽然不少,但是要求我们必须去适配的地方并不算多。对于我而言可能需要注意的是文件相关权限,譬如从访问文件到访问媒体文件再到访问全部文件,Android 日益收缩的权限,对于普通用户而言更为安全、高效,从眼光放到开发者身上则不为然,一个APP不仅仅是运行在一部手机上,所以适配要做好,比如接下来我们要讲的 “包的可见性”
包的可见性
Google原文 对包的可见性介绍
原文是英文版的,阅读有诸多不便, 大概意思是这样
概述
当应用程序以 Android 11(API 级别 30)或更高版本为目标并查询有关设备上安装的其他应用程序的信息时,系统会默认过滤此信息。从您的应用的角度来看,有限的包可见性减少了似乎安装在设备上的应用数量。
一简单理解概括就是除了系统应用,别的应用需要先设置才能访问
那么回到问题,怎么设置呢? Google提供了两个办法
常规解决办法
一、设置 <queries>
增加包的可见性
如果您知道要查询或与之交互的特定应用程序集,例如与您的应用程序集成的应用程序,或您使用其服务的应用程序,请将其包名称包含在<package>
元素内的 一组<queries>
元素中:
<manifest package="com.example.game"><queries><package android:name="com.example.store" /><package android:name="com.example.services" /></queries>...
</manifest>
使用以上办法需要注意的是如果<package>
在应用程序的清单中声明一个元素,则与该包名称关联的应用程序会出现在与 PackageManager该应用程序中的组件匹配的任何查询的结果中。
二、QUERY_ALL_PACKAGES 权限
在极少数情况下,您的应用可能需要查询设备上所有已安装的应用或与之交互,而与它们包含的组件无关。为了允许您的应用程序查看所有其他已安装的应用程序,系统提供了 QUERY_ALL_PACKAGES 权限。
简单理解:我要获取本机上所有的软件包
以下列表提供了一些使用案例的示例,其中 QUERY_ALL_PACKAGES权限适合包括:
·无障碍应用
·浏览器
·设备管理应用
·安全应用
·防病毒应用程序
但是,在绝大多数情况下,可以通过与自动可见 的应用程序集进行交互并在清单文件中声明应用程序需要访问的其他应用程序来满足应用程序的用例。为了尊重用户隐私,应用应请求最小量的包可见性,以使应用正常工作。
非正常解决手段
以上则是比较正统的解决办法,而接下来要说的是通过Hook 系统函数来绕过对包的可见性限制
首先我们从日志判断,会有如下的日志打印
Unable to start service Intent **not found
通过以上输出的日志信息,通过BindService代码定位到系统位置在
com.android.server.am.ActiveServices类retrieveServiceLocked方法中,如下图
继续探究该类,发现是判断了 ServiceInfo == null 所以弹出了该Toast,且返回null,重点就是回到了 **resolveService()**方法中,如下图
在其内部,可以看到是将方法调用转到了 resolveServiceInternal(),下图是内部实现
由上图方法,并经过多次实验得知,核心函数跳转到了 queryIntentServicesInternal() ,明确在其内部执行了如下方法
其中,核心判断包的可见性相关参数限制的函数是在 applyPostServiceResoultionFilter() 中, 那么接下来再去跳转到该方法内部细致分析一下
仔细阅读该方法之后, 发现该方法的核心函数是 shouldFilterApplication() 中,该方法的介绍如下
/*** Returns true if the calling package should not be able * to see the target package, false if no* filtering should be done.* ......*/
其大概意思是 如果调用包经过判断是否可以发现目标包,如果可以则返回 true,否则返回 false
那么明确该方法之后,我们在做的事情就会简单清晰,而且明了~
编写Code代码 ~
作者已经实现完成~ 点此下载
提取码:kf24
本篇文章到此结束咯…祝各位玩得愉快~
【胖虎的逆向之路】如何绕过 Android11新特性之 “包的可见性“相关推荐
- 【胖虎的逆向之路】03——Android一代壳脱壳办法罗列实操
[胖虎的逆向之路]03--Android脱壳办法罗列&脱壳原理详解 [胖虎的逆向之路]01--动态加载和类加载机制详解 [胖虎的逆向之路]02--Android整体加壳原理详解&实现 ...
- 【胖虎的逆向之路】04——脱壳(一代壳)原理脱壳相关概念详解
[胖虎的逆向之路]04--脱壳(一代壳)原理&脱壳相关概念详解 [胖虎的逆向之路]01--动态加载和类加载机制详解 [胖虎的逆向之路]02--Android整体加壳原理详解&实现 [胖 ...
- 【胖虎的逆向之路】01——动态加载和类加载机制详解
胖虎的逆向之路 01--动态加载和类加载机制详解 一.前言 二.类的加载器 1. 双亲委派模式 2. Android 中的类加载机制 1)Android 基本类的预加载 2)Android类加载器层级 ...
- 【胖虎的逆向之路】02——Android整体加壳原理详解实现
[胖虎的逆向之路](02)--Android整体加壳原理详解&实现 Android Apk的加壳原理流程及详解 文章目录 [胖虎的逆向之路](02)--Android整体加壳原理详解& ...
- 【胖虎的逆向之路】Android 7.0 上Magisk配合Xposed的相关问题
基础环境 1.Android 7.1.0(硬件小米6 sagit): 2.Magisk V23.0 3.Xposed (由Magisk-模块-搜索下载) 安装 首先android刷机.Magisk R ...
- H5学习之路之Input类型新特性
input的输入类型在H5之前已经有很多很广泛的使用了,但是H5其实加入了很多新的属性和验证,提供方便的同时给我们开发带来了更多的是安全性的提升,今天我们就简单的说一下H5中新的input属性和用法. ...
- 电脑工具栏怎么调整到下面_PDF格式的合同怎么盖公章?这不是在为难我胖虎吗?...
领导发了个文件,让我给帮忙盖个章.盖章?小事!打开一看卧槽!居然是PDF格式的!您这不是在为难我吗??? 能不盖吗?当然不能!不过想难倒我胖虎却没那么容易!嘿嘿!有小伙伴支招说用PS就可以,本胖虎一笑 ...
- 天辰的救赎(JS)第三章(胖虎的指引)
阅读须知 这是一篇小说风格的关于JS的文章,网上已经有大量的优秀技术文章和书籍,写系列的主要目的只是想尝试用不同的方式来分享一些关于JS的知识,或者可以说只是单纯地为了好玩,文笔不怎么好,希望大家多多 ...
- java画胖虎_漫画家马千里闲在家里画的“胖虎下山图”火了,关键部位令人瞩目...
原标题:漫画家马千里闲在家里画的"胖虎下山图"火了,关键部位令人瞩目 这段时间大家都闲在家里不出门,这时候宅男的优越性终于体现出来了,刷一刷社交网络就看到一群人咆哮着想要出去玩,否 ...
最新文章
- 源码资本深耕“三横九纵”科技助力网聚优秀企业
- NS2仿真:公交车移动周期模型及性能分析
- 如何查看阵列卡的队列深度
- JOptionPane提示框的一些常用方法
- 本地计算机上的mysql80服务启动后停止 某些_MySQL服务启动:某些服务在未由其他服务或程序使用时将自动停止...
- Mcad学习笔记之异步编程(AsyncCallback委托,IAsyncResult接口,BeginInvoke方法,EndInvoke方法的使用小总结)...
- Python 格式化字符串f-string概览(转载)
- FreeBSD安装MySQL
- [20181031]如何确定db_link的进程号.txt
- 视频剪辑软件调研分析-iMovie、Final Cut Pro、视频剪辑大师
- 北京飞漫软件魏永明:浏览器技术与三网融合
- ISE中FIFO IP核的Standard FIFO和First-word-Fall-Through模式的仿真比较
- 2022年金砖国家职业技能大赛(决赛)网络空间安全赛项 | 浙江赛区选拔赛 任务书
- vue 父传子props
- Unity animation动画编辑器快捷键
- 我们该如何运营Facebook账号呢?
- 7-2 迪杰斯特拉方法实现最短路径
- es是什么意思java_Elasticsearch----java操作ES
- ChatGPT OpenAI 人工智能语言处理工具
- 达人评测i5 1135g7和i7 8565u选哪个好
热门文章
- 那个牛逼的斯坦福大学
- 王者荣耀服务器维护多久结束,王者荣耀健康系统重置时间 时间限制规则详解...
- 小米面试题:手机分身,电话号码隐藏。
- window7调用计算机,教你查看win7系统电脑使用记录的具体方法
- 中国石油大学华东2013-2014-1c语言a卷_答案,中国石油大学(华东)2012—2013学年第二学期期中A卷试卷答案...
- 通过运营界面上传图片失败,浏览器提示上传文件时发生HTTP错误(错误代码:500)
- 自建服务器同步软件,黑群晖自建anki服务器电脑anki软件设置同步
- 【OpenCV学习笔记 020】K-Means聚类算法介绍及实现
- 洗牌-牛客 第一行一个数T(T ≤ 100),表示数据组数。对于每组数据,第一行两个数n,k(1 ≤ n,k ≤ 100),接下来一行有2n个数a1,a2,...,a2n(1 ≤ ai ≤ 1000
- 我学历不高,怎样找前端的工作?