找回密码
 立即注册

App 获得了系统权限,真的可以为所欲为么?

| 2023-3-10 09:04 阅读 57155 评论 13

看到群里发了两篇文章,出于猎奇,想看看这些个 App 在操纵系统缝隙获得系统权限以后,都干了什么事,因而就有了这篇文章。由于预备仓皇,有些 Code 没有仔细看,感爱好的同学可以自己去研讨研讨,多多会商

  1. 深蓝洞察:2022 年度最 “不成赦” 缝隙
  2. XXX apk 内嵌提权代码,及静态下发 dex 分析

关于这个 App 是若何获得这个系统权限的「 深蓝洞察 」2022 年度最 “不成赦” 缝隙 ,这篇文章讲的很清楚,就不再赘述了:

Android Framework 中一个焦点的工具传递机制是 Parcel, 希望被经过 Parcel 传递的工具需要界说 readFromParcel 和 writeToParcel 接口函数,并实现 Parcelable 接口。 理论上来说,婚配序列化和反序列化函数该当是自反等效的,但系统 ROM 的开辟者在编程进程中能够会出现不婚配的情况,例如写入的时辰利用了 writeLong, 读取的时辰却利用了 readInt。 这类题目在运转进程中一般不会引发留意,也不会致使解体或毛病,但在进犯者经心结构下,却可终极操纵 Settings 和 system_server 进程,将这个细小的毛病转化为 StartAnyWhere 提权。 Android 近年来累计已修复上百个这类缝隙,并在 Android 13 中对 Parcel 机制做了鼎新,完全根绝了大部分此类进犯面。
但对于鸿蒙和绝大部分未升级到 Android 13 的装备和用户来说,他们仍处于危险当中。

我们这篇首要来看看XXX apk 内嵌提权代码,及静态下发 dex 分析 这个库里面供给的 Dex ,看看 App 到底想晓得用户的什么信息?

总的来说,App 获得系统权限以后,首要做了下面几件事(一般 App 没法大概很难做到的工作),各类不把用户当人了

  1. 自启动、关联启动相关的点窜,偷偷翻开大概默许翻开:与手机厂商斗智斗勇
  2. 开启告诉权限
  3. 监听告诉内容
  4. 获得用户的利用手机的信息,包括安装的 App、利用时长、用户 ID、用户名等
  5. 点窜系统设备
  6. 整一些系统权限的工具方便自己利用

别的也可以看到,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. 文件 : 95cd95ab4d694ad8bdf49f07e3599fb3.dex
  2. 功用 :获得用户的 Active 告诉
  3. 类名 :com.google.android.sd.biz_dynamic_dex.xm_ntf_info.XMGetNtfInfoExecutor

1. 反射拿到 ServiceManager

一般我们会经过 ServiceManager 的 getService 方式获得系统的 Service,然落后行远程挪用




2. 经过 NotificationManagerService 获得告诉的具体内容

经过 getService 传入 NotificationManagerService 获得 NotificationManager 以后,便可以挪用 getActiveNotifications 这个方式了,然后具体拿到 Notification 的下面几个字段

  1. 告诉的 Title
  2. 发生告诉的 App 的包名
  3. 告诉发送时候
  4. key
  5. channelID :the id of the channel this notification posts to.

能够有人不晓得这玩意是啥,下面这个图里面就是一个典型的告诉



其代码以下




可以看到 getActiveNotifications 这个方式,是 System-only 的,普通的 App 是不能随意读取 Notification 的,可是这个 App 由于有权限,便可以获得



固然微信的防撤回插件利用的通常为别的一种方式,比如帮助办事,这玩意是合规的,可是还是保举大师能不用就不用,它能帮你防撤回,他就能获得告诉的内容,包括你晓得的和不晓得的

