Swift Clean v1.0.9 权限与后台机制拆包报告
Swift Clean v1.0.9 权限与后台机制拆包报告返回竞品库
报告口径本页直接渲染本地报告真源;静态能力、动态观察、推断和线上未验证项不得互相替代。

Swift Clean v1.0.9 权限与后台机制拆包报告#

样本:com.swiftclean.phone.managerpro v1.0.9 (11)
文档日期:2026-10-12
标签:[S1] 静态直接证据;[I] 合理判断;[U] 运行时/线上未验证。

1. 结论先行#

  • [S1] 合并 Manifest 声明 29 项 uses-permission。真正支撑自有核心功能的高敏入口是 All files access(所有文件访问)、Usage Access(使用情况访问)、Notification Listener Access(通知使用权)和 Notification permission(通知权限)。
  • [S1] 后台体系是多路冗余:启动 ContentProvider → 前台服务 → 启动失败短 Job 兜底,同时装配日式 Alarm、15 分钟 WorkManager、15 分钟持久 Job、Boot/package replaced 接收器、系统事件广播、FCM 与生命周期回前台。
  • [S1] 后台装配受通知可用状态控制:qf.u.b() 先创建 Channel,随后只有通知权限/通知开关可用时,才启动前台服务并注册主要调度与广播。
  • [I] 这能提高进程被回收后的恢复机会,但不是“永久保活”。Android/OEM 后台限制、用户关闭通知、电量优化和 Force Stop 都可能阻断;静态代码不能证明长期存活 [U]。
  • [S1] Alarm 使用 AlarmManager.set(type=2, ...)。Android 常量 2 是 ELAPSED_REALTIME_WAKEUP:具 wakeup 属性;但调用是非 exact set(),触发时间可能漂移,不能写成精确闹钟。

2. 29 项 uses-permission 全表#

权限 自有功能/依赖映射 静态结论与边界
INTERNET 自有后端、Firebase、Adjust、TradPlus/广告 [S1] 明确使用网络;目的/数据量需抓包 [U]
ACCESS_NETWORK_STATE 网络切换通知、广告/SDK 网络判断 [S1] uf/c.java:54-70
ACCESS_WIFI_STATE 网络工具、广告/SDK [S1] 已声明;自有核心调用未完整定位 [U]
PACKAGE_USAGE_STATS App 最近使用、缓存/App/流量分析 [S1] tf/b.java:45-58;属于 Settings 特殊访问,不是普通弹窗权限
REQUEST_DELETE_PACKAGES App Manager 卸载入口 [S1] AppListPage.java:230-237 调系统 ACTION_DELETE;不是静默卸载
MANAGE_EXTERNAL_STORAGE 缓存/大文件/截图/相似照片扫描 [S1] MainPage.java:322-341,494-503 检查 isExternalStorageManager();需系统设置授权
WRITE_EXTERNAL_STORAGE 旧 Android 文件访问兼容 [S1] 低版本分支检查;target 36 下受平台限制,效果需版本矩阵 [U]
READ_EXTERNAL_STORAGE 旧 Android 媒体/文件读取兼容 [S1] 已声明;target 36 下行为受分区存储与新媒体权限规则影响 [U]
GET_PACKAGE_SIZE 可能服务于 App/缓存大小 [S1] 已声明;未找到自有直接调用,且现代 Android 对普通 App 受限 [U]
CLEAR_APP_CACHE 缓存清理声明 [S1] 已声明;未找到普通 App 可直接清他包缓存的可靠自有调用,不能据声明认定有效 [U]
DELETE_CACHE_FILES 缓存清理声明 同上 [S1/U]
READ_NETWORK_USAGE_HISTORY 按 UID 网络流量 [S1] NetworkStatsManager.queryDetailsForUid(),tf/f1.java:66-85;仍依赖 Usage Access/系统能力
READ_PHONE_STATE 可能来自广告/设备 SDK [S1] 已声明;未定位自有业务直接调用,不等于运行时已授权 [U]
FOREGROUND_SERVICE 常驻前台服务 [S1] mowxgu、JMgHOxJfa
FOREGROUND_SERVICE_SPECIAL_USE specialUse 类型 FGS [S1] Manifest 与 startForeground(..., 1073741824)
POST_NOTIFICATIONS FGS 合规通知、业务召回、FCM [S1] First/Main/Result 页面均有请求与引导
RECEIVE_BOOT_COMPLETED 重启后恢复装配 [S1] weqTnpsB 监听 Boot / package replaced
WAKE_LOCK Firebase/WorkManager/后台执行依赖 [S1] 已合并;自有显式 WakeLock 未定位,主要可能由依赖使用 [U]
com.google.android.gms.permission.AD_ID 广告标识 [S1] 广告/归因 SDK footprint;实际读取与 Consent 需动态核验 [U]
ACCESS_ADSERVICES_AD_ID Privacy Sandbox Ads [S1] 广告 SDK 合并
ACCESS_ADSERVICES_ATTRIBUTION Privacy Sandbox Attribution [S1] 广告 SDK 合并
ACCESS_ADSERVICES_TOPICS Privacy Sandbox Topics [S1] 广告 SDK 合并
VIBRATE 高重要性业务通知 Channel [S1] cleaner_help 开启振动,qf/t.java:62-71
com.android.vending.CHECK_LICENSE Play/PairIP 校验 [S1] 合并声明;服务器判定细节 [U]
BIND_GET_INSTALL_REFERRER_SERVICE Install Referrer 归因 [S1] TotalPage.java:57-60
com.google.android.c2dm.permission.RECEIVE FCM [S1] 自有 FirebaseMessagingService 已注册
ACCESS_ADSERVICES_CUSTOM_AUDIENCE Privacy Sandbox Protected Audience [S1] 广告 SDK 合并
com.swiftclean.phone.managerpro.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION AndroidX 动态 receiver 保护 [S1] signature 自定义权限,同时自用
com.amazon.privacypass.ATTEST Amazon/广告链路 attestation [S1] 依赖合并;本样本自有调用未定位 [U]

