报告口径本页直接渲染本地报告真源;静态能力、动态观察、推断和线上未验证项不得互相替代。
Flare Cleaner v1.0.7 保活恢复、通知召回与产品族群逆向报告#
包名:com.flare.cleaner.storage
样本:Google Play 当前安装包,versionName 1.0.7,versionCode 8
测试设备:Pixel 6a,Android 16 / API 36
报告日期:2026-08-31
本报告只分析保活与恢复、通知召回、产品族群;不展开用户可直接看到的清理功能页面。
1. 一页结论#
- [静态 + 动态确认] 它有前台服务恢复链,但不是“所有 Job/Alarm 都在拉 FGS”,更不是永久保活。 主服务
llLI.ILI1L 是 specialUse 前台服务,返回 START_STICKY;前台初始化、服务销毁/任务移除和高优先级 FCM 会直接请求主 FGS,启动异常时再由约 3.8–5.8 秒持久化 Job 兜底。约 23 分钟 Job、20 分钟 WorkManager 和约 8 小时 Alarm 当前静态调用点主要续订 FCM topic 并进入通知引擎,未见它们直接调用主 FGS 启动入口。
- [动态确认] 划掉最近任务后,Flare 的任务卡消失,但原进程和原前台服务持续存在。 PID、ServiceRecord 和创建时间均未重置。这证明“划卡没杀掉它”,不是“被杀后成功拉活”。
- [静态 + 动态确认] 单独停止前台服务后,它会在同一进程内快速重建。 这是服务级自恢复;不能外推为进程死亡后的可靠冷启动。
- [动态确认] Force Stop 是硬边界。 强停后至少 17 秒内无进程、无服务,包为
stopped=true;只有人工重新打开后才恢复。
- [动态确认] 本次真实重启没有观察到前台服务自动恢复。
BOOT_COMPLETED 的 20 秒临时白名单痕迹存在,持久化 Job 也跨重启保留,但设备已解锁后仍没有 Flare 进程/前台服务;人工打开后才重建。因此不能写“开机即可恢复前台服务”。
- [静态 + 动态确认] 高优先级 FCM 同时承担拉起机会和用户召回。 客户端判断
google.delivered_priority=high 后先请求启动前台服务,再刷新通知;测试机曾记录 PUSH_MESSAGING 原因的约 20 秒临时白名单。
- [静态确认] 本地通知召回不是单一“每天一次”。 它覆盖解锁/Home/最近任务、退后台、包安装卸载、电池、网络、截图、Alarm、开机/升级和 FCM 等入口,并叠加全局开关、首次使用延迟、前后台/锁屏判断、场景冷却和日上限。
- [动态确认] 常驻通知与召回通知是两套东西。 常驻 FGS 通知 ID 为
66666、重要性 3;召回通知使用 30001…30011 场景 ID 和高重要性渠道。本次曾实际观察到 ID 30010 的 H2 召回通知。
- [静态确认] APK 内置远端配置入口。 本地
assets/conf.json 是默认兜底,代码还包含 https://fese.freshenupapp.com/enConf。因此默认值不等于服务端当前线上最终值。
- [当前库与测试机比对] 暂无证据把 Flare 归入现有竞品库中的已知产品族。 它与本地 7 个已拆 base APK、测试机另外 3 款清理 App 均不同签名;核心配置和代码指纹也未在当前库命中。现阶段只能建立 Flare 自身的技术指纹,不能硬判同厂兄弟包。
2. 样本身份与证据边界#
2.1 样本身份#
| 项目 |
值 |
| 应用名 |
Flare Cleaner |
| applicationId |
com.flare.cleaner.storage |
| 版本 |
1.0.7(versionCode 8) |
| minSdk / targetSdk |
24 / 36 |
| base APK 大小 |
25,187,496 bytes |
| base APK SHA-256 |
0df834399bf1a4e706c2ec611dc1f7775afdfcb81a6dabdeb290aba7935ea1d6 |
| 签名 DN |
C=123, ST=SAdeveloper, L=SouthAfica, O=SAdeveloper, OU=SAdeveloper, CN=SAdeveloper |
| 签名 SHA-256 |
7822cc9c207363d79965e8185d75b50f725f0139efcfbbeaa5fd215bed7c31ef |
| 签名 SHA-1 |
5c27da3686f80463d908da4659daa97fbbd6ea61 |
| Google Play Source Stamp SHA-256 |
3257d599a49d2c961a471ca9843f59d341a405884583fc087df4237b733bbd6d |
| 安装来源 |
测试机 Google Play 安装的 split APK,已拉取 base + 4 个 split |
本次使用四种证据口径:
- 静态确认:Manifest、DEX、resources 或 assets 中直接可见。
- 动态确认:本次测试机实际操作以及
dumpsys、PID、Service、Job、Alarm、Notification 结果。
- 合理推断:多条事实共同支持,但没有服务端或跨设备验证。
- 待验证:当前 APK、设备或观察窗口不能确认。
2.2 关键边界#
- APK 中存在组件,不等于它在所有设备、所有时刻都能执行。
- Job/Alarm 的请求时间不是系统承诺的准点执行时间。
- FCM 客户端路径不能证明服务端人群、发送计划、TTL、实际优先级和线上到达率。
- 15 秒 Doze 短测只能证明已有前台服务短时未中断,不能证明长期待机或死亡后的恢复率。
- 本次没有撤销通知权限;通知权限关闭后的完整链路仍需单独验收。
- JADX 1.5.5 已生成源码与资源目录;11,766 个处理项中有 92 个反编译错误。关键的 FCM 高优先级分支因 Java 控制流还原不完整,已另用 DEX 指令反汇编复核;不把全部 JADX 输出当成无误原码。
3. 保活与恢复结构#
3.1 结构图#
【直接 FGS 恢复链】
前台初始化 / 高优先级 FCM
服务 onTaskRemoved / onDestroy
│
▼
统一启动入口 S7.d.h()
│
┌────────┴────────┐
│启动成功 │启动异常
▼ ▼
llLI.ILI1L 前台服务 ldlI7Sl.ILI1L 兜底 Job
START_STICKY 3.816–5.816 秒调度窗
(服务回调会重新进入上方统一启动入口)
【独立后台/通知维护链】
约 23 分钟持久化 Job / 20 分钟 WorkManager / 约 8 小时 Alarm
Boot / App 更新 / 解锁、Home、最近任务等系统事件
│
▼
topic 续订 + 通知引擎/召回场景
(当前调用点未见直接 S7.d.h)
3.2 组件与职责#
| 组件 |
静态行为 |
作用判断 |
证据 |
llLI.ILI1L |
specialUse FGS,subtype=quick entry;onStartCommand() 返回 START_STICKY;onTaskRemoved/onDestroy 再调统一启动入口 |
主要常驻载体 |
静态 + 真机运行 |
ldlI7Sl.ILI1L |
持久化 Job;无网络/充电/空闲要求;最小延迟 3,816ms,deadline 5,816ms;进入前台并尝试恢复主服务 |
服务启动异常时的短延迟兜底 |
静态 |
IiIl.ILI1L |
持久化高优先级 Job;最小延迟 1,376,000ms,deadline 1,379,816ms;运行时续排自己、订阅 FCM topic 并进入通知引擎 |
约 22分56秒–23分钟的后台维护机会;未见直接拉 FGS |
静态 + Job 真机 |
iLII1ll.ILI1L |
一次性 ELAPSED_WAKEUP Alarm;约 28,796,966ms 后触发,接收后续排、订阅 topic 并进入通知引擎 |
约 8 小时一次的后台唤醒/召回机会;未见直接拉 FGS |
静态 + Alarm 真机 |
iILl.ILI1L |
接收 BOOT_COMPLETED、MY_PACKAGE_REPLACED,进入通知引擎 |
开机/升级后的召回机会;当前方法未直接调 S7.d.h |
静态;本次只确认广播白名单与 Job 恢复,未确认 FGS 自动恢复 |
I1iLL.ILI1L |
FirebaseMessagingService;高优先级消息先调统一启动入口 |
Push 到达时提供拉起机会 |
静态 + 测试机历史 allowlist |
S7.c 动态接收器 |
处理 USER_PRESENT、CLOSE_SYSTEM_DIALOGS(Home/最近任务)、DATE_CHANGED 等 |
借系统事件刷新后台/召回链 |
静态 |
| WorkManager |
初始化时排约 20 分钟周期 Worker,工作内容是订阅 topic 并进入通知引擎 |
另一条周期后台/召回维护通道 |
静态 + Manifest + 真机;未见 Worker 直接拉 FGS |
3.3 关键参数#
| 参数 |
当前 APK / 真机值 |
应如何理解 |
| FGS 通知 ID |
66666 |
常驻服务通知,不是营销召回通知 |
| FGS 返回值 |
START_STICKY |
进程被系统回收后可请求重建,但系统不保证立即或一定重建 |
| 兜底 Job |
3.816–5.816 秒 |
仅在兜底路径;仍受后台 FGS 启动限制 |
| 周期 Job |
22分56秒–约23分钟 |
调度窗口;Doze/Standby 可延后 |
| WorkManager |
约 20 分钟周期 |
通知/topic 维护 Worker;不是已证明的 FGS 恢复器 |
| Alarm |
约 8 小时一次 |
使用 AlarmManager.set,不是 exact;本机显示系统可批处理到约 1 小时窗口 |
| FCM topic |
lADDL |
客户端订阅主题;不代表服务端当前一定向该主题发送 |
| topic 失败重试 |
30 秒指数退避,最大 24 小时 |
只说明客户端订阅重试 |
3.4 真实限制#
FOREGROUND_SERVICE_SPECIAL_USE 只是技术声明,不自动等于 Google Play 合规。
- 主 FGS、两个 JobService 和自定义 FCM Service 均声明了
exported=true;其中主 FGS 未见组件级权限保护,存在不必要的外部调用面。
- Android 16 对后台启动 FGS 有严格限制;注册更多入口不等于每条入口都能恢复 FGS。
- Force Stop 会把包置为 stopped,常规广播、Job、Alarm 和 Service 链无法自行突破。
4. 真机动态验证#
| 测试 |
观察结果 |
能证明 |
不能证明 |
| 正常运行 |
llLI.ILI1L 为 specialUse FGS,通知 ID 66666,startCommandResult=1 |
主服务真实运行且为 START_STICKY |
永久不会被杀 |
| 划掉最近任务 |
最近任务卡消失;1 秒和 13 秒后 PID 均为 20297,同一 ServiceRecord 仍前台运行,创建时间连续增长 |
划卡未终止原进程/服务 |
被杀后发生了拉活 |
am stopservice |
服务约 1 秒内在同一 PID 中重新创建,13 秒后仍在 |
onDestroy → 统一启动入口 的服务级恢复有效 |
冷进程恢复可靠 |
| 深度 Doze 15 秒 |
设备为 IDLE;PID 和 FGS 未变;周期 Job 显示 WAIT:DEV_NOT_DOZING;退出后恢复 ACTIVE |
已有 FGS 短时存活;Job 受 Doze 约束 |
Job 在 Doze 中准点运行;长期待机不死 |
| Force Stop |
2 秒、17 秒时均无 PID/服务,包 stopped=true;人工打开后才产生新 PID 24007 |
Force Stop 是硬边界 |
FCM 在 Force Stop 下的实际服务端到达行为 |
| 真机重启 |
BOOT_COMPLETED allowlist 痕迹存在;持久化 Job 3672 恢复并等待约 21 分钟;设备已解锁后仍无 Flare PID/FGS |
广播机会与 Job 能跨重启保留 |
开机可自动恢复前台服务 |
| 重启后人工打开 |
新 PID 13735,约 5 秒内 FGS 重建;重新出现约 8 小时 Alarm 和周期 Job |
前台启动链正常 |
这是自动开机恢复 |
| 历史真实 FCM |
自定义 FCM Service 出现,系统理由为 PUSH_MESSAGING,临时 allowlist 约 20 秒 |
至少一条 Push 真到达并获得短时后台执行机会 |
长期到达率、服务端发送策略 |
5. 通知召回系统#
5.1 两套通知必须分开#
| 类型 |
ID / 渠道 |
行为 |
用户目的 |
| 前台服务常驻通知 |
ID 66666;渠道 Flare CleanerrZiKZ;importance 3 |
Ongoing、No Clear、Foreground Service,自定义 RemoteViews |
维持 FGS 合规可见性和常驻状态 |
| 业务召回通知 |
ID 30001…30011;高重要性动态渠道 Flare CleanermIZEp 等 |
自定义 RemoteViews、场景文案、点击跳清理/电池/流量等页 |
让用户回到 App |
本机重启后的一次统计窗口内,Flare 通知 78 次入队、其中 77 次为更新、仅 1 次新发布;当前只剩 ID 66666。这说明常驻通知被频繁刷新,但该计数不能解释为用户收到了 78 条营销通知。
5.2 召回入口和门槛#
| 入口 |
默认场景 |
主要门槛 / 频控 |
路由或作用 |
| 解锁、Home、最近任务、日期变化 |
A2/A4/A6/A8 四组随机候选 |
全局开关;App 不在前台;屏幕交互、未锁屏、竖屏;安装超过 5 分钟;每模板日上限 10;配置还含 Eco_noticount_unlock=4 |
App Manager / Cache Clean |
| App 退后台 |
B1/B3/B4/B5/B7/B8 |
首次打开超过 5 分钟;全局后台冷却默认 40 分钟;每模板间隔 60 分钟;每模板日上限 10 |
Cache Clean / App Manager |
| 安装其他 App |
C1 |
安装超过 5 分钟、App 不在前台;10 分钟场景间隔;日上限 6 |
清 APK 文件 |
| 卸载其他 App |
C2 |
同上;10 分钟场景间隔;日上限 5 |
清卸载残留 |
| 充电、电量变化 |
D1/D2/D3 |
10 分钟场景间隔;每模板日上限 6 |
Battery Scanning |
| 网络变化 |
N1/N2 |
顶层至少 10 分钟一次;N1/N2 日上限分别 1/2 |
Network Traffic |
| MediaStore 新图片 / 截图观察 |
S |
10 分钟场景间隔;日上限 6 |
Picture Scan Report |
| 约 8 小时 Alarm |
Alarm 通知引擎 |
Alarm 非精确定时;触发后订阅 topic、续排并进入通知路径 |
周期本地召回机会 |
| FCM |
服务端下发内容 + 本地通知引擎 |
权限、优先级和本地状态;高优先级先尝试恢复 FGS |
Push 召回 + 拉起机会 |
| Boot / App 更新 |
启动/更新通知路径 |
受系统广播、包 stopped 状态和后台执行限制 |
重启/升级后的恢复与召回机会 |
| 广告误触返回 |
GO1 |
代码识别广告返回场景 |
回主页面 |
说明:Eco_noticount_unlock=4、Eco_noticount_fcm=5、NotifiEcoBurstCount=2、AlarmecoInterval=120 是默认配置文件中的值;其中各字段在最终线上配置中的值可被远端配置替换。未把仅见配置值、尚未完整闭环到执行点的字段写成已验证线上频控。
5.3 当前 APK 内置的默认召回文案#
以下只列默认 English 标题和点击目的,便于识别策略,不展开产品页面。
| 组 |
事件码 |
默认 Title |
点击路由 |
静态状态 |
| A |
a2 |
RAM at %1$s full! Close apps now |
App Manager |
可达候选 |
| A |
a4 |
Cache at %1$s limit! Clear cache now |
Cache Clean |
可达候选 |
| A |
a6 |
High RAM: %1$s! Clear to boost speed now |
App Manager |
可达候选 |
| A |
a8 |
Storage %1$s full! Clear junk now |
Cache Clean |
可达候选 |
| B |
b1 |
Only %1$s space left! Clear data now |
Cache Clean |
可达候选 |
| B |
b3 |
%1$s junk to be cleaned up! Clean junk instantly |
Cache Clean |
可达候选 |
| B |
b4 |
%1$s no junk cleared! Clean now |
Cache Clean |
可达候选 |
| B |
b5 |
Speed Boost 30% in 1 Min! |
Cache Clean |
可达候选 |
| B |
b7 |
Switching apps lags? Close background now |
App Manager |
可达候选 |
| B |
b8 |
App List Getting Crowded? Remove apps now |
App Manager |
可达候选 |
| C |
c1 |
%1$s installed! Clean APK files |
Cache Clean |
PACKAGE_ADDED 路径 |
| C |
c2 |
App removed! Clear leftover files |
Large File |
PACKAGE_REMOVED 路径 |
| D |
d1 |
%1$s Charged! Battery Health? |
Battery Scan |
电池路径 |
| D |
d2 |
%1$s Battery, Save It Now! |
Battery Scan |
电池路径 |
| D |
d3 |
Full in %1$s! Check battery status |
Battery Scan |
电池路径 |
| N |
n1 |
Slow Internet (%1$s)? Boost It! |
Network Traffic |
网络路径 |
| N |
n2 |
Network Switched! Check data usage |
Network Traffic |
网络路径 |
| S |
s |
Clean 100+ Old Screenshots? Free up space |
Picture Scan |
截图观察路径 |
| GO |
go1 |
Oops! Accidentally clicked an ad? |
Main |
广告返回路径 |
| H |
h1 |
Speed Boost 30% in 1 Min! |
Cache Clean |
已打包;本轮未动态单测 |
| H |
h2 |
%1$s of Junk Files Found! Clean junk Now |
Large File |
本轮动态见到 ID 30010 |
| H |
h3 |
Only %1$s storage left! Release storage now |
Cache Clean |
已打包;本轮未动态单测 |
5.4 通知策略判断#
- [事实] 文案大量使用“RAM 满、存储满、发现垃圾、电池异常、网络变慢”等即时性表达。
- [风险判断] 如果标题中的
%1$s 不是由真实测量值生成,而是随机/估算值,就会构成误导性召回;本报告只证明模板和路由存在,未证明每次展示值都来自真实扫描。
- [事实] 常驻通知为中重要性,业务召回渠道可达 importance 5;高重要性渠道更容易打扰用户。
- [事实] 客户端有多层本地频控,但服务端 FCM 的总频控、人群和发送计划不可从 APK 得出。
- [建议边界] 可借鉴“触发入口分层 + 每场景频控 + 点击路由”,不建议照搬夸张文案、过高渠道重要性或
specialUse 声明。
6. 产品族群指纹#
6.1 已确认指纹#
| 维度 |
Flare 指纹 |
| 签名 |
SHA-256 7822cc9c…c31ef;DN 为 SAdeveloper / SouthAfica |
| 业务代码根 |
com.liam.garbagecleaner |
| 远端配置 |
https://fese.freshenupapp.com/enConf |
| FCM topic |
lADDL |
| Adjust App Token |
68vxnujbqu80 |
| Facebook App ID |
752379677929390 |
| AdMob App ID |
ca-app-pub-9568628350852134~5036152218 |
| 广告栈 |
TradPlus + AppLovin + Meta Audience Network + Google Ads / TP ADX |
| 隐私/条款入口 |
risingl.com/privacy1、Google Sites 的 Flare Cleaner Privacy/Terms |
| 核心代码纹理 |
S7 恢复子系统、t7 场景模板、R7 通知引擎、EnConfig 配置模型、加密字符串解码 |
6.2 当前比对结果#
| 比对范围 |
结果 |
结论 |
| 当前逆向库 7 个其他 base APK |
无相同签名 |
不是已知同签名产品族 |
| 当前逆向库文本/代码指纹 |
未命中 freshenupapp.com、com.liam.garbagecleaner、关键通知配置名 |
暂未发现同代码底座样本 |
| 测试机其他 3 款清理 App |
系统签名摘要均不同 |
不是同签名兄弟包 |
| APK 内兄弟包名 |
未发现明确同厂应用包名清单 |
不支持“跨 App 互拉”结论 |
6.3 当前族群结论#
当前只能定义“Flare 技术指纹”,不能确认它属于竞品库里的某个既有产品族。 后续 6 个包拆完后,应使用同一组字段横向匹配:签名 SHA-256、配置域名、Adjust Token、广告位前缀、FCM topic、包内代码根、混淆组件名和通知模板事件码。只要出现 3 个以上独立高区分度指纹一致,即可提高“同产品族/同技术底座”的置信度。
7. 可借鉴与不建议照搬#
7.1 可借鉴#
- 用一个统一启动入口收口 Service、Job、Alarm、Boot 和 FCM,减少多入口状态不一致。
- 把“任务卡移除后持续存活”“服务重建”“冷进程拉起”“开机恢复”“Force Stop”拆成独立验收项。
- 给每个通知入口单独设置首次使用延迟、场景冷却、日上限和点击路由。
- 将 FCM 高优先级的短时执行机会与普通本地通知路径分开记录。
- 动态记录通知是新发布还是更新;不能用
notify() 次数代替用户实际曝光。
7.2 不建议照搬#
- 不应把
specialUse 当通用保活通行证。
- 不应把主 FGS 和 FCM Service 无保护地
exported=true。
- 不应承诺 Force Stop 后自恢复或永久保活。
- 不应使用未经真实测量支持的“垃圾已发现、RAM 已满、电池异常”等文案。
- 不应只靠客户端频控;服务端还需要总频控、人群排除、时区、退订和实验控制。
8. 未验证项#
- 通知权限关闭后,主 FGS、Job 和 FCM 的完整行为。
- Android 16 以外 ROM,特别是小米、OPPO、vivo、三星的后台限制差异。
- 周期 Job 在自然等待到期后能否从死亡进程恢复,以及是否能获批启动 FGS。
- 远端
enConf 当前线上返回值与分群规则。
- FCM 服务端的发送人群、频率、TTL、优先级降级率和真实到达率。
- H1/H3、全部电池/包变更/截图模板逐条动态展示与点击路由。
- 商店主体与其他公开产品的最终同族关系;当前仅完成本地签名与代码指纹比对。
9. 样本与证据位置#
- 原始 split APK:
Clean/cleaner-7-pack-2026-08-31/flare-cleaner/apk/
- JADX 反编译:
Clean/cleaner-7-pack-2026-08-31/flare-cleaner/jadx/
- 真机证据:
Clean/cleaner-7-pack-2026-08-31/flare-cleaner/evidence/
- 本报告:
Clean/Flare_Cleaner_v1.0.7_保活恢复_通知召回_产品族群逆向报告.md