记一次逆向学习的过程

起因:最近在做bilibili缓存视频合并工具,适配Android 11时需要获取Android/data目录的读取权限,根据APP“清浊”开发者的帖子: 如何评价在Android11中,/Android/data文件夹无法读写?可以获取Android/data目录的读取权限,现在是可以获取到了,但是不会判断是否已经获取到了权限,帖子上并没有提到权限的判断,他的帖子提到了:“后续的检测是否授权Android/data 就自行查看谷歌文档吧。”,啊这…

我要是想去看谷歌文档还会在这,直接去分析一下他的APP来获取权限判断的Java代码:首先安装他的APP“清浊”,打开软件可以看到他申请Android/data读取权限的Dialog弹窗:

选择“安卓 11 权限申请”作为关键字查找的入口,打开AndroidKiller逆向分析“清浊”APP,查找“安卓 11 权限申请”

复制前面的android_r_permission_title再进行查找,查找出来有很多,不要慌,直接选择有id字眼的:

把后面的16进制id"0x7f100028"转换为10进制为:2131755048后面要用到。

复制0x7f100028再进行查找,选择文件后缀为smali的。

将此文件转化为Java源码进行分析:


搜索刚转换的十进制:2131755048,确定位置:

接下来就是对与此相关上下、调用的代码的分析了:


......else{if (Build.VERSION.SDK_INT >= 30){paramBundle = getContentResolver().getPersistedUriPermissions().iterator();while (paramBundle.hasNext()) {if (((UriPermission)paramBundle.next()).isReadPermission()) {break label250;}}paramBundle = new b.a();paramBundle.b = getString(2131755047);paramBundle.a = getString(2131755048);paramBundle.d = getString(2131755263);paramBundle.c = new u1.f(this, 1);new b(this, this, paramBundle).c();}label250:new Thread(new g(this, 0)).start();new Thread(new g(this, 2)).start();}.........

我们的目的是为了解决:“后续的检测是否授权Android/data 就自行查看谷歌文档吧。”也就是获取:“判断是否已经授权读取Android/data”,有点绕口,多读几遍就好了,哈哈哈哈。

因为我们是从申请权限的Dialog弹窗开始入手的不难推出下列代码是与权限申请弹窗有关的代码

如果已经获取了权限那么就不会再弹出申请权限的Dialog弹窗了,也就不会运行这段代码了,所以上面可能有if、switch等进行判断是否有权限,而我们需要的就是判断是否有权限的代码,而且我们还发现了:

if (Build.VERSION.SDK_INT >= 30){......
}

我们的权限申请不就是基于Android 11吗?我们离成功不远了。

简单分析可知:

