看到群里发了两篇文章,出于猎奇,想看看这些个 App 在操纵系统缝隙获得系统权限以后,都干了什么事,因而就有了这篇文章。由于预备仓皇,有些 Code 没有仔细看,感爱好的同学可以自己去研讨研讨,多多会商
关于这个 App 是若何获得这个系统权限的,「 深蓝洞察 」2022 年度最 “不成赦” 缝隙 ,这篇文章讲的很清楚,就不再赘述了: Android Framework 中一个焦点的工具传递机制是 Parcel, 希望被经过 Parcel 传递的工具需要界说 readFromParcel 和 writeToParcel 接口函数,并实现 Parcelable 接口。 理论上来说,婚配序列化和反序列化函数该当是自反等效的,但系统 ROM 的开辟者在编程进程中能够会出现不婚配的情况,例如写入的时辰利用了 writeLong, 读取的时辰却利用了 readInt。 这类题目在运转进程中一般不会引发留意,也不会致使解体或毛病,但在进犯者经心结构下,却可终极操纵 Settings 和 system_server 进程,将这个细小的毛病转化为 StartAnyWhere 提权。 Android 近年来累计已修复上百个这类缝隙,并在 Android 13 中对 Parcel 机制做了鼎新,完全根绝了大部分此类进犯面。 我们这篇首要来看看XXX apk 内嵌提权代码,及静态下发 dex 分析 这个库里面供给的 Dex ,看看 App 到底想晓得用户的什么信息? 总的来说,App 获得系统权限以后,首要做了下面几件事(一般 App 没法大概很难做到的工作),各类不把用户当人了
别的也可以看到,App 对于各个手机厂商的研讨还是比力深入的,针对华为、Oppo、Vivo、Xiaomi 等厂商都有专门的处置,这个也是值得手机厂商去反向研讨的 0. Dex 文件信息XXX apk 内嵌提权代码,及静态下发 dex 分析 这个库供给的的 Dex 文件总共有 37 个,不多,也不大,渐渐看 由因而 dex 文件,所以间接利用 https://github.com/tp7309/TTDeDroid 这个库的工具翻开看即可,比如 showjar 95cd95ab4d694ad8bdf49f07e3599fb3.dex 默许是用 jadx 翻开,我们重点看内容 翻开后可以看到具体的功用逻辑,可以看到一个 dex 一般只干一件事,那我们重点看这件事的焦点实现部分即可 1. 告诉监听和告诉权限相关1.1 获得 Xiaomi 手机告诉内容
1. 反射拿到 ServiceManager一般我们会经过 ServiceManager 的 getService 方式获得系统的 Service,然落后行远程挪用 2. 经过 NotificationManagerService 获得告诉的具体内容经过 getService 传入 NotificationManagerService 获得 NotificationManager 以后,便可以挪用 getActiveNotifications 这个方式了,然后具体拿到 Notification 的下面几个字段
能够有人不晓得这玩意是啥,下面这个图里面就是一个典型的告诉 其代码以下 可以看到 getActiveNotifications 这个方式,是 System-only 的,普通的 App 是不能随意读取 Notification 的,可是这个 App 由于有权限,便可以获得 固然微信的防撤回插件利用的通常为别的一种方式,比如帮助办事,这玩意是合规的,可是还是保举大师能不用就不用,它能帮你防撤回,他就能获得告诉的内容,包括你晓得的和不晓得的 1.2. 翻开 Xiaomi 手机上的告诉权限(Push)
这么看来这个应当还是蛮适用的,你个调皮的用户,我发告诉都是为了你好,你怎样忍心把我关掉呢?让我帮你偷偷翻开吧 App 挪用 NotificationManagerService 的 setNotificationsEnabledForPackage 来设备告诉,可以强迫翻开告诉 frameworks/base/services/core/java/com/android/server/notification/NotificationManagerService.java 然后检察 NotificationManagerService 的 setNotificationsEnabledForPackage 这个方式,就是检察用户能否是翻开成功了 frameworks/base/services/core/java/com/android/server/notification/NotificationManagerService.java 还有针对 leb 的零丁处置~ 细 ! 1.3. 翻开 Vivo 机械上的告诉权限(Push)
焦点和上面阿谁是一样的,只不外这个是专门针对 vivo 手机的 1.4 翻开 Oppo 手机的告诉权限
没有反编译出来,看大要的逻辑应当是翻开 App 在 oppo 手机上的告诉权限 1.5 Notification 监听
这个就有点利害了,在监听 App 的 Notification 的发送,然落后行统计 监听的焦点代码 这个咱也不是很懂,是时辰跟做了多年 SystemUI 和 Launcher 的妻子乞助了....@史工 1.6 App Notification 监听
上面阿谁是 UdNotificationListenerExecutor , 这个是 NotificationListenerExecutor,UD 是啥? 这个反射挪用的 setNotificationListenerAccessGranted 是个 SystemAPI,获得告诉的利用权,公然有权限便可以为所欲为 1.7 翻开华为手机的告诉监听权限
华为也没法幸免,哈哈哈 1.8 翻开华为手机告诉权限
2. Backup 状态2.1. 鸿蒙 OS 上 App Backup 状态相关,保活用?
这个看了半天,应当是专门针对华为手机的,收到 IBackupSessionCallback 回调后,履行 PackageManagerEx.startBackupSession 方式 查了下这个方式的感化,启动备份或规复会话 2.2. Vivo 手机 Backup 状态相关
3. 文件相关3.1 获得华为手机 SLog 和 SharedPreferences 内容
拿这个干嘛呢?拿去做数据分析? 获得 SharedPreferences 获得 slog 4. 用户数据4.1 获得用户利用手机的数据
看焦点逻辑是同 usagestates 办事,来获得用户利用手机的数据,难怪我手机安装了什么 App、用了多久这些,其他 App 了如指掌 那末他可以拿到哪些数据呢?包罗万象~,包括但不限于 App 启动、退出、挂起、Service 变化、Configuration 变化、亮灭屏、开关机等,感爱好的可以看一下: frameworks/base/core/java/android/app/usage/UsageEvents.javaprivate static String eventToString(int eventType) { switch (eventType) { case Event.NONE: return "NONE"; case Event.ACTIVITY_PAUSED: return "ACTIVITY_PAUSED"; case Event.ACTIVITY_RESUMED: return "ACTIVITY_RESUMED"; case Event.FOREGROUND_SERVICE_START: return "FOREGROUND_SERVICE_START"; case Event.FOREGROUND_SERVICE_STOP: return "FOREGROUND_SERVICE_STOP"; case Event.ACTIVITY_STOPPED: return "ACTIVITY_STOPPED"; case Event.END_OF_DAY: return "END_OF_DAY"; case Event.ROLLOVER_FOREGROUND_SERVICE: return "ROLLOVER_FOREGROUND_SERVICE"; case Event.CONTINUE_PREVIOUS_DAY: return "CONTINUE_PREVIOUS_DAY"; case Event.CONTINUING_FOREGROUND_SERVICE: return "CONTINUING_FOREGROUND_SERVICE"; case Event.CONFIGURATION_CHANGE: return "CONFIGURATION_CHANGE"; case Event.SYSTEM_INTERACTION: return "SYSTEM_INTERACTION"; case Event.USER_INTERACTION: return "USER_INTERACTION"; case Event.SHORTCUT_INVOCATION: return "SHORTCUT_INVOCATION"; case Event.CHOOSER_ACTION: return "CHOOSER_ACTION"; case Event.NOTIFICATION_SEEN: return "NOTIFICATION_SEEN"; case Event.STANDBY_BUCKET_CHANGED: return "STANDBY_BUCKET_CHANGED"; case Event.NOTIFICATION_INTERRUPTION: return "NOTIFICATION_INTERRUPTION"; case Event.SLICE_PINNED: return "SLICE_PINNED"; case Event.SLICE_PINNED_PRIV: return "SLICE_PINNED_PRIV"; case Event.SCREEN_INTERACTIVE: return "SCREEN_INTERACTIVE"; case Event.SCREEN_NON_INTERACTIVE: return "SCREEN_NON_INTERACTIVE"; case Event.KEYGUARD_SHOWN: return "KEYGUARD_SHOWN"; case Event.KEYGUARD_HIDDEN: return "KEYGUARD_HIDDEN"; case Event.DEVICE_SHUTDOWN: return "DEVICE_SHUTDOWN"; case Event.DEVICE_STARTUP: return "DEVICE_STARTUP"; case Event.USER_UNLOCKED: return "USER_UNLOCKED"; case Event.USER_STOPPED: return "USER_STOPPED"; case Event.LOCUS_ID_SET: return "LOCUS_ID_SET"; case Event.APP_COMPONENT_USED: return "APP_COMPONENT_USED"; default: return "UNKNOWN_TYPE_" + eventType; } } 4.2 获得用户利用数据
上面阿谁是 UsageEventAllExecutor,这个是 UsageEventExecutor,首要拿用户利用 App 相关的数据,比如什么时辰翻开某个 App、什么时辰封闭某个 App,6 得很,真毒瘤 4.3 获得用户利用数据
看样子是注册了 App Usage 的权限,具体 Code 没有出来,欠好分析 5. Widget 和 icon 相关5.1. Vivo 手机增加 Widget
这个比力好了解,在 Vivo 手机上加个 Widget 5.2 获得 icon 相关的信息
这个好了解,获得 icon 相关的信息,比如在 Launcher 的哪一行,哪一列,能否在文件夹里面。题目是获得这玩意干嘛???迷 5.3 Oppo 手机增加 Widget
5.4 Xiaomi 手机更新图标?
小米手机上的桌面 icon 、shorcut 相关的操纵,小米的同学来认领 6. 自启动、关联启动、保活相关6.1 翻开 Oppo 手机自启动
看下面这一堆就晓得是和自启动相关的,看来自启动权限是每个 App 都蛋疼的工具啊 6.2 翻开 Vivo 关联启动权限
看名字就是和关联启动相关的权限,vivo 的同学来领了 间接写了个节点进去 6.3 封闭华为耗电精灵
看名字和实现,应当是和华为的耗电精灵有关系,华为的同学可以来看看 6.4 Vivo 机型保活相关
猜测和保活相关,Vivo 的同学可以来认领一下 7. 安装卸载相关7.1 Vivo 手机回滚卸载
这个看上去像是用户卸载 App 以后,回滚到预置的版本,好吧,这个是常规操纵 7.2 Vivo 手机 App 卸载
看名字和实现,也是和卸载回滚相关的 7.3 Vivo 手机 App 卸载相关
同上 其他SyncExecutor
没看懂是干嘛的,焦点应当是 Utils.updateSid ,可是没看到实现的地方 UdParseNotifyMessageExecutor
看名字应当是剖析从远端传来的 Notify Message,具体功用未知 6.3 TDLogcatExecutor
没太看懂这个是干嘛的,像是保活又不像,前面偶然候了再渐渐分析 6.4 QueryLBSInfoExecutor
获得 LBS Info 6.5 WriteSettingsExecutor
看名字应当是个工具类,写 Settings 字段的,至于些什么应当是静态下发的 6.6 OppoSettingExecutor
Setting 代理??没看懂干嘛的,Oppo 的同学来认领,难道是别的一种形式的保活? 6.7 CheckAsterExecutor
Check aster ?不是很懂 6.8 OppoCommunityIdExecutor
获得 Oppo 用户的 ID?要这玩意干么? 6.9 GetSettingsUsernameExecutor
获得 Oppo 手机用户的 username,话说你要这个啥用咧? 6.10 LogcatExecutor
设置 Log 的参数 6.11 VivoBrowserSettingsExecutor
Vivo 阅读器相关的设备,不太懂要干嘛 |