Manifest 原始列表见 jadx/resources/AndroidManifest.xml:15-79。

3. 非 uses-permission 的特殊访问#

特殊访问 请求/检查方式 实际用途
All files access(所有文件访问) Environment.isExternalStorageManager() + 自有 Guide 文件/照片/大文件扫描;MainPage.java:322-341,494-503
Usage Access(使用情况访问) AppOpsManager.checkOpNoThrow("android:get_usage_stats", ...) App 最近使用、缓存统计、网络流量;MainPage.java:443-451,505-516
Notification Listener Access(通知使用权) Service 要求 BIND_NOTIFICATION_LISTENER_SERVICE,用户在系统设置开启 拦截/取消/记录第三方通知;Manifest 234-241
JobService 系统绑定 两个 Service 要求 BIND_JOB_SERVICE 只允许系统 JobScheduler 绑定;Manifest 264-274

[I] 这四类入口需要在隐私政策、Play Data Safety 与产品解释中分开写;不能把“声明了权限”写成“已经授权”,也不能把特殊访问当作普通 runtime permission。

4. 自有组件与暴露面#

类型 自有数量 exported 重点
Activity 25 2 FirstPage Launcher;MainPage exported + singleTask
Service 5 4 通知监听受系统权限;2 个 JobService 受系统绑定权限;mowxgu exported 且未见组件权限
Receiver 4 4 Cycle、Widget、Boot/package replaced、Alarm receiver
Provider 1 0 cIPhUu initOrder=100,进程启动即初始化

风险判断:

  • [S1/I] mowxgu、CycleReceiver、kQuACgQQ 和 MainPage 的 exported 面应做外部显式 Intent/广播滥用测试;静态 Manifest 中 mowxgu 与两个自有 receiver 未见自定义调用权限。
  • [S1] 两个 JobService 虽 exported,但有 BIND_JOB_SERVICE;通知监听有 BIND_NOTIFICATION_LISTENER_SERVICE,不能把它们等同于无保护导出。
  • [U] 本轮未做组件 fuzz、恶意 Intent、PendingIntent 可变性或权限绕过测试。

