宽表格和代码可左右滑动查看。
AntiVirus Clean v1.0.0.7 权限与后台机制拆包报告#
精确包名:com.eduspot.antivirus.clean;样本及资料日期:2026-10-28,Asia/Shanghai(北京时间)。六专题补充版。
S1=当前APK静态直接证据;S2=工具回读;S3=当前真机观察;I=推断;U=未验证。反编译不是原始源码,内置配置不是线上最终配置。发布状态单独记录于批次入口。
结论#
本包有常驻19001和通知模块,但Manifest没有Ace的自有Boot/Alarm/临时FGS恢复组件;不能因为工厂和通知布局相似就复制其恢复结论。
业务通知先过滤候选、日期额度及间隔,再异步构建/加载图片并最终notify;通知点击经专用中转/启动页进入主页,并保留actionId。主页的onNewIntent会再次处理通知参数,不是只有冷启动能回流。
权限声明、调用及实际授予#
下表完整保留本批Manifest的uses-permission声明;同名不同标签/受版本限制的声明不能直接相加为已获权限数量。运行时仅明确允许通知,未开启文件管理、使用情况、悬浮窗或通知读取等特殊访问;真实工具效果因此未验证。服务上的绑定保护权限与应用获准读取是两回事。
| 权限 | Manifest行 | 本轮用途/边界 |
|---|---|---|
android.permission.READ_EXTERNAL_STORAGE |
16 | 存储读取声明;是否生效取决于系统与targetSDK,未将声明当作获准。 |
android.permission.INTERNET |
18 | 网络能力声明;联网业务、广告/配置调用需另核。 |
android.permission.QUERY_ALL_PACKAGES |
19 | 应用可见性声明;不等于已核实完整安装列表或所有处理效果。 |
android.permission.FOREGROUND_SERVICE |
20 | 前台服务声明;是否使用以组件、调用及真机证据为准。 |
android.permission.READ_MEDIA_VIDEO |
21 | 视频读取声明;本轮未授予。 |
android.permission.PACKAGE_USAGE_STATS |
22 | 使用情况访问;本轮未开启特殊访问,不验证其他App使用数据。 |
android.permission.FOREGROUND_SERVICE_SPECIAL_USE |
23 | specialUse类型前台服务声明;需按服务清单/系统条件解释。 |
android.permission.ACCESS_WIFI_STATE |
24 | 网络能力声明;联网业务、广告/配置调用需另核。 |
android.permission.REQUEST_DELETE_PACKAGES |
25 | 请求系统卸载确认;本轮未执行卸载。 |
android.permission.MANAGE_EXTERNAL_STORAGE |
26 | 所有文件访问声明;未授权该特殊权限,真实扫描/删除未验证。 |
android.permission.SYSTEM_ALERT_WINDOW |
27 | 悬浮窗特殊访问声明;本轮未开启。 |
android.permission.READ_MEDIA_IMAGES |
28 | 图片读取声明;本轮未授予。 |
com.google.android.gms.permission.AD_ID |
29 | 广告/归因生态声明;当前数据采集与出量状态未由权限表证明。 |
android.permission.READ_MEDIA_AUDIO |
30 | 音频读取声明;本轮未授予。 |
android.permission.POST_NOTIFICATIONS |
31 | 展示通知;本轮仅此运行时权限已确认允许。 |
android.permission.WRITE_EXTERNAL_STORAGE |
32 | 旧版存储写入声明;未把此声明当作Android13可任意读写。 |
android.permission.GET_PACKAGE_SIZE |
33 | Manifest声明已核对;具体业务调用/运行时效果本轮未逐项闭合。[U] |
android.permission.ACCESS_NETWORK_STATE |
34 | 网络能力声明;联网业务、广告/配置调用需另核。 |
android.permission.AD_ID |
94 | 广告/归因生态声明;当前数据采集与出量状态未由权限表证明。 |
android.permission.VIBRATE |
95 | Manifest声明已核对;具体业务调用/运行时效果本轮未逐项闭合。[U] |
com.android.vending.CHECK_LICENSE |
96 | Manifest声明已核对;具体业务调用/运行时效果本轮未逐项闭合。[U] |
android.permission.WAKE_LOCK |
97 | 唤醒锁权限声明;本批未验证持有时长。 |
com.google.android.finsky.permission.BIND_GET_INSTALL_REFERRER_SERVICE |
98 | 广告/归因生态声明;当前数据采集与出量状态未由权限表证明。 |
android.permission.ACCESS_ADSERVICES_ATTRIBUTION |
99 | 广告/归因生态声明;当前数据采集与出量状态未由权限表证明。 |
android.permission.ACCESS_ADSERVICES_AD_ID |
100 | 广告/归因生态声明;当前数据采集与出量状态未由权限表证明。 |
com.google.android.c2dm.permission.RECEIVE |
101 | Manifest声明已核对;具体业务调用/运行时效果本轮未逐项闭合。[U] |
android.permission.ACCESS_ADSERVICES_TOPICS |
102 | 广告/归因生态声明;当前数据采集与出量状态未由权限表证明。 |
com.samsung.android.mapsagent.permission.READ_APP_INFO |
103 | Manifest声明已核对;具体业务调用/运行时效果本轮未逐项闭合。[U] |
com.huawei.appmarket.service.commondata.permission.GET_COMMON_DATA |
104 | Manifest声明已核对;具体业务调用/运行时效果本轮未逐项闭合。[U] |
android.permission.ACCESS_ADSERVICES_CUSTOM_AUDIENCE |
105 | 广告/归因生态声明;当前数据采集与出量状态未由权限表证明。 |
com.eduspot.antivirus.clean.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION |
107 | 应用自定义动态广播隔离权限。 |
com.sec.android.provider.badge.permission.READ |
110 | 桌面/角标兼容性声明;不代表本轮实际使用。 |
com.sec.android.provider.badge.permission.WRITE |
111 | 桌面/角标兼容性声明;不代表本轮实际使用。 |
com.htc.launcher.permission.READ_SETTINGS |
112 | 桌面/角标兼容性声明;不代表本轮实际使用。 |
com.htc.launcher.permission.UPDATE_SHORTCUT |
113 | 桌面/角标兼容性声明;不代表本轮实际使用。 |
com.sonyericsson.home.permission.BROADCAST_BADGE |
114 | 桌面/角标兼容性声明;不代表本轮实际使用。 |
com.sonymobile.home.permission.PROVIDER_INSERT_BADGE |
115 | 桌面/角标兼容性声明;不代表本轮实际使用。 |
com.anddoes.launcher.permission.UPDATE_COUNT |
116 | 桌面/角标兼容性声明;不代表本轮实际使用。 |
com.majeur.launcher.permission.UPDATE_BADGE |
117 | 桌面/角标兼容性声明;不代表本轮实际使用。 |
com.huawei.android.launcher.permission.CHANGE_BADGE |
118 | 桌面/角标兼容性声明;不代表本轮实际使用。 |
com.huawei.android.launcher.permission.READ_SETTINGS |
119 | 桌面/角标兼容性声明;不代表本轮实际使用。 |
com.huawei.android.launcher.permission.WRITE_SETTINGS |
120 | 桌面/角标兼容性声明;不代表本轮实际使用。 |
android.permission.READ_APP_BADGE |
121 | 桌面/角标兼容性声明;不代表本轮实际使用。 |
com.oppo.launcher.permission.READ_SETTINGS |
122 | 桌面/角标兼容性声明;不代表本轮实际使用。 |
com.oppo.launcher.permission.WRITE_SETTINGS |
123 | 桌面/角标兼容性声明;不代表本轮实际使用。 |
me.everything.badger.permission.BADGE_COUNT_READ |
124 | 桌面/角标兼容性声明;不代表本轮实际使用。 |
me.everything.badger.permission.BADGE_COUNT_WRITE |
125 | 桌面/角标兼容性声明;不代表本轮实际使用。 |
系统API调用点复核#
不是只列Manifest:下表定位系统API/监听回调。业务命名空间与R8合并/工具类分开,后者只证明文件内含API,未把同文件的SDK路径当作业务调用已生效。未命中也不判定不存在,仍需从入口追踪。
| 能力 | 静态调用/候选位置 | 证据边界 |
|---|---|---|
| 所有文件访问检查 | 仅SDK/其他类命中,不作为业务调用证明 | U |
| 文件访问授权入口 | 仅SDK/其他类命中,不作为业务调用证明 | U |
| 使用情况查询 | 本轮模式未定位;可能混淆/封装,不能判定不存在 | U |
| 通知监听/清除 | onNotificationPosted → subgrill/mecriou/statesolem/hooemen/fluenigita/TankeectfuService.java:210(目标业务命名空间) |
S1调用点;运行时U |
| 卸载请求 | android.intent.action.DELETE → subgrill/mecriou/statesolem/hooemen/sundishe/varyesso/decapheri/Fusetra.java:75(目标业务命名空间)android.intent.action.DELETE → B9D8B/BBB.java:195(含目标引用的合并/工具类,具体调用链需另核) |
S1调用点;运行时U |
| 摄像头/手电筒 | 本轮模式未定位;可能混淆/封装,不能判定不存在 | U |
| 系统设置写入 | 仅SDK/其他类命中,不作为业务调用证明 | U |
| 悬浮窗检查 | 仅SDK/其他类命中,不作为业务调用证明 | U |
| 媒体库访问 | MediaStore.Images → BBDB8/DB98.java:312(含目标引用的合并/工具类,具体调用链需另核)MediaStore.Files → D9BD8/BBD.java:437(含目标引用的合并/工具类,具体调用链需另核)MediaStore.Files → D9BD8/BBD.java:515(含目标引用的合并/工具类,具体调用链需另核) |
S1调用点;运行时U |
| 前台服务启动 | 仅SDK/其他类命中,不作为业务调用证明 | U |
| 精确闹钟调用 | 仅SDK/其他类命中,不作为业务调用证明 | U |
| 唤醒锁 | 仅SDK/其他类命中,不作为业务调用证明 | U |
服务与广播清单#
以下为服务/广播中与业务后台、通知或恢复相关的声明;SDK类也注明为声明,不把第三方SDKJob直接算成自有恢复链。全部精确组件仍见本地Manifest索引。
| 类型/组件 | 动作 | FGS类型/保护权限 | Manifest行 |
|---|---|---|---|
service subgrill.mecriou.statesolem.hooemen.fluenigita.TankeectfuService |
android.service.notification.NotificationListenerService | android.permission.BIND_NOTIFICATION_LISTENER_SERVICE | 151 |
service com.eduspot.clean.notify.service.MyFirebaseMessagingService |
com.google.firebase.MESSAGING_EVENT | 未声明 | 253 |
service com.eduspot.clean.notify.service.NotificationService |
无静态过滤器 | specialUse | 307 |
service com.trustlook.sdk.job.TlJobService |
无静态过滤器 | android.permission.BIND_JOB_SERVICE | 356 |
service com.google.firebase.components.ComponentDiscoveryService |
无静态过滤器 | 未声明 | 598 |
receiver com.google.firebase.iid.FirebaseInstanceIdReceiver |
com.google.android.c2dm.intent.RECEIVE | com.google.android.c2dm.permission.SEND | 664 |
service com.google.firebase.messaging.FirebaseMessagingService |
com.google.firebase.MESSAGING_EVENT | 未声明 | 675 |
业务页面中的权限入口#
| 页面 | 实际系统调用/入口 | 来源 |
|---|
调度和恢复机制分别判断#
NotificationService.onCreate初始化通知控制器,优先创建业务常驻通知,必要时使用fallback_channel、标题Service running,再以ID19001进入前台;onStartCommand返回1,onTimeout停止。[A3]
通知模块生命周期回调在Activity恢复时启动/绑定服务。Manifest本样本没有Ace的UserBootReceiver、UserBootJobService、KeepAliveAlarmReceiver、TemporaryKeepAliveService,也未声明RECEIVE_BOOT_COMPLETED;因此本报告不把Ace的恢复链迁移过来。
DB98.DB998在协程循环中调用普通通知入口,再以读取参数×1000毫秒等待;不能把轮询周期直接当成每次成功发送周期。FCM或应用重开可进入客户端模块,但强停后服务端是否恢复完全未测试。[A4]
触发—条件—状态表#
| 阶段 | 已追到的调用链 | 关键边界 | 证据 |
|---|---|---|---|
| 业务任务 | 功能Activity → 权限/确认 → 结果 | 照片隐私针对位置历史,压缩与删除分开 | N1/页面索引 |
| 主页回流 | notify_action_id → onNewIntent → 分发 | 已有实例与冷启动路径分别核验 | N2 |
| 日配额 | 本地午夜 → 每ID日键 → 剩余数 | 独立核验本包,不复制Ace的实现路径 | N3/N4 |
| 通知构建 | 候选List随机 → 格式化 → RemoteViews → PendingIntent | 文案变量不是扫描真实性证明 | N5 |
| 后台边界 | 常驻FGS/轮询/FCM → 各自入口 | 没有Ace Boot/Alarm组件;短窗口结果不外推长期 | 原A3–A6 |
测试设备授权快照#
快照时间:2026-10-28T16:23:41+08:00。null/None表示本次输出没有该项或不适用,不解释为已拒绝;AppOps无显式记录也不解释为已授权。
| 类型 | 字段 | 本次值 |
|---|---|---|
| 运行时权限 | POST_NOTIFICATIONS | True |
| 运行时权限 | READ_EXTERNAL_STORAGE | False |
| 运行时权限 | WRITE_EXTERNAL_STORAGE | False |
| 运行时权限 | READ_MEDIA_IMAGES | False |
| 运行时权限 | READ_MEDIA_VIDEO | False |
| 运行时权限 | READ_MEDIA_AUDIO | False |
| 运行时权限 | CAMERA | None |
| 运行时权限 | ACCESS_FINE_LOCATION | None |
| 特殊访问 | MANAGE_EXTERNAL_STORAGE | default |
| 特殊访问 | GET_USAGE_STATS | NO_EXPLICIT_OPERATION |
| 特殊访问 | SYSTEM_ALERT_WINDOW | default |
| 特殊访问 | WRITE_SETTINGS | NO_EXPLICIT_OPERATION |
| 通知读取 | notification_listener_enabled | False |
系统限制与验证方法#
本轮短时Home/划卡存活与强停结果见真机专题;启动一个Job、注册Receiver、返回START_STICKY均不构成长期成功率。低内存杀进程、确认进入Doze、跨日调度和生产FCM仍需独立事件与时间窗。特殊权限只解释其具体功能用途,不把通知权限泛化为清理必需。
原有代码锚点 A#
| 编号 | 证明内容 | 本地源位置 | 核验 |
|---|---|---|---|
| A1 | Adjust回调 | jadx-repair/sources/DB9B/BDBD.java:308–331 |
已回读 |
| A2 | Referrer组合及分流 | jadx-repair/sources/DB9B/BDBD.java:517–553 |
已回读 |
| A3 | 常驻FGS19001及回退 | jadx-repair/sources/com/eduspot/clean/notify/service/NotificationService.java:137–180 |
已回读 |
| A4 | 普通通知轮询 | jadx-repair/sources/DB98/DB998.java:43–82 |
已回读 |
| A5 | 常驻构建 | jadx-repair/sources/DB98/DB98D.java:59–88 |
已回读 |
| A6 | 每类回退Pair | jadx-repair/sources/D8DD9/BDDD.java:25–43 |
已回读 |
| A7 | 随机/配额/间隔候选过滤 | jadx-repair/sources/DB98/BBB.java:412–510 |
已回读 |
| A8 | FCM入口与Token回调 | jadx-repair/sources/com/eduspot/clean/notify/service/MyFirebaseMessagingService.java:18–48 |
已回读 |
| A9 | 业务对象与ID绑定 | jadx-repair/sources/BBBB8/DB8D.java:597–618 |
已回读 |
| A10 | 普通通知候选注册 | jadx-repair/sources/BBBB8/DB8D.java:705–735 |
已回读 |
| A11 | 120与6默认参数读取 | jadx-repair/sources/DB98B/DB99.java:1525–1537 |
已回读 |
本轮补充代码锚点 N#
| 编号 | 证明内容 | 本地源位置 | 核验 |
|---|---|---|---|
| N1 | 照片隐私标题与位置历史删除确认 | jadx-repair/sources/subgrill/mecriou/statesolem/hooemen/sundishe/anectrenc/ArthtablActivity.java:384–412 |
已回读 |
| N2 | 主页处理actionId及初始化 | jadx-repair/sources/subgrill/mecriou/statesolem/hooemen/sundishe/grineal/PourencActivity.java:108–129 |
已回读 |
| N3 | 本地午夜与上一日时间 | jadx-repair/sources/DDDD/DB8D.java:12–35 |
已回读 |
| N4 | 每ID日期额度、时间与上次ID存储 | jadx-repair/sources/DB999/DB99.java:65–141 |
已回读 |
| N5 | 候选文案格式化和点击参数 | jadx-repair/sources/BBBB8/DB8D.java:637–676 |
已回读 |
| N6 | 两秒返回与onNewIntent通知重分发 | jadx-repair/sources/subgrill/mecriou/statesolem/hooemen/sundishe/grineal/PourencActivity.java:205–229 |
已回读 |
| N7 | B9单行四个通知对象与独立候选资源 | jadx-repair/sources/BBBB8/DB8D.java:693–702 |
已回读 |
| N8 | BD9单行九个通知对象与100060等候选池 | jadx-repair/sources/BBBB8/DB8D.java:805–806 |
已回读 |
| N9 | 点击类型改变PendingIntent请求码的辅助函数 | jadx-repair/sources/BBBB8/DB8D.java:870–872 |
已回读 |
六专题导航#
| 专题 | 用途 |
|---|---|
| 产品功能与商业化分析 | 业务任务、页面、广告与来源链 |
| 权限与后台机制拆包报告 | 声明、调用、实际授权和功能边界 |
| 保活与拉活反编译代码册 | 机制图、主链步骤、代码片段与控制流修复 |
| 拉活通知规则与文案全量报告 | 触发、状态、频控、动作、候选和多语言全文 |
| 样本与证据索引 | 版本、split、签名、定位与证据范围 |
| 真机动态验证与后台存活报告 | 真实操作、后台矩阵、观察与未执行项 |