1.2. 翻开 Xiaomi 手机上的告诉权限(Push)

  1. 文件 :0fc0e98ac2e54bc29401efaddfc8ad7f.dex
  2. 功用 :能够有的时辰小米用户会把 App 的告诉给关掉,App 想晓得这个用户能否是把告诉关了,假如关了就偷偷翻开
  3. 类名 :com.google.android.sd.biz_dynamic_dex.xm_permission.XMPermissionExecutor

这么看来这个应当还是蛮适用的,你个调皮的用户,我发告诉都是为了你好,你怎样忍心把我关掉呢?让我帮你偷偷翻开吧




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)

  1. 文件 :2eb20dc580aaa5186ee4a4ceb2374669.dex
  2. 功用 :Vivo 用户会把 App 的告诉给关掉,这样在 Vivo 手机上 App 就收不到告诉了,那不可,得偷偷翻开
  3. 类名 :com.google.android.sd.biz_dynamic_dex.vivo_open_push.VivoOpenPushExecutor

焦点和上面阿谁是一样的,只不外这个是专门针对 vivo 手机的



1.4 翻开 Oppo 手机的告诉权限

  1. 文件 :67c9e686004f45158e94002e8e781192.dex
  2. 类名 :com.google.android.sd.biz_dynamic_dex.oppo_notification_ut.OppoNotificationUTExecutor

没有反编译出来,看大要的逻辑应当是翻开 App 在 oppo 手机上的告诉权限



1.5 Notification 监听

  1. 文件 :ab8ed4c3482c42a1b8baef558ee79deb.dex
  2. 类名 :com.google.android.sd.biz_dynamic_dex.ud_notification_listener.UdNotificationListenerExecutor

这个就有点利害了,在监听 App 的 Notification 的发送,然落后行统计



监听的焦点代码




这个咱也不是很懂,是时辰跟做了多年 SystemUI 和 Launcher 的妻子乞助了....@史工

1.6 App Notification 监听

  1. 文件 :4f260398-e9d1-4390-bbb9-eeb49c07bf3c.dex
  2. 类名 :com.google.android.sd.biz_dynamic_dex.notification_listener.NotificationListenerExecutor

上面阿谁是 UdNotificationListenerExecutor , 这个是 NotificationListenerExecutor,UD 是啥?



这个反射挪用的 setNotificationListenerAccessGranted 是个 SystemAPI,获得告诉的利用权,公然有权限便可以为所欲为





1.7 翻开华为手机的告诉监听权限

  1. 文件 :a3937709-b9cc-48fd-8918-163c9cb7c2df.dex
  2. 类名 :com.google.android.sd.biz_dynamic_dex.hw_notification_listener.HWNotificationListenerExecutor

华为也没法幸免,哈哈哈




1.8 翻开华为手机告诉权限

  1. 文件 :257682c986ab449ab9e7c8ae7682fa61.dex
  2. 类名 :com.google.android.sd.biz_dynamic_dex.hw_permission.HwPermissionExecutor


2. Backup 状态

2.1. 鸿蒙 OS 上 App Backup 状态相关,保活用?

  1. 文件 :6932a923-9f13-4624-bfea-1249ddfd5505.dex
  2. 功用 :Backup 相关

这个看了半天,应当是专门针对华为手机的,收到 IBackupSessionCallback 回调后,履行 PackageManagerEx.startBackupSession 方式





查了下这个方式的感化,启动备份或规复会话



2.2. Vivo 手机 Backup 状态相关

  1. 文件 :8c34f5dc-f04c-40ba-98d4-7aa7c364b65c.dex
  2. 功用 :Backup 相关


3. 文件相关

3.1 获得华为手机 SLog 和 SharedPreferences 内容

  1. 文件 : da03be2689cc463f901806b5b417c9f5.dex
  2. 类名 :com.google.android.sd.biz_dynamic_dex.hw_get_input.HwGetInputExecutor

拿这个干嘛呢?拿去做数据分析?



获得 SharedPreferences



获得 slog



4. 用户数据

