宽表格和代码可左右滑动查看。
Clean Sweep Plus v1.2.0 权限与后台机制拆包报告#
精确包名:com.cleansweep.plus;样本及资料日期:2026-10-28,Asia/Shanghai(北京时间)。六专题补充版。
S1=当前APK静态直接证据;S2=工具回读;S3=当前真机观察;I=推断;U=未验证。反编译不是原始源码,内置配置不是线上最终配置。发布状态单独记录于批次入口。
结论#
首启初始化 → 前台服务UsefulWork → 常驻resident通知;功能/电池/卸载监控 → 环境与计数门禁 → function通知 → 带参数回到启动/功能路由。
HolderService的Job100回调只重新登记Job。MainWorker返回成功。StartUpBroadcast仅处理BOOT_COMPLETED并依赖已有全局对象,且Manifest缺少相应接收权限。继续追到ForegroundServiceHelper后可见:若尚未标记启动成功则尝试startForegroundService;否则只在通知权限、总开关和渠道条件通过时尝试重显通知。这是受前置状态限制的尝试链,不能写成无条件开机恢复,也不能与Job合并成“30秒自动复活”。[N5/N6]
权限声明、调用及实际授予#
下表完整保留本批Manifest的uses-permission声明;同名不同标签/受版本限制的声明不能直接相加为已获权限数量。运行时仅明确允许通知,未开启文件管理、使用情况、悬浮窗或通知读取等特殊访问;真实工具效果因此未验证。服务上的绑定保护权限与应用获准读取是两回事。
| 权限 | Manifest行 | 本轮用途/边界 |
|---|---|---|
android.permission.ACCESS_NETWORK_STATE |
15 | 网络能力声明;联网业务、广告/配置调用需另核。 |
android.permission.POST_NOTIFICATIONS |
16 | 展示通知;本轮仅此运行时权限已确认允许。 |
android.permission.REQUEST_DELETE_PACKAGES |
17 | 请求系统卸载确认;本轮未执行卸载。 |
android.permission.WRITE_EXTERNAL_STORAGE |
19 | 旧版存储写入声明;未把此声明当作Android13可任意读写。 |
android.permission.READ_EXTERNAL_STORAGE |
22 | 存储读取声明;是否生效取决于系统与targetSDK,未将声明当作获准。 |
android.permission.MANAGE_EXTERNAL_STORAGE |
24 | 所有文件访问声明;未授权该特殊权限,真实扫描/删除未验证。 |
android.permission.PACKAGE_USAGE_STATS |
25 | 使用情况访问;本轮未开启特殊访问,不验证其他App使用数据。 |
android.permission.INTERNET |
66 | 网络能力声明;联网业务、广告/配置调用需另核。 |
android.permission.FOREGROUND_SERVICE |
67 | 前台服务声明;是否使用以组件、调用及真机证据为准。 |
android.permission.FOREGROUND_SERVICE_DATA_SYNC |
68 | dataSync类型前台服务声明;未据此外推新版系统长期存活。 |
com.google.android.gms.permission.AD_ID |
69 | 广告/归因生态声明;当前数据采集与出量状态未由权限表证明。 |
android.permission.ACCESS_ADSERVICES_AD_ID |
70 | 广告/归因生态声明;当前数据采集与出量状态未由权限表证明。 |
android.permission.ACCESS_ADSERVICES_ATTRIBUTION |
71 | 广告/归因生态声明;当前数据采集与出量状态未由权限表证明。 |
android.permission.ACCESS_ADSERVICES_TOPICS |
72 | 广告/归因生态声明;当前数据采集与出量状态未由权限表证明。 |
com.samsung.android.mapsagent.permission.READ_APP_INFO |
73 | Manifest声明已核对;具体业务调用/运行时效果本轮未逐项闭合。[U] |
com.huawei.appmarket.service.commondata.permission.GET_COMMON_DATA |
74 | Manifest声明已核对;具体业务调用/运行时效果本轮未逐项闭合。[U] |
android.permission.WAKE_LOCK |
75 | 唤醒锁权限声明;本批未验证持有时长。 |
com.google.android.c2dm.permission.RECEIVE |
76 | Manifest声明已核对;具体业务调用/运行时效果本轮未逐项闭合。[U] |
com.google.android.finsky.permission.BIND_GET_INSTALL_REFERRER_SERVICE |
77 | 广告/归因生态声明;当前数据采集与出量状态未由权限表证明。 |
android.permission.VIBRATE |
78 | Manifest声明已核对;具体业务调用/运行时效果本轮未逐项闭合。[U] |
com.android.vending.CHECK_LICENSE |
79 | Manifest声明已核对;具体业务调用/运行时效果本轮未逐项闭合。[U] |
android.permission.ACCESS_WIFI_STATE |
80 | 网络能力声明;联网业务、广告/配置调用需另核。 |
com.cleansweep.plus.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION |
82 | 应用自定义动态广播隔离权限。 |
com.amazon.privacypass.ATTEST |
85 | Manifest声明已核对;具体业务调用/运行时效果本轮未逐项闭合。[U] |
系统API调用点复核#
不是只列Manifest:下表定位系统API/监听回调。业务命名空间与R8合并/工具类分开,后者只证明文件内含API,未把同文件的SDK路径当作业务调用已生效。未命中也不判定不存在,仍需从入口追踪。
| 能力 | 静态调用/候选位置 | 证据边界 |
|---|---|---|
| 所有文件访问检查 | Environment.isExternalStorageManager → axSKZc3ZbQtmd/ItZIQL5I1Kq.java:39(含目标引用的合并/工具类,具体调用链需另核) |
S1调用点;运行时U |
| 文件访问授权入口 | 本轮模式未定位;可能混淆/封装,不能判定不存在 | U |
| 使用情况查询 | 仅SDK/其他类命中,不作为业务调用证明 | U |
| 通知监听/清除 | onNotificationPosted → com/cleansweep/plus/repository/notifyCleaner/NotifyListenerMainService.java:43(目标业务命名空间) |
S1调用点;运行时U |
| 卸载请求 | 本轮模式未定位;可能混淆/封装,不能判定不存在 | U |
| 摄像头/手电筒 | .setTorchMode → com/cleansweep/plus/tool/broadcast/FlashLightBroadcastReceiver.java:66(目标业务命名空间).setTorchMode → com/cleansweep/plus/tool/broadcast/FlashLightBroadcastReceiver.java:75(目标业务命名空间) |
S1调用点;运行时U |
| 系统设置写入 | 本轮模式未定位;可能混淆/封装,不能判定不存在 | U |
| 悬浮窗检查 | 仅SDK/其他类命中,不作为业务调用证明 | U |
| 媒体库访问 | 仅SDK/其他类命中,不作为业务调用证明 | U |
| 前台服务启动 | .startForegroundService → CZjg2stvKVa/Ct4S.java:63(含目标引用的合并/工具类,具体调用链需另核) |
S1调用点;运行时U |
| 精确闹钟调用 | 本轮模式未定位;可能混淆/封装,不能判定不存在 | U |
| 唤醒锁 | 仅SDK/其他类命中,不作为业务调用证明 | U |
服务与广播清单#
以下为服务/广播中与业务后台、通知或恢复相关的声明;SDK类也注明为声明,不把第三方SDKJob直接算成自有恢复链。全部精确组件仍见本地Manifest索引。
| 类型/组件 | 动作 | FGS类型/保护权限 | Manifest行 |
|---|---|---|---|
service com.cleansweep.plus.repository.notifyCleaner.NotifyListenerMainService |
android.service.notification.NotificationListenerService | android.permission.BIND_NOTIFICATION_LISTENER_SERVICE | 120 |
service com.cleansweep.plus.phone.UsefulWork |
无静态过滤器 | dataSync | 141 |
receiver com.cleansweep.plus.phone.StartUpBroadcast |
android.intent.action.BOOT_COMPLETED android.intent.action.SCREEN_OFF android.intent.action.SCREEN_ON android.intent.action.USER_PRESENT |
未声明 | 144 |
service com.cleansweep.plus.phone.HolderService |
无静态过滤器 | android.permission.BIND_JOB_SERVICE | 154 |
service com.cleansweep.plus.phone.FirebaseCloudMessage |
com.google.firebase.MESSAGING_EVENT | 未声明 | 161 |
service com.google.firebase.components.ComponentDiscoveryService |
无静态过滤器 | 未声明 | 224 |
receiver com.google.firebase.iid.FirebaseInstanceIdReceiver |
com.google.android.c2dm.intent.RECEIVE | com.google.android.c2dm.permission.SEND | 283 |
service com.google.firebase.messaging.FirebaseMessagingService |
com.google.firebase.MESSAGING_EVENT | 未声明 | 294 |
service com.google.firebase.sessions.SessionLifecycleService |
无静态过滤器 | 未声明 | 302 |
业务页面中的权限入口#
| 页面 | 实际系统调用/入口 | 来源 |
|---|
调度和恢复机制分别判断#
UsefulWork 的父类在 onCreate/onStartCommand 进入通知/前台服务辅助器,返回 1(START_STICKY,系统可尝试重建);onDestroy 清理状态,onTimeout 停止服务。[A5]
HolderService 的 Job 回调调用辅助器重新登记 Job;Job ID 100、最小延迟 30 秒。该回调本身没有直接启动 UsefulWork,不能把“重新登记任务”写成“30 秒必定拉活”。MainWorker 的 doWork 只返回成功,未见该方法承担业务恢复。[A6][A7]
StartUpBroadcast 代码只处理 BOOT_COMPLETED,而且依赖全局辅助器已初始化;Manifest 本批声明未检出 RECEIVE_BOOT_COMPLETED。虽然过滤器还列出 SCREEN_ON/OFF、USER_PRESENT,当前处理函数并未逐个实现这些动作。锁屏有限观察见真机时间线;开机恢复和系统杀进程恢复没有闭合。[A8][U]
FirebaseCloudMessage 继承的 FCM Service 在接收 Intent 时记录事件;新 Token 会进入注册路径。存在 FCM 入口不代表服务端本次发送过消息,也不证明强停后可恢复。[A9]
触发—条件—状态表#
| 阶段 | 已追到的调用链 | 关键边界 | 证据 |
|---|---|---|---|
| 启动/权限 | FirstStartActivity → PermissionGuideActivity/主路由 | 权限缺失与通知参数会改变下一步;不能把首启广告当扫描页 | N1/N4 |
| 功能分发 | 功能枚举 → switch 1–8 → Compose路由 | 一Activity多功能;四个布尔参数保留进入上下文 | N1–N3 |
| 前台服务 | UsefulWork → b.a生命周期 → startForeground辅助器 | 常驻8081是本次观测值,业务通知另用ID分配 | 原A5/A14 |
| 后台尝试 | Job100/Worker/Boot入口分别核对 | 重新登记不等于服务恢复;强停与划卡分开 | 原A6–A9 |
| 事件召回 | 功能/电池/卸载 → 门禁 → 构建 | 来源计数、日期、随机区间、数字合成各自检查 | 原A10–A13 |
测试设备授权快照#
快照时间:2026-10-28T16:23:40+08:00。null/None表示本次输出没有该项或不适用,不解释为已拒绝;AppOps无显式记录也不解释为已授权。
| 类型 | 字段 | 本次值 |
|---|---|---|
| 运行时权限 | POST_NOTIFICATIONS | True |
| 运行时权限 | READ_EXTERNAL_STORAGE | None |
| 运行时权限 | WRITE_EXTERNAL_STORAGE | None |
| 运行时权限 | READ_MEDIA_IMAGES | None |
| 运行时权限 | READ_MEDIA_VIDEO | None |
| 运行时权限 | READ_MEDIA_AUDIO | None |
| 运行时权限 | CAMERA | None |
| 运行时权限 | ACCESS_FINE_LOCATION | None |
| 特殊访问 | MANAGE_EXTERNAL_STORAGE | NO_EXPLICIT_OPERATION |
| 特殊访问 | GET_USAGE_STATS | NO_EXPLICIT_OPERATION |
| 特殊访问 | SYSTEM_ALERT_WINDOW | NO_EXPLICIT_OPERATION |
| 特殊访问 | WRITE_SETTINGS | NO_EXPLICIT_OPERATION |
| 通知读取 | notification_listener_enabled | False |
系统限制与验证方法#
本轮短时Home/划卡存活与强停结果见真机专题;启动一个Job、注册Receiver、返回START_STICKY均不构成长期成功率。低内存杀进程、确认进入Doze、跨日调度和生产FCM仍需独立事件与时间窗。特殊权限只解释其具体功能用途,不把通知权限泛化为清理必需。
原有代码锚点 A#
| 编号 | 证明内容 | 本地源位置 | 核验 |
|---|---|---|---|
| A1 | 内置 app_config 与缓存回退 | jadx/sources/oX7DkP2Ryg59/rPDSeAe5pTc25N.java:21–46 |
已回读 |
| A2 | sdk_config 广告分组和行为限额 | jadx/sources/kxcPQVaNE/ItZIQL5I1Kq.java:18–48 |
已回读 |
| A3 | 渠道组选择 | jadx/sources/uBLckchPT/tRkFdhKm2MH.java:30–53 |
已回读 |
| A4 | AppsFlyer 与 Referrer 回调 | jadx/sources/ykVmkdOL2J4eo/erMtS.java:394–455 |
已回读 |
| A5 | 前台服务生命周期 | jadx/sources/b/a.java:20–59 |
已回读 |
| A6 | 登记 Job | jadx/sources/AM6fS/DfUfNGhdDcmZ360.java:209–219 |
已回读 |
| A7 | Worker 方法边界 | jadx/sources/com/cleansweep/plus/phone/MainWorker.java:1–20 |
已回读 |
| A8 | 开机处理门禁 | jadx/sources/com/cleansweep/plus/phone/StartUpBroadcast.java:12–22 |
已回读 |
| A9 | FCM Service 接收/Token | jadx/sources/b/b.java:14–43 |
已回读 |
| A10 | 通知区间、计数、安装年龄门禁 | jadx/sources/AUXTzb1C9v4hp/ItZIQL5I1Kq.java:83–157 |
已回读 |
| A11 | 前台、方向、锁屏门禁 | jadx/sources/AUXTzb1C9v4hp/kW6keHZ.java:29–60 |
已回读 |
| A12 | 随机大小与真实系统值的区分 | jadx/sources/gx9XjtIKAv/rPDSeAe5pTc25N.java:47–70 |
已回读 |
| A13 | 卸载、电池通知事件 | jadx/sources/AUXTzb1C9v4hp/DfUfNGhdDcmZ360.java:34–198 |
已回读 |
| A14 | 通知 Channel 构建 | jadx/sources/AUXTzb1C9v4hp/tRkFdhKm2MH.java:37–74 |
已回读 |
本轮补充代码锚点 N#
| 编号 | 证明内容 | 本地源位置 | 核验 |
|---|---|---|---|
| N1 | 统一功能入口及八类路由 | jadx/sources/com/cleansweep/plus/pages/function/MainFunctionActivity.java:169–222 |
已回读 |
| N2 | 枚举ordinal与switch序号对应 | jadx/sources/Tkz80AE/DfUfNGhdDcmZ360.java:11–45 |
已回读 |
| N3 | 八个功能枚举实际名称 | jadx/sources/yNukRAHmSTCdN6Kk/yGwyWkof.java:33–51 |
已回读 |
| N4 | 系统应用详情和异步权限返回 | jadx/sources/com/cleansweep/plus/pages/function/MainFunctionActivity.java:101–115 |
已回读 |
| N5 | 前台服务重启尝试与通知重显条件;OMZ57仍有方法警告 | jadx/sources/CZjg2stvKVa/Ct4S.java:57–130 |
已回读 |
| N6 | helper初始化、保存服务Class和首次启动 | jadx/sources/Ct4S/rPDSeAe5pTc25N.java:43–93 |
已回读 |
六专题导航#
| 专题 | 用途 |
|---|---|
| 产品功能与商业化分析 | 业务任务、页面、广告与来源链 |
| 权限与后台机制拆包报告 | 声明、调用、实际授权和功能边界 |
| 保活与拉活反编译代码册 | 机制图、主链步骤、代码片段与控制流修复 |
| 拉活通知规则与文案全量报告 | 触发、状态、频控、动作、候选和多语言全文 |
| 样本与证据索引 | 版本、split、签名、定位与证据范围 |
| 真机动态验证与后台存活报告 | 真实操作、后台矩阵、观察与未执行项 |