宽表格和代码可左右滑动查看。
EasyClean v1.0.2 权限与后台机制拆包报告#
精确包名:com.smartnettools.studio.easyclean;样本及资料日期:2026-10-28,Asia/Shanghai(北京时间)。六专题补充版。
S1=当前APK静态直接证据;S2=工具回读;S3=当前真机观察;I=推断;U=未验证。反编译不是原始源码,内置配置不是线上最终配置。发布状态单独记录于批次入口。
结论#
App初始化 → 持久Job2001(15分钟最小周期) → Mb.b.a统一资格检查 → 12组配对模板 → 循环1234起ID → SplashActivity。
FCM的show_local_message也进入统一资格检查;通知删除Receiver直接进入重建分支,绕开主检查中的时段/未活跃门禁,但仍有删除重建间隔。主页初始化cancelAll属于第三条通知消失路径。
权限声明、调用及实际授予#
下表完整保留本批Manifest的uses-permission声明;同名不同标签/受版本限制的声明不能直接相加为已获权限数量。运行时仅明确允许通知,未开启文件管理、使用情况、悬浮窗或通知读取等特殊访问;真实工具效果因此未验证。服务上的绑定保护权限与应用获准读取是两回事。
| 权限 | Manifest行 | 本轮用途/边界 |
|---|---|---|
android.permission.RECEIVE_BOOT_COMPLETED |
67 | 接收开机广播声明;需再看处理函数,空父类不能算已实现拉活。 |
com.android.permission.GET_INSTALLED_APPS |
68 | Manifest声明已核对;具体业务调用/运行时效果本轮未逐项闭合。[U] |
android.permission.INTERNET |
69 | 网络能力声明;联网业务、广告/配置调用需另核。 |
android.permission.ACCESS_WIFI_STATE |
70 | 网络能力声明;联网业务、广告/配置调用需另核。 |
android.permission.POST_NOTIFICATIONS |
71 | 展示通知;本轮仅此运行时权限已确认允许。 |
android.permission.REQUEST_DELETE_PACKAGES |
72 | 请求系统卸载确认;本轮未执行卸载。 |
android.permission.ACCESS_NETWORK_STATE |
73 | 网络能力声明;联网业务、广告/配置调用需另核。 |
android.permission.READ_EXTERNAL_STORAGE |
74 | 存储读取声明;是否生效取决于系统与targetSDK,未将声明当作获准。 |
android.permission.WRITE_EXTERNAL_STORAGE |
75 | 旧版存储写入声明;未把此声明当作Android13可任意读写。 |
android.permission.MANAGE_EXTERNAL_STORAGE |
76 | 所有文件访问声明;未授权该特殊权限,真实扫描/删除未验证。 |
android.permission.PACKAGE_USAGE_STATS |
77 | 使用情况访问;本轮未开启特殊访问,不验证其他App使用数据。 |
android.permission.WAKE_LOCK |
78 | 唤醒锁权限声明;本批未验证持有时长。 |
com.google.android.gms.permission.AD_ID |
79 | 广告/归因生态声明;当前数据采集与出量状态未由权限表证明。 |
android.permission.READ_PHONE_STATE |
80 | Manifest声明已核对;具体业务调用/运行时效果本轮未逐项闭合。[U] |
BIND_GET_INSTALL_REFERRER_SERVICE |
81 | 广告/归因生态声明;当前数据采集与出量状态未由权限表证明。 |
com.android.vending.CHECK_LICENSE |
82 | Manifest声明已核对;具体业务调用/运行时效果本轮未逐项闭合。[U] |
com.smartnettools.studio.easyclean.permission.READ_SETTINGS |
85 | Manifest声明已核对;具体业务调用/运行时效果本轮未逐项闭合。[U] |
com.smartnettools.studio.easyclean.permission.WRITE_SETTINGS |
90 | Manifest声明已核对;具体业务调用/运行时效果本轮未逐项闭合。[U] |
android.permission.BIND_APPWIDGET |
100 | Manifest声明已核对;具体业务调用/运行时效果本轮未逐项闭合。[U] |
android.permission.ACCESS_ADSERVICES_AD_ID |
101 | 广告/归因生态声明;当前数据采集与出量状态未由权限表证明。 |
android.permission.ACCESS_ADSERVICES_ATTRIBUTION |
102 | 广告/归因生态声明;当前数据采集与出量状态未由权限表证明。 |
android.permission.ACCESS_ADSERVICES_TOPICS |
103 | 广告/归因生态声明;当前数据采集与出量状态未由权限表证明。 |
com.google.android.c2dm.permission.RECEIVE |
104 | Manifest声明已核对;具体业务调用/运行时效果本轮未逐项闭合。[U] |
android.permission.VIBRATE |
105 | Manifest声明已核对;具体业务调用/运行时效果本轮未逐项闭合。[U] |
com.google.android.finsky.permission.BIND_GET_INSTALL_REFERRER_SERVICE |
106 | 广告/归因生态声明;当前数据采集与出量状态未由权限表证明。 |
android.permission.FOREGROUND_SERVICE |
107 | 前台服务声明;是否使用以组件、调用及真机证据为准。 |
com.amazon.privacypass.ATTEST |
108 | Manifest声明已核对;具体业务调用/运行时效果本轮未逐项闭合。[U] |
com.smartnettools.studio.easyclean.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION |
110 | 应用自定义动态广播隔离权限。 |
android.permission.REORDER_TASKS |
113 | Manifest声明已核对;具体业务调用/运行时效果本轮未逐项闭合。[U] |
系统API调用点复核#
不是只列Manifest:下表定位系统API/监听回调。业务命名空间与R8合并/工具类分开,后者只证明文件内含API,未把同文件的SDK路径当作业务调用已生效。未命中也不判定不存在,仍需从入口追踪。
| 能力 | 静态调用/候选位置 | 证据边界 |
|---|---|---|
| 所有文件访问检查 | Environment.isExternalStorageManager → com/fubian/cleaner/clean/CleanActivity.java:208(目标业务命名空间)Environment.isExternalStorageManager → com/fubian/cleaner/compressor/NeedFilePermissionActivity.java:139(目标业务命名空间)Environment.isExternalStorageManager → Lb/C0892b0.java:103(含目标引用的合并/工具类,具体调用链需另核) |
S1调用点;运行时U |
| 文件访问授权入口 | android.settings.MANAGE_APP_ALL_FILES_ACCESS_PERMISSION → com/fubian/cleaner/clean/CleanActivity.java:234(目标业务命名空间)android.settings.MANAGE_APP_ALL_FILES_ACCESS_PERMISSION → com/fubian/cleaner/clean/CleanActivity.java:264(目标业务命名空间)android.settings.MANAGE_APP_ALL_FILES_ACCESS_PERMISSION → com/fubian/cleaner/compressor/NeedFilePermissionActivity.java:83(目标业务命名空间) |
S1调用点;运行时U |
| 使用情况查询 | .queryUsageStats → L3/C7275a.java:83(含目标引用的合并/工具类,具体调用链需另核).queryUsageStats → L3/C7275a.java:100(含目标引用的合并/工具类,具体调用链需另核).queryUsageStats → L3/C7278d.java:69(含目标引用的合并/工具类,具体调用链需另核) |
S1调用点;运行时U |
| 通知监听/清除 | 仅SDK/其他类命中,不作为业务调用证明 | U |
| 卸载请求 | 本轮模式未定位;可能混淆/封装,不能判定不存在 | U |
| 摄像头/手电筒 | 本轮模式未定位;可能混淆/封装,不能判定不存在 | U |
| 系统设置写入 | 本轮模式未定位;可能混淆/封装,不能判定不存在 | U |
| 悬浮窗检查 | 仅SDK/其他类命中,不作为业务调用证明 | U |
| 媒体库访问 | MediaStore.Files → M3/m.java:61(含目标引用的合并/工具类,具体调用链需另核) |
S1调用点;运行时U |
| 前台服务启动 | 仅SDK/其他类命中,不作为业务调用证明 | U |
| 精确闹钟调用 | 仅SDK/其他类命中,不作为业务调用证明 | U |
| 唤醒锁 | .newWakeLock → com/android/launcher3/N0.java:233(含目标引用的合并/工具类,具体调用链需另核) |
S1调用点;运行时U |
服务与广播清单#
以下为服务/广播中与业务后台、通知或恢复相关的声明;SDK类也注明为声明,不把第三方SDKJob直接算成自有恢复链。全部精确组件仍见本地Manifest索引。
| 类型/组件 | 动作 | FGS类型/保护权限 | Manifest行 |
|---|---|---|---|
receiver com.fubian.cleaner.notification.LocalNotificationReceiver |
无静态过滤器 | 未声明 | 277 |
service com.fubian.cleaner.notification.MyFirebaseMessagingService |
com.google.firebase.MESSAGING_EVENT | 未声明 | 296 |
service com.fubian.cleaner.notification.NotificationJobService |
无静态过滤器 | android.permission.BIND_JOB_SERVICE | 303 |
receiver com.android.launcher3.InstallShortcutReceiver |
com.android.launcher.action.INSTALL_SHORTCUT | com.smartnettools.studio.easyclean.permission.INSTALL_SHORTCUT | 365 |
receiver com.android.launcher3.SessionCommitReceiver |
android.content.pm.action.SESSION_COMMITTED | 未声明 | 374 |
receiver com.android.launcher3.AppWidgetsRestoredReceiver |
android.appwidget.action.APPWIDGET_HOST_RESTORED | 未声明 | 381 |
service com.android.launcher3.uioverrides.dynamicui.WallpaperManagerCompatVL$ColorExtractionService |
无静态过滤器 | android.permission.BIND_JOB_SERVICE | 388 |
service com.android.launcher3.notification.NotificationListener |
android.service.notification.NotificationListenerService | android.permission.BIND_NOTIFICATION_LISTENER_SERVICE | 394 |
receiver com.google.firebase.iid.FirebaseInstanceIdReceiver |
com.google.android.c2dm.intent.RECEIVE | com.google.android.c2dm.permission.SEND | 729 |
service com.google.firebase.messaging.FirebaseMessagingService |
com.google.firebase.MESSAGING_EVENT | 未声明 | 740 |
service com.google.firebase.components.ComponentDiscoveryService |
无静态过滤器 | 未声明 | 748 |
业务页面中的权限入口#
| 页面 | 实际系统调用/入口 | 来源 |
|---|---|---|
| com.fubian.cleaner.clean.CleanActivity | Intent intent = new Intent("android.settings.MANAGE_APP_ALL_FILES_ACCESS_PERMISSION"); | com/fubian/cleaner/clean/CleanActivity.java:234 |
| com.fubian.cleaner.clean.CleanActivity | Intent intent = new Intent("android.settings.MANAGE_APP_ALL_FILES_ACCESS_PERMISSION"); | com/fubian/cleaner/clean/CleanActivity.java:264 |
调度和恢复机制分别判断#
App 在初始化条件通过后登记持久化 Job 2001,setPeriodic(900000ms),不要求网络、充电或空闲;这只是系统可调度的最小15分钟周期,不是精确计时。[A2]
NotificationJobService 的最终父类 onStartJob 调用 Mb.b.a 后返回 false(同步完成),onStopJob 返回 true。LocalNotificationReceiver 是删除通知的接收入口;FCM 最终父类接到 messageType=show_local_message 时也调用同一门禁。[A3][A4]
没有观察到本包自有 FGS;划卡后进程消失不否认未来符合条件的 Job/FCM 可使进程启动。本次重启窗口未见目标进程/FGS;持久Job后续执行、Doze、电池优化限制和长周期触发仍未验证。
触发—条件—状态表#
| 阶段 | 已追到的调用链 | 关键边界 | 证据 |
|---|---|---|---|
| 文件功能 | 权限基类 → Activity.I → ViewModel扫描 | 10MiB参数和UI进度不证明真实删除效果 | N1–N4 |
| 结果商业化 | 完成页 → clean-result全屏尝试+原生容器 | 与SpecialAdControl的snake_case键不能直接合并 | N6 |
| 普通召回 | Job/FCM → Mb.b.a → 构建 → 循环ID | 时段/活跃/间隔决定资格,系统可见另验 | 原A2–A10 |
| 删除后重建 | LocalNotificationReceiver → 直接构建分支 | 不是所有入口都经过同一资格函数 | 原A9 |
| 主页回流 | MainActivity.s → cancelAll | 本包通知可能被主页主动清掉 | N5 |
测试设备授权快照#
快照时间:2026-10-28T16:23:42+08:00。null/None表示本次输出没有该项或不适用,不解释为已拒绝;AppOps无显式记录也不解释为已授权。
| 类型 | 字段 | 本次值 |
|---|---|---|
| 运行时权限 | POST_NOTIFICATIONS | True |
| 运行时权限 | READ_EXTERNAL_STORAGE | False |
| 运行时权限 | WRITE_EXTERNAL_STORAGE | False |
| 运行时权限 | 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 | Adjust 与 Referrer 初始化 | jadx-repair/sources/com/fubian/cleaner/App.java:280–325 |
已回读 |
| A2 | 通知初始化、订阅、Job2001 | jadx-repair/sources/com/fubian/cleaner/App.java:570–617 |
已回读 |
| A3 | 周期Job回调 | jadx-repair/sources/T6MB1ZG64oyYB3335SxFg9s40zP0/z3XPSFr78q907eH19Mj.java:8–18 |
已回读 |
| A4 | FCM本地展示指令 | jadx-repair/sources/T6MB1ZG64oyYB3335SxFg9s40zP0/DDSQWC66.java:18–62 |
已回读 |
| A5 | 默认门禁参数 | jadx-repair/sources/Y0/j.java:29–43 |
已回读 |
| A6 | 远端覆盖与通知构建 | jadx-repair/sources/Mb/d.java:30–58 |
已回读 |
| A7 | 活跃时间节流、模板随机和两个按钮 | jadx-repair/sources/Mb/a.java:44–64 |
已回读 |
| A8 | 时段、活跃时间与通知间隔 | jadx-repair/sources/Mb/b.java:25–45 |
已回读 |
| A9 | 删除重建入口 | jadx-repair/sources/T6MB1ZG64oyYB3335SxFg9s40zP0/T6MB1ZG64oyYB3335SxFg9s40zP0.java:19–33 |
已回读 |
| A10 | 循环通知ID及实际notify | jadx-repair/sources/o5/z.java:45–62 |
已回读 |
| A11 | Adjust来源标记与可疑状态 | jadx-repair/sources/C4/c.java:30–53 |
已回读 |
| A12 | Referrer字符串规则及次数写回 | jadx-repair/sources/e6/e.java:55–67 |
已回读 |
| A13 | 来源位按位或并持久化 | jadx-repair/sources/Kb/h.java:18–30 |
已回读 |
| A14 | 来源标记实际业务判断 | jadx-repair/sources/N5/b.java:102–109 |
已回读 |
| A15 | 七个广告场景及分组门禁 | jadx-repair/sources/Y2/AbstractC8138a.java:15–78 |
已回读 |
| A16 | 默认字段及构造器指令;含反编译错误边界 | jadx-repair/sources/com/fubian/cleaner/ad/SpecialAdControl.java:116–217 |
已回读 |
| A17 | Thinkup加载、展示与节流 | jadx-repair/sources/E8/C5876f.java:74–140 |
已回读 |
| A18 | MAX开屏/原生/插屏加载节流 | jadx-repair/sources/E8/C5877g.java:146–221 |
已回读 |
| A19 | 展示失败后的提供方回退 | jadx-repair/sources/N5/b.java:121–142 |
已回读 |
| A20 | 提供方选择器simple指令复核 | analysis/simple/c/a.java:59–220 |
已回读 |
| A21 | 来源条件与默认桌面引导 | jadx-repair/sources/com/fubian/cleaner/result/ResultActivity.java:86–119 |
已回读 |
本轮补充代码锚点 N#
| 编号 | 证明内容 | 本地源位置 | 核验 |
|---|---|---|---|
| N1 | 大文件入口实际发起扫描任务 | jadx-repair/sources/com/fubian/cleaner/compressor/BigFileActivity.java:131–136 |
已回读 |
| N2 | 3000ms包装及最终进度100 | jadx-repair/sources/K2/C0851c.java:35–53 |
已回读 |
| N3 | 10MiB候选扫描和类型/大小读取 | jadx-repair/sources/K2/C0852d.java:65–109 |
已回读 |
| N4 | 文件权限、系统设置与工具返回分支 | jadx-repair/sources/com/fubian/cleaner/compressor/NeedFilePermissionActivity.java:95–195 |
已回读 |
| N5 | 主页初始化cancelAll和回调调度 | jadx-repair/sources/com/fubian/cleaner/main/MainActivity.java:196–213 |
已回读 |
| N6 | 同一结果页的全屏与原生调用 | jadx-repair/sources/com/fubian/cleaner/result/CompleteActivity.java:89–94 |
已回读 |
| N7 | 扫描包装补足最短展示时长,非超时 | jadx-repair/sources/Y0/e.java:165–215 |
已回读 |
六专题导航#
| 专题 | 用途 |
|---|---|
| 产品功能与商业化分析 | 业务任务、页面、广告与来源链 |
| 权限与后台机制拆包报告 | 声明、调用、实际授权和功能边界 |
| 保活与拉活反编译代码册 | 机制图、主链步骤、代码片段与控制流修复 |
| 拉活通知规则与文案全量报告 | 触发、状态、频控、动作、候选和多语言全文 |
| 样本与证据索引 | 版本、split、签名、定位与证据范围 |
| 真机动态验证与后台存活报告 | 真实操作、后台矩阵、观察与未执行项 |