4.1 获得用户利用手机的数据

  1. 文件 : 35604479f8854b5d90bc800e912034fc.dex
  2. 功用 :看名字就晓得是获得用户的利用手机的数据
  3. 类名 :com.google.android.sd.biz_dynamic_dex.usage_event_all.UsageEventAllExecutor

看焦点逻辑是同 usagestates 办事,来获得用户利用手机的数据,难怪我手机安装了什么 App、用了多久这些,其他 App 了如指掌




那末他可以拿到哪些数据呢?包罗万象~,包括但不限于 App 启动、退出、挂起、Service 变化、Configuration 变化、亮灭屏、开关机等,感爱好的可以看一下:

frameworks/base/core/java/android/app/usage/UsageEvents.java
private 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 获得用户利用数据

  1. 文件:b50477f70bd14479a50e6fa34e18b2a0.dex
  2. 类名:com.google.android.sd.biz_dynamic_dex.usage_event.UsageEventExecutor

上面阿谁是 UsageEventAllExecutor,这个是 UsageEventExecutor,首要拿用户利用 App 相关的数据,比如什么时辰翻开某个 App、什么时辰封闭某个 App,6 得很,真毒瘤



4.3 获得用户利用数据

  1. 文件:1a68d982e02fc22b464693a06f528fac.dex
  2. 类名:com.google.android.sd.biz_dynamic_dex.app_usage_observer.AppUsageObserver

看样子是注册了 App Usage 的权限,具体 Code 没有出来,欠好分析



5. Widget 和 icon 相关

5.1. Vivo 手机增加 Widget

  1. 文件:f9b6b139-4516-4ac2-896d-8bc3eb1f2d03.dex
  2. 类名:com.google.android.sd.biz_dynamic_dex.vivo_widget.VivoAddWidgetExecutor

这个比力好了解,在 Vivo 手机上加个 Widget



5.2 获得 icon 相关的信息

  1. 文件:da60112a4b2848adba2ac11f412cccc7.dex
  2. 类名:com.google.android.sd.biz_dynamic_dex.get_icon_info.GetIconInfoExecutor

这个好了解,获得 icon 相关的信息,比如在 Launcher 的哪一行,哪一列,能否在文件夹里面。题目是获得这玩意干嘛???迷



5.3 Oppo 手机增加 Widget

  1. 文件:75dcc8ea-d0f9-4222-b8dd-2a83444f9cd6.dex
  2. 类名:com.google.android.sd.biz_dynamic_dex.oppoaddwidget.OppoAddWidgetExecutor


5.4 Xiaomi 手机更新图标?

  1. 文件:5d372522-b6a4-4c1b-a0b4-8114d342e6c0.dex
  2. 类名:com.google.android.sd.biz_dynamic_dex.xm_akasha.XmAkashaExecutor

小米手机上的桌面 icon 、shorcut 相关的操纵,小米的同学来认领



6. 自启动、关联启动、保活相关

6.1 翻开 Oppo 手机自启动

  1. 文件:e723d560-c2ee-461e-b2a1-96f85b614f2b.dex
  2. 类名:com.google.android.sd.biz_dynamic_dex.oppo_boot_perm.OppoBootPermExecutor

看下面这一堆就晓得是和自启动相关的,看来自启动权限是每个 App 都蛋疼的工具啊





6.2 翻开 Vivo 关联启动权限

  1. 文件:8b56d820-cac2-4ca0-8a3a-1083c5cca7ae.dex
  2. 类名:com.google.android.sd.biz_dynamic_dex.vivo_association_start.VivoAssociationStartExecutor

看名字就是和关联启动相关的权限,vivo 的同学来领了




间接写了个节点进去



6.3 封闭华为耗电精灵

  1. 文件:7c6e6702-e461-4315-8631-eee246aeba95.dex
  2. 类名:com.google.android.sd.biz_dynamic_dex.hw_hide_power_window.HidePowerWindowExecutor

看名字和实现,应当是和华为的耗电精灵有关系,华为的同学可以来看看