5. 后台机制总链路#

5.1 进程启动装配#

  1. [S1] cIPhUu 是 initOrder=100 的非导出 ContentProvider;onCreate() 保存 Application Context、SharedPreferences,反射加载 PageCellar,写入首次时间,注册 Activity 生命周期,读取 Adjust attribution/adid,并调用 qf.u.b()。见 jadx-simple/crown.arithmetic.floor.cIPhUu.java:63-160。
  2. [S1] qf.u.b() 先创建 3 个通知 Channel;只有通知可用时,才启动 FGS、安排 Alarm、注册动态广播、注册 Boot/删除接收链、安排周期 Job 与 WorkManager。见 qf/u.java:57-131。
  3. [I] 因此通知权限既是业务通知门槛,也是主要后台基础设施门槛;用户拒绝后不应假设这些调度均已生效。

5.2 前台服务与启动失败兜底#

路径 静态行为 证据
mowxgu 创建 ongoing ID 20;Android >29 以 specialUse 类型启动 [S1] mowxgu.java:34-83
服务被销毁 onDestroy() 清 running 标记、stopForeground 后再次 b.m() [S1] mowxgu.java:103-109
任务划掉 onTaskRemoved() 再次 b.m() [S1] mowxgu.java:117-121
sticky Android <34 返回 START_STICKY(1);Android >=34 返回 START_NOT_STICKY(2) [S1] mowxgu.java:111-115
启动失败 安排 Job ID 22002:minimumLatency 5 秒、deadline 7 秒左右、persisted、API 33+ priority 400 [S1] qf/b.java:235-271
兜底 Job 自己先进入 foreground,再启动 mowxgu;15 秒后 jobFinished [S1] JMgHOxJfa.java:44-119、qf/d.java:42-81

[I] Android 14+ 返回 START_NOT_STICKY,但销毁/划卡回调仍主动请求重启;若系统禁止后台拉起,则短 Job 是第二路径。是否获准启动取决于当时系统状态 [U]。

5.3 AlarmManager#

  • [S1] requestCode 18488,目标 kQuACgQQ;每次先 cancel 旧 PendingIntent。
  • [S1] 时间来自 PageCellar 的配置字符串;无效时回退本地时间 10:00,并滚到下一次未来时刻。
  • [S1] 调用 alarmManager.set(2, SystemClock.elapsedRealtime()+delta, ...)。type 2 = ELAPSED_REALTIME_WAKEUP,具 wakeup;set() 非 exact,会受系统 batching/idle 影响而漂移。
  • [S1] receiver 触发后确保 FGS、进入周期回调,再重新安排下一次 Alarm。见 qf/b.java:295-346、kQuACgQQ.java:17-25。
  • [U] 真实触发时刻、Doze/OEM 漂移及被系统清理后的表现需 dumpsys/真机验证。

5.4 WorkManager 与 JobScheduler#

机制 参数 触发动作
WorkManager unique periodic work;配置 15 分钟;平台最小 15 分钟、flex 最小 5 分钟 ZOaubC.doWork() 确保 FGS并进入周期回调
JobScheduler Job ID 20;persisted;minimumLatency 15 分钟;deadline +5 秒;API 33+ priority 400 vjfcJyUsQs.onCreate() 确保 FGS/周期回调,onStartJob() 重排自身

证据:qf/b.java:419-507、ZOaubC.java:22-30、vjfcJyUsQs.java:18-50。[I] WorkManager 与 JobScheduler 同时存在是冗余恢复,而非两个都能保证准点;系统会调度、合并或推迟 [U]。

