前一段时刻有个 App 很火,是 Android App 运用了 Android 体系缝隙,取得了体系权限,做了许多工作。想看看这些个 App 在运用体系缝隙获取体系权限之后,都干了什么事,所以就有了这篇文章。因为预备仓促,有些 Code 没有仔细看,感兴趣的同学能够自己去研讨研讨,多多谈论,对应的文章和 Code 链接都在下面:
关于这个 App 是怎么获取这个体系权限的,Android 反序列化缝隙攻防史话,这篇文章讲的很清楚,就不再赘述了,我也不是安全方面的专家,可是建议我们多读几遍这篇文章
序列化和反序列化是指将内存数据结构转换为字节省,经过网络传输或许保存到磁盘,然后再将字节省康复为内存目标的过程。在 Web 安全领域,呈现过许多反序列化缝隙,比方 PHP 反序列化、Java 反序列化等。因为在反序列化的过程中触发了非预期的程序逻辑,然后被进犯者用精心构造的字节省触发并运用缝隙然后终究完成任意代码履行等目的。
这篇文章首要来看看XXX apk 内嵌提权代码,及动态下发 dex 剖析这个库里边供给的 Dex ,看看 App 到底想知道用户的什么信息?总的来说,App 获取体系权限之后,首要做了下面几件事(正常 App 无法或许很难做到的工作),各种不把用户当人了。
- 自发动、相关发动相关的修正,悄悄翻开或许默许翻开:与手机厂商斗智斗勇。
- 敞开告诉权限。
- 监听告诉内容。
- 获取用户的运用手机的信息,包含安装的 App、运用时长、用户 ID、用户名等。
- 修正体系设置。
- 整一些体系权限的东西方便自己运用。
别的也能够看到,这个 App 对于各个手机厂商的研讨仍是比较深化的,针对华为、Oppo、Vivo、Xiaomi 等终端厂商都有专门的处理,这个也是值得手机厂商去反向研讨和防护的。
最好我还加上了这篇文章在微信大众号发出去之后的用户谈论,以及知乎答复的谈论区(问题现已被删了,可是我能够看到:怎么点评拼多多疑似运用缝隙进犯用户手机,盗取竞争对手软件数据,避免自己被卸载? – Gracker 的答复 – 知乎www.zhihu.com/question/58…2471 个赞)能够说是脑洞大开(关于 App 怎么作恶)。
0. Dex 文件信息
本文所研讨的 dex 文件是从XXX apk 内嵌提权代码,及动态下发 dex 剖析这个库房获取的,Dex 文件总共有 37 个,不多,也不大,渐渐看。这些文件会经过后台服务器动态下发,然后在 App 发动的时分进行动态加载,能够说是隐蔽的很,然而 Android 毕竟是开源软件,要抓你个 App 的行为仍是很简单的,这些 Dex 便是被抓包抓出来的,能够说是人脏货俱全了。
因为是 dex 文件,所以直接运用github.com/tp7309/TTDe…这个库的反编译东西翻开看即可,比方我装备好之后,直接运用 showjar 这个指令就能够
showjar 95cd95ab4d694ad8bdf49f07e3599fb3.dex
默许是用 jadx 翻开,就能够看到反编译之后的内容,我们要点看 Executor 里边的代码逻辑即可
翻开后能够看到详细的功用逻辑,能够看到一个 dex 一般只干一件事,那我们要点看这件事的中心完成部分即可
1. 告诉监听和告诉权限相关
1.1 获取 Xiaomi 手机告诉内容
- 文件 : 95cd95ab4d694ad8bdf49f07e3599fb3.dex
- 功用 :获取用户的 Active 告诉
- 类名 :com.google.android.sd.biz_dynamic_dex.xm_ntf_info.XMGetNtfInfoExecutor
1. 反射拿到 ServiceManager
一般我们会经过 ServiceManager 的 getService 办法获取体系的 Service,然后进行远程调用
2. 经过 NotificationManagerService 获取告诉的详细内容
经过 getService 传入 NotificationManagerService 获取 NotificationManager 之后,就能够调用getActiveNotifications这个办法了,然后详细拿到 Notification 的下面几个字段
- 告诉的 Title
- 发生告诉的 App 的包名
- 告诉发送时刻
- key
- channelID :the id of the channel this notification posts to.
或许有人不知道这玩意是啥,下面这个图里边便是一个典型的告诉
其代码如下
能够看到 getActiveNotifications 这个办法,是System-only的,一般的 App 是不能随便读取 Notification 的,可是这个 App 因为有权限,就能够获取
当然微信的防撤回插件运用的一般是别的一种办法,比方辅助服务,这玩意是合规的,可是仍是引荐我们能不必就不必,它能帮你防撤回,他就能获取告诉的内容,包含你知道的和不知道的
1.2. 翻开 Xiaomi 手机上的告诉权限(Push)
- 文件 :0fc0e98ac2e54bc29401efaddfc8ad7f.dex
- 功用 :或许有的时分小米用户会把 App 的告诉给关掉,App 想知道这个用户是不是把告诉关了,如果关了就悄悄翻开
- 类名 :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)
- 文件 :2eb20dc580aaa5186ee4a4ceb2374669.dex
- 功用 :Vivo 用户会把 App 的告诉给关掉,这样在 Vivo 手机上 App 就收不到告诉了,那不可,得悄悄翻开
- 类名 :com.google.android.sd.biz_dynamic_dex.vivo_open_push.VivoOpenPushExecutor
中心和上面那个是相同的,只不过这个是专门针对 vivo 手机的
1.4 翻开 Oppo 手机的告诉权限
- 文件 :67c9e686004f45158e94002e8e781192.dex
- 类名 :com.google.android.sd.biz_dynamic_dex.oppo_notification_ut.OppoNotificationUTExecutor
没有反编译出来,看大约的逻辑应该是翻开 App 在 oppo 手机上的告诉权限
1.5 Notification 监听
- 文件 :ab8ed4c3482c42a1b8baef558ee79deb.dex
- 类名 :com.google.android.sd.biz_dynamic_dex.ud_notification_listener.UdNotificationListenerExecutor
这个就有点厉害了,在监听 App 的 Notification 的发送,然后进行统计
监听的中心代码
这个咱也不是很懂,是时分跟做了多年 SystemUI 和 Launcher 的老婆求助了….@史工
1.6 App Notification 监听
- 文件 :4f260398-e9d1-4390-bbb9-eeb49c07bf3c.dex
- 类名 :com.google.android.sd.biz_dynamic_dex.notification_listener.NotificationListenerExecutor
上面那个是 UdNotificationListenerExecutor , 这个是 NotificationListenerExecutor,UD 是啥?
这个反射调用的 setNotificationListenerAccessGranted 是个 SystemAPI,取得告诉的运用权,果然有权限就能够随心所欲
1.7 翻开华为手机的告诉监听权限
- 文件 :a3937709-b9cc-48fd-8918-163c9cb7c2df.dex
- 类名 :com.google.android.sd.biz_dynamic_dex.hw_notification_listener.HWNotificationListenerExecutor
华为也无法幸免,哈哈哈
1.8 翻开华为手机告诉权限
- 文件 :257682c986ab449ab9e7c8ae7682fa61.dex
- 类名 :com.google.android.sd.biz_dynamic_dex.hw_permission.HwPermissionExecutor
2. Backup 状况
2.1. 鸿蒙 OS 上 App Backup 状况相关,保活用?
- 文件 :6932a923-9f13-4624-bfea-1249ddfd5505.dex
- 功用 :Backup 相关
这个看了半天,应该是专门针对华为手机的,收到 IBackupSessionCallback 回调后,履行 PackageManagerEx.startBackupSession 办法
查了下这个办法的作用,发动备份或康复会话
2.2. Vivo 手机 Backup 状况相关
- 文件 :8c34f5dc-f04c-40ba-98d4-7aa7c364b65c.dex
- 功用 :Backup 相关
3. 文件相关
3.1 获取华为手机 SLog 和 SharedPreferences 内容
- 文件 : da03be2689cc463f901806b5b417c9f5.dex
- 类名 :com.google.android.sd.biz_dynamic_dex.hw_get_input.HwGetInputExecutor
拿这个干嘛呢?拿去做数据剖析?
获取 SharedPreferences
获取 slog
4. 用户数据
4.1 获取用户运用手机的数据
- 文件 : 35604479f8854b5d90bc800e912034fc.dex
- 功用 :看姓名就知道是获取用户的运用手机的数据
- 类名 :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 获取用户运用数据
- 文件:b50477f70bd14479a50e6fa34e18b2a0.dex
- 类名:com.google.android.sd.biz_dynamic_dex.usage_event.UsageEventExecutor
上面那个是 UsageEventAllExecutor,这个是 UsageEventExecutor,首要拿用户运用 App 相关的数据,比方什么时分翻开某个 App、什么时分封闭某个 App,6 得很,真毒瘤
4.3 获取用户运用数据
- 文件:1a68d982e02fc22b464693a06f528fac.dex
- 类名:com.google.android.sd.biz_dynamic_dex.app_usage_observer.AppUsageObserver
看样子是注册了 App Usage 的权限,详细 Code 没有出来,欠好剖析
5. Widget 和 icon 相关
经吃瓜群众提醒,App 能够经过 Widget 伪造一个 icon,用户在长按图标卸载这个 App 的时分,你以为卸载了,其实是把他伪造的这个 Widget 给删除了,真实的 App 还在 (不过我没有遇到过,这么搞真的是脑洞大开,且不把 Android 用户当人)
5.1. Vivo 手机增加 Widget
- 文件:f9b6b139-4516-4ac2-896d-8bc3eb1f2d03.dex
- 类名:com.google.android.sd.biz_dynamic_dex.vivo_widget.VivoAddWidgetExecutor
这个比较好了解,在 Vivo 手机上加个 Widget
5.2 获取 icon 相关的信息
- 文件:da60112a4b2848adba2ac11f412cccc7.dex
- 类名:com.google.android.sd.biz_dynamic_dex.get_icon_info.GetIconInfoExecutor
这个好了解,获取 icon 相关的信息,比方在 Launcher 的哪一行,哪一列,是否在文件夹里边。问题是获取这玩意干嘛???迷
5.3 Oppo 手机增加 Widget
- 文件:75dcc8ea-d0f9-4222-b8dd-2a83444f9cd6.dex
- 类名:com.google.android.sd.biz_dynamic_dex.oppoaddwidget.OppoAddWidgetExecutor
5.4 Xiaomi 手机更新图标?
- 文件:5d372522-b6a4-4c1b-a0b4-8114d342e6c0.dex
- 类名:com.google.android.sd.biz_dynamic_dex.xm_akasha.XmAkashaExecutor
小米手机上的桌面 icon 、shorcut 相关的操作,小米的同学来招领
6. 自发动、相关发动、保活相关
6.1 翻开 Oppo 手机自发动
- 文件:e723d560-c2ee-461e-b2a1-96f85b614f2b.dex
- 类名:com.google.android.sd.biz_dynamic_dex.oppo_boot_perm.OppoBootPermExecutor
看下面这一堆就知道是和自发动相关的,看来自发动权限是每个 App 都蛋疼的东西啊
6.2 翻开 Vivo 相关发动权限
- 文件:8b56d820-cac2-4ca0-8a3a-1083c5cca7ae.dex
- 类名:com.google.android.sd.biz_dynamic_dex.vivo_association_start.VivoAssociationStartExecutor
看姓名便是和相关发动相关的权限,vivo 的同学来领了
直接写了个节点进去
6.3 封闭华为耗电精灵
- 文件:7c6e6702-e461-4315-8631-eee246aeba95.dex
- 类名:com.google.android.sd.biz_dynamic_dex.hw_hide_power_window.HidePowerWindowExecutor
看姓名和完成,应该是和华为的耗电精灵有关系,华为的同学能够来看看
6.4 Vivo 机型保活相关
- 文件:7877ec6850344e7aad5fdd57f6abf238.dex
- 类名:com.google.android.sd.biz_dynamic_dex.vivo_get_loc.VivoGetLocExecutor
猜测和保活相关,Vivo 的同学能够来招领一下
7. 安装卸载相关
7.1 Vivo 手机回滚卸载
- 文件:d643e0f9a68342bc8403a69e7ee877a7.dex
- 类名:com.google.android.sd.biz_dynamic_dex.vivo_rollback_uninstall.VivoRollbackUninstallExecutor
这个看上去像是用户卸载 App 之后,回滚到预置的版本,好吧,这个是常规操作
7.2 Vivo 手机 App 卸载
- 文件:be7a2b643d7e8543f49994ffeb0ee0b6.dex
- 类名:com.google.android.sd.biz_dynamic_dex.vivo_official_uninstall.OfficialUntiUninstallV3
看姓名和完成,也是和卸载回滚相关的
7.3 Vivo 手机 App 卸载相关
- 文件:183bb87aa7d744a195741ce524577dd0.dex
- 类名:com.google.android.sd.biz_dynamic_dex.vivo_official_uninstall.VivoOfficialUninstallExecutor
同上
其他
SyncExecutor
- 文件:f4247da0-6274-44eb-859a-b4c35ec0dd71.dex
- 类名:com.google.android.sd.biz_dynamic_dex.sync.SyncExecutor
没看懂是干嘛的,中心应该是 Utils.updateSid ,可是没看到完成的当地
UdParseNotifyMessageExecutor
- 文件:f35735a5cbf445c785237797138d246a.dex
- 类名:com.google.android.sd.biz_dynamic_dex.ud_parse_nmessage.UdParseNotifyMessageExecutor
看姓名应该是解析从远端传来的 Notify Message,详细功用未知
TDLogcatExecutor
-
文件
- 8aeb045fad9343acbbd1a26998b6485a.dex
- 2aa151e2cfa04acb8fb96e523807ca6b.dex
-
类名
- com.google.android.sd.biz_dynamic_dex.td.logcat.TDLogcatExecutor
- com.google.android.sd.biz_dynamic_dex.td.logcat.TDLogcatExecutor
没太看懂这个是干嘛的,像是保活又不像,后面有时刻了再渐渐剖析
QueryLBSInfoExecutor
- 文件:74168acd-14b4-4ff8-842e-f92b794d7abf.dex
- 类名:com.google.android.sd.biz_dynamic_dex.query_lbs_info.QueryLBSInfoExecutor
获取 LBS Info
WriteSettingsExecutor
- 文件:6afc90e406bf46e4a29956aabcdfe004.dex
- 类名:com.google.android.sd.biz_dynamic_dex.write_settings.WriteSettingsExecutor
看姓名应该是个东西类,写 Settings 字段的,至于些什么应该是动态下发的
OppoSettingExecutor
- 文件:61517b68-7c09-4021-9aaa-cdebeb9549f2.dex
- 类名:com.google.android.sd.biz_dynamic_dex.opposettingproxy.OppoSettingExecutor
Setting 署理??没看懂干嘛的,Oppo 的同学来招领,莫非是别的一种形式的保活?
CheckAsterExecutor
- 文件:561341f5f7976e13efce7491887f1306.dex
- 类名:com.google.android.sd.biz_dynamic_dex.check_aster.CheckAsterExecutor
Check aster ?不是很懂
OppoCommunityIdExecutor
- 文件:538278f3-9f68-4fce-be10-12635b9640b2.dex
- 类名:com.google.android.sd.biz_dynamic_dex.oppo_community_id.OppoCommunityIdExecutor
获取 Oppo 用户的 ID?要这玩意干么?
GetSettingsUsernameExecutor
- 文件:4569a29c-b5a8-4dcf-a3a6-0a2f0bfdd493.dex
- 类名:com.google.android.sd.biz_dynamic_dex.oppo_get_settings_username.GetSettingsUsernameExecutor
获取 Oppo 手机用户的 username,话说你要这个啥用咧?
LogcatExecutor
- 文件:218a37ea-710d-49cb-b872-2a47a1115c69.dex
- 类名:com.google.android.sd.biz_dynamic_dex.logcat.LogcatExecutor
装备 Log 的参数
VivoBrowserSettingsExecutor
- 文件:136d4651-df47-41b4-bb80-2ec0ab1bc775.dex
- 类名:com.google.android.sd.biz_dynamic_dex.vivo_browser_settings.VivoBrowserSettingsExecutor
Vivo 浏览器相关的设置,不太懂要干嘛
谈论区比文章更精彩
微信大众号谈论区
知乎谈论区
知乎答复现已被删了,我经过主页能够看到,可是点进去是现已被删了:怎么点评拼多多疑似运用缝隙进犯用户手机,盗取竞争对手软件数据,避免自己被卸载? – Gracker 的答复 – 知乎www.zhihu.com/question/58…
iOS 和 Android 哪个更安全?
这里就贴一下安全大佬 sunwear 的谈论
关于我 && 博客
- 关于我, 非常期望和我们一起沟通 , 共同进步 .
- 博客内容导航
- 优秀博客文章记载 – Android 功能优化必知必会
一个人能够走的更快 , 一群人能够走的更远