6.4 Vivo 机型保活相关

  1. 文件:7877ec6850344e7aad5fdd57f6abf238.dex
  2. 类名:com.google.android.sd.biz_dynamic_dex.vivo_get_loc.VivoGetLocExecutor

猜测和保活相关,Vivo 的同学可以来认领一下





7. 安装卸载相关

7.1 Vivo 手机回滚卸载

  1. 文件:d643e0f9a68342bc8403a69e7ee877a7.dex
  2. 类名:com.google.android.sd.biz_dynamic_dex.vivo_rollback_uninstall.VivoRollbackUninstallExecutor

这个看上去像是用户卸载 App 以后,回滚到预置的版本,好吧,这个是常规操纵




7.2 Vivo 手机 App 卸载

  1. 文件:be7a2b643d7e8543f49994ffeb0ee0b6.dex
  2. 类名:com.google.android.sd.biz_dynamic_dex.vivo_official_uninstall.OfficialUntiUninstallV3

看名字和实现,也是和卸载回滚相关的




7.3 Vivo 手机 App 卸载相关

  1. 文件:183bb87aa7d744a195741ce524577dd0.dex
  2. 类名:com.google.android.sd.biz_dynamic_dex.vivo_official_uninstall.VivoOfficialUninstallExecutor

同上




其他

SyncExecutor

  1. 文件:f4247da0-6274-44eb-859a-b4c35ec0dd71.dex
  2. 类名:com.google.android.sd.biz_dynamic_dex.sync.SyncExecutor

没看懂是干嘛的,焦点应当是 Utils.updateSid ,可是没看到实现的地方



UdParseNotifyMessageExecutor

  1. 文件:f35735a5cbf445c785237797138d246a.dex
  2. 类名:com.google.android.sd.biz_dynamic_dex.ud_parse_nmessage.UdParseNotifyMessageExecutor

看名字应当是剖析从远端传来的 Notify Message,具体功用未知




6.3 TDLogcatExecutor

  1. 文件
    1. 8aeb045fad9343acbbd1a26998b6485a.dex
    2. 2aa151e2cfa04acb8fb96e523807ca6b.dex

  2. 类名
    1. com.google.android.sd.biz_dynamic_dex.td.logcat.TDLogcatExecutor
    2. com.google.android.sd.biz_dynamic_dex.td.logcat.TDLogcatExecutor

没太看懂这个是干嘛的,像是保活又不像,前面偶然候了再渐渐分析




6.4 QueryLBSInfoExecutor

  1. 文件:74168acd-14b4-4ff8-842e-f92b794d7abf.dex
  2. 类名:com.google.android.sd.biz_dynamic_dex.query_lbs_info.QueryLBSInfoExecutor

获得 LBS Info



6.5 WriteSettingsExecutor

  1. 文件:6afc90e406bf46e4a29956aabcdfe004.dex
  2. 类名:com.google.android.sd.biz_dynamic_dex.write_settings.WriteSettingsExecutor

看名字应当是个工具类,写 Settings 字段的,至于些什么应当是静态下发的



6.6 OppoSettingExecutor

  1. 文件:61517b68-7c09-4021-9aaa-cdebeb9549f2.dex
  2. 类名:com.google.android.sd.biz_dynamic_dex.opposettingproxy.OppoSettingExecutor

Setting 代理??没看懂干嘛的,Oppo 的同学来认领,难道是别的一种形式的保活?



6.7 CheckAsterExecutor

  1. 文件:561341f5f7976e13efce7491887f1306.dex
  2. 类名:com.google.android.sd.biz_dynamic_dex.check_aster.CheckAsterExecutor

Check aster ?不是很懂



6.8 OppoCommunityIdExecutor

  1. 文件:538278f3-9f68-4fce-be10-12635b9640b2.dex
  2. 类名:com.google.android.sd.biz_dynamic_dex.oppo_community_id.OppoCommunityIdExecutor

获得 Oppo 用户的 ID?要这玩意干么?