5.5 Boot、升级、删除/取消回调#

  • [S1] weqTnpsB 静态监听 BOOT_COMPLETED 与 MY_PACKAGE_REPLACED,接收后确保 FGS并进入不同周期回调;另有动态注册的相关 action。Manifest 282-295、源码 weqTnpsB.java:18-35。
  • [S1] qf.c 动态监听 USER_PRESENT、ACTION_POWER_CONNECTED、SCREEN_ON/OFF、PACKAGE_ADDED/REMOVED/REPLACED、CLOSE_SYSTEM_DIALOGS、CONFIGURATION_CHANGED;按 action 做 500 ms 去重后确保 FGS并进入周期回调。qf/u.java:77-99、qf/c.java:20-92。
  • [S1] CycleReceiver 监听 base.cycle.break,收到后发送前台通知对应 PendingIntent。CycleReceiver.java:13-23
  • [S1] 业务/ongoing 通知设置 delete intent,部分删除动作会取消重复通知或触发相应回调。
  • [U] 混淆字符串对应的每个动态 action 名称未全部稳定解码,报告只确认能从代码直接还原的静态 filter。

6. 事件监听与本地召回#

qf.h 在 Android 10+ 为 Music、Podcasts、Ringtones、Alarms、Notifications、Movies、Downloads、Documents、Pictures、DCIM 与 Screenshot 目录装 FileObserver;同时动态注册:

  • USER_PRESENT / SCREEN_OFF
  • CLOSE_SYSTEM_DIALOGS / CONFIGURATION_CHANGED
  • PACKAGE_ADDED / PACKAGE_REMOVED
  • ACTION_POWER_CONNECTED / ACTION_POWER_DISCONNECTED
  • CONNECTIVITY_CHANGE

证据:qf/h.java:43-182。这些事件进入通知候选前,还会经过后台、锁屏、安装时长、归因和冷却总闸;详见《拉活通知规则与文案全量报告》。

7. FCM 与 Remote Config#

7.1 FCM#

  • [S1] 自有 wSfChcdBg 注册 com.google.firebase.MESSAGING_EVENT。
  • [S1] 收到消息先确保 FGS并进入周期回调;只有 incoming priority 为 HIGH 才尝试生成内置高优先级通知。
  • [S1] 静态门槛包括:通知权限、App 无活动页面、竖屏、启动/安装基准至少 5 分钟、本地时间 07:00–22:59。
  • [S1] 从 10 套本地文案随机选择,使用业务 ID 21;新 token 会交给 Adjust 并上传自有后端。
  • [U] simple-mode 中虽读取 KeyguardManager,但未恢复出可靠的“锁屏即拒绝”跳转,报告不把它写成确定门槛。

证据:jadx-simple/crown.arithmetic.floor.wSfChcdBg.java:50-254。

7.2 Remote Config#

  • [S1] 最短 fetch 间隔 3,600 秒,fetch/activate 后注册 realtime update listener。
  • [S1] 主要控制广告配置/上限/黑名单/FB 信息:首页广告,不直接下发本文已恢复的本地通知标题正文。
  • [U] 生产 RC 当前值未知;只凭 APK 不能确认线上广告/开关状态。

8. 自有网络与重试#

URL 静态行为 边界
https://ip.penguin-swift.com/check/new/ip POST,8 秒连接/读取超时,失败指数退避,直到拿到布尔结果 [S1] qf/q.java:48-217;字段/响应语义 [U]
https://mor.penguin-swift.com/swpeng/chaid POST 包名与本地 ID/token 类信息,8 秒超时、指数重试 [S1] jadx-simple/qf.p.java:57-246;数据治理 [U]

9. 平台边界与未验证项#

  1. [U] Force Stop 会使系统停止组件与 Alarm/Job 触发,直到用户显式再启动;本报告不宣称代码可突破平台强停。
  2. [U] Android 14/15/16 对 specialUse FGS 的 Play 声明、启动豁免与 OEM 实现需真机/Console 核验。
  3. [U] setPersisted(true)、Boot receiver、WorkManager 不等于任何设备上都按 15 分钟恢复。
  4. [U] 未执行 exported 组件安全测试、网络抓包、证书固定/明文流量检查或权限拒绝矩阵。
  5. [S1/U] JADX 总计 61 个错误;核心失败方法已 simple-mode 补证,但混淆控制流仍可能影响边缘分支。
竞品拆包报告库 · 逆向结论按证据等级阅读