if (Build.VERSION.SDK_INT >= 30){paramBundle = getContentResolver().getPersistedUriPermissions().iterator();while (paramBundle.hasNext()) {if (((UriPermission)paramBundle.next()).isReadPermission()) {//有权限需要做的事情break label250;}}//没有权限需要做的事情}label250:new Thread(new g(this, 0)).start();new Thread(new g(this, 2)).start();

稍加转换一下:

if (Build.VERSION.SDK_INT >= 30) {paramBundle = getContentResolver().getPersistedUriPermissions().iterator();while (paramBundle.hasNext()) {if (((UriPermission)paramBundle.next()).isReadPermission()) {//有权限需要做的事情}else{//没有权限需要做的事情:申请权限啥的break ;}}
}

到此“判断Android 11是否有读取/Android/data文件夹权限”的代码逆向分析提取完毕,此文章仅仅是提供一种逆向分析思路,要判断是否有权限完全可以自己去看谷歌的文档。

通过安卓逆向来学习安卓开发相关推荐

  1. 项目“恶意APK检测系统”——安卓逆向部分学习

    项目"恶意APK检测系统"--安卓逆向部分学习 交流逆向工程相关知识 +Q1906661021 以下内容按笔者的浏览和学习顺序为序,并无难易之分 1.proguard progua ...

  2. 安卓逆向入门级学习————自用

    一.了解APK结构 META-INF:APK的签名 ,是apk正版盗版唯一标识 . AndroidManifest.xml:配置清单文件,标识这款软件有多少个界面,服务. classses.dex:A ...

  3. 安卓逆向007之安卓系统架构

    文章目录 Java闲谈 Android系统架构 安卓开发的第一个程序 安卓的四大组件 dalvik字节码 本篇文章主要记录一些概念性的东西 Java闲谈 继续深入学习安卓逆向,建议先去学一下java的 ...

  4. 2023安卓逆向 -- JNI学习(从开发到反编译)

    一.新建native C++项目,填写好项目信息,一路下一步即可 二.创建好项目,直接点击运行,出现下面界面,说明我们的环境都没有问题 三.Java层调用java层函数 1.新建一个Java Clas ...

  5. 安卓逆向必备之Java开发基础(上)

    文章目录 1.环境搭建 2.初识Java 3.注释 4.变量 6.输入和输出 5.条件语句 6.循环语句 7. 数据类型相关 7.1 整数类型 7.2 字符 7.3 字符串 7.4 数组 7.5 Li ...

  6. 安卓逆向——雷电模拟器安卓安装Xposed问题

    环境: 模拟器:雷电 4.0.43版本 安卓版本:7.1.2  x86 Xposed :4.0 以上 直接安装 Xposed 会,提示这类错误(这里测试版本有误,安卓5 重启会卡死)         ...

  7. 【安卓逆向】360加固-脱壳修复

    最近花了一些时间学习逆向脱壳,这方面一直投入的时间比较少.样本经过某加固宝进行加固,这里简单记录一下脱壳过程和思路,感谢某数字公司对安全加固的无私贡献,让我有机会小小的提高一下这方面的技能. *安卓逆 ...

  8. 安卓逆向学习笔记:native层开发、分析和调试基础

    安卓逆向学习笔记:native层开发.分析和调试基础 本笔记主要是自己看,所以如果有看不懂的地方也请多多包涵,这一篇的笔记主要是<Android应用安全防护和逆向分析>的部分内容. 一 A ...

  9. apk逆向思路_安卓逆向和手游辅助学习路线

    一.安卓逆向基础(建议1周) 1. 学习安卓逆向第一步必须先把环境搭建好,这是你学习安卓逆向的开始,环境搭建好后表示正式迈入安卓逆向.在环境安装的工程中会遇到很多细节上的问题. 2. 第二步就是要了解 ...

最新文章

  1. 从DDD看企业级问题解决方案框架
  2. centos 6.5下KVM环境搭建
  3. ASINetworkQueues(经典2)
  4. bose耳机信号断续_最便宜的TWS主动降噪耳机 233621 Zen 4400字深度评测
  5. 货拉拉携手神策数据,数据赋能企业,实现多元颠覆式创新
  6. Verilog功能模块——AXI4-Lite协议主机-连续区间写-使用FIFO
  7. Bug in Code CodeForces - 420C (计数,图论)
  8. xgboost相比传统gbdt有何不同?xgboost为什么快?xgboost如何支持并行?
  9. Mint-ui框架Index List 的应用,以及高度的适配问题
  10. B 树、B+ 树、B* 树
  11. Java变量名命名规则
  12. 量子计算机网络指数时间,科普:量子计算机是这样计算的
  13. Appium脚本(2):元素检测
  14. pytorch(8)-- resnet101 迁移学习记录
  15. python语言创始人中文名_十大编程语言创始人,看看有没有你在用的语言?
  16. Hotelling T2检验和多元方差分析
  17. 逆水寒服务器什么时候能维护好,逆水寒更新了什么内容 8月23日官方维护内容及时间一览...
  18. 【总结】最好的CV学习小组,超200个课时+10个方向+30个项目,从理论到实践全部系统掌握...
  19. Android 一键拨号
  20. python3实现maxent 最大熵模型

热门文章

  1. 真实收益DeFi崛起 这些DeFi协议已采用它
  2. java读取jpg点数_我的世界:基岩版beta1.16.0.61修复59个“特性”,同步Java版?
  3. 酷冷战神 先手致胜:腾讯ROG游戏手机6为游戏而生
  4. 我的世界服务器物品不丢弃,《我的世界》怎样处理没用的物品,这六个销毁物品方法了解一下!...
  5. web audio api 实现音频播放
  6. mac linux 笔记
  7. 会声会影X3常见问题80个解答
  8. 忧桑三角形,调了半天,真忧桑TAT
  9. 计算物体自由下落距离
  10. [微语 20.11.21] 洞天