6.9 GetSettingsUsernameExecutor

  1. 文件:4569a29c-b5a8-4dcf-a3a6-0a2f0bfdd493.dex
  2. 类名:com.google.android.sd.biz_dynamic_dex.oppo_get_settings_username.GetSettingsUsernameExecutor

获得 Oppo 手机用户的 username,话说你要这个啥用咧?



6.10 LogcatExecutor

  1. 文件:218a37ea-710d-49cb-b872-2a47a1115c69.dex
  2. 类名:com.google.android.sd.biz_dynamic_dex.logcat.LogcatExecutor

设置 Log 的参数




6.11 VivoBrowserSettingsExecutor

  1. 文件:136d4651-df47-41b4-bb80-2ec0ab1bc775.dex
  2. 类名:com.google.android.sd.biz_dynamic_dex.vivo_browser_settings.VivoBrowserSettingsExecutor

Vivo 阅读器相关的设备,不太懂要干嘛



  • water743 2023-3-10 09:15
    多多:是在说我吗
  • easy8 2023-3-10 09:14
    然后6.1那个是正常行为,只是针对不同系统做了适配跳转安全中心,权限还是要用户手动赋予的
  • qq182056045 2023-3-10 09:14
    那篇文章只公布了三星的提权,现在这样看来应该还有其他的提权漏洞?不然没有针对miui或者coloros的必要
  • bxdg42578670 2023-3-10 09:13
    然而你说的这种行为就是 root [惊喜]
  • 游客 2023-3-10 09:12
    StartAnyWhere 怎么让APP获取系统权限的?看起来也只能借助StartAnyWhere启动某些页面?
  • megcjgm 2023-3-10 09:12
    我是vivo手机,我可以通过这种渠道自己开发这种apk来不root也能卸载它的内置软件吗?

查看全部评论>>

文章点评
2022-04-26 09:16
APP运营 手机GIF动画制作软件哪个好?6款手机GIF制作APP推荐
  我们经常能看到视频做成的GIF动画表情,以前GIF动画智能通过电脑软件制作,不过如 <详情>
2022-04-26 10:02
APP运营 推荐10个超级棒的英语学习APP
现代社会的人,基本上已经没有办法不接触英语了,英语作为世界最通行的语言,就算在国 <详情>
2022-04-26 10:07
APP运营 App开发、小程序开发该如何选择技术开发公司?
术业有专攻。一个好的开发团队对做好一款App至关重要,好的团队会有专业且标准的需求 <详情>
2022-04-26 10:28
APP运营 如何用手机远程协助长辈?我找出了6个最佳方法!(免ROOT ...
最近我婆婆头一次换了部智能手机,难免这也得教那也得教但毕竟没办法随时亲身面授,我 <详情>
2022-04-26 10:46
APP运营 如何在M1的MacBook中安装手机App?| 竟有点实用!
这篇文章的主题其实非常简单,就是在M1的MacBook上安装手机的App。但一开始我觉得这个 <详情>
2022-04-26 10:51
APP运营 推荐16个非常棒的在线学习APP
现在的人们,每天日常生活中,基本上是已经完全离不开手机了,我也经常玩手机,在手机 <详情>
2022-04-26 11:07
APP运营 手机App确实在偷听你谈话,方法死都想不到
早在去年就有用户发现:只要和朋友聊天时提到某样商品,打开购物软件,立刻就会收到相 <详情>
2022-04-26 12:53
APP运营 市场部、运营部、品牌部,别傻傻分不清楚!
摘要:市场、运营、品牌、公关、新媒体、策划……,如何区分这些似是而非的职能,看这 <详情>
2022-04-26 12:56
APP运营 运营知识应该从何学习?
先学理论,再get技能,最后用学到的这些运营理论+技能做出真实有数据的运营项目,完整 <详情>
2022-04-26 13:18
APP运营 搞用户运营的看过来!蔚来、理想、小鹏、威马APP用户 ...
我是做社区运营工作的。上个星期我在面试社区运营的候选人,我问她在国内你认为运营最 <详情>