一句话判断
UpFoto 是一个 Flutter AOT + 原生 Activity 混合架构的照片增强产品:本地视觉处理、结果页包装、广告 mediation、订阅/IAP 和自有归因上报都很完整;真正后端 host、上传链路、付费触发和广告频控仍必须动态验证。
Flutter AOT
Google Billing
Ad mediation
Attribution log
Local face/model assets
Remote config bridge
5 条结论
- 直接证据:Manifest 暴露完整产品页面面:Splash、Welcome/Guide、Permission、Main、Photo list/crop/edit/process/result/share、AI video、Avatar、Restore、Filter、IAP/Sub。
- 直接证据:付费是核心路径:Billing 权限、Google Billing Proxy、十多套 IAP/Sub Activity、half-off/free-trial/no-ads/remove-watermark/HD 资源同时存在。
- 直接证据:广告栈很宽:AppLovin、Pangle/ByteDance、Facebook Audience Network、Google Ads、InMobi、IronSource、MyTarget;AOT 有 load/show/close/combination/splash/guide 广告桥。
- 推断:后端 host 来自 native config:AOT 只恢复
/api/contribute、/api/attr/report、_apiUserHost、loadConfig,真实域名没有静态恢复。 - 推断:图像处理至少有本地预处理和编辑能力;是否云端增强未被静态证明,需要照片选择后的网络和任务流验证。
证据矩阵
| 主题 | 直接证据 | 判断 |
|---|---|---|
| 包身份 | ai.photo.enhancer.photoclear,version 1.4.1.118 | verified |
| Flutter AOT | blutter 对 arm64 split 完成分析,生成 objs.txt、pp.txt、blutter_frida.js | verified |
| 权限 | INTERNET、媒体读取、BILLING、ACCESS_ADSERVICES_*、AD_ID、Install Referrer | verified |
| Onboarding | RSplash、RWelcome*、RGuideC、RPermission;guide_c/*.mp4 | direct |
| 核心照片链路 | RPhotoList、RPhotoCrop、RPhotoEdit、RProcess、RResult* | direct |
| 本地视觉能力 | models_bundled/*.tflite/.pb/.emd、libMNN*、libface_detector_v2_jni.so、LUT assets | direct |
| 付费 | RIap*、Iap*Activity、SubInfoActivity、SubManagerActivity、IAP/Pro/No Ads 资源 | direct |
| 广告 | FlutterAppApi.onAdShowed、NativeAppGlobalApi.loadAd、NativeSplashApi.showAd、NativeGuideLanApi.showCardAd | direct |
| 后端 | /api/contribute、/api/attr/report、_apiUserHost、no host config | host unknown |
| 归因 | install_referrer、adjust、af、google_ad_id、advertisingId、Attr_Log | direct |
产品 / 实现逻辑图
启动
加载 config / attribution
RSplashRLaunch加载 config / attribution
→
引导
guide 视频 + 广告卡
RWelcome*RGuideCguide 视频 + 广告卡
→
权限
媒体读取 / 网络 / 通知
RPermission媒体读取 / 网络 / 通知
→
主页
功能入口 + 广告加载
RMain功能入口 + 广告加载
选择
RPhotoListRPhotoCrop→
编辑
LUT / sharpen / contrast
RPhotoEditLUT / sharpen / contrast
→
处理
MNN / face model / native lib
RProcessMNN / face model / native lib
→
结果
HD / Share / Save / Paywall
RResult*HD / Share / Save / Paywall
AI 扩展
RAiVideo*RAvatar*Restore*↔
付费
trial / half-off / no ads
RIap*Sub*trial / half-off / no ads
↔
广告
loadAdshowAdloadCombinationAd↔
后端
host from config
/api/contribute/api/attr/reporthost from config
分区分析
Onboarding
- 直接证据:
RSplash/RLaunch/RWelcomeC/RWelcomeNative/RWelcomeX/RGuideC/RPermission。 - 直接证据:
assets/guide_c/welcome.mp4和guide_1..4.mp4。 - 推断:Splash/Guide 由 native fragment、remote config 和广告桥共同控制。
核心处理链路
- 直接证据:照片选择、裁剪、编辑、处理、预览、结果、分享 Activity 完整存在。
- 直接证据:face/model assets、MNN/GPU/native 图像库和 LUT 同时存在。
- 推断:有本地即时处理能力;云端高清增强仍未证明。
付费 / 广告 / 归因
- 直接证据:Billing + IAP/Sub Activity + half-off/free-trial/no-ads/remove-watermark/HD 资产。
- 直接证据:多广告 SDK 和 Flutter/native 广告桥。
- 直接证据:
Attr_Log、install referrer、Adjust、AppsFlyer-likeaf字段、GAID 字段。
接口 / 后端依赖
- 直接证据:
/api/contribute和/api/attr/report。 - 直接证据:
NativeAppGlobalApi.loadConfig、FlutterAppApi.refreshAndGetConfig、common_config、gl_config。 - 阻塞:真实 host、payload、触发点需要动态抓包或 hook。
可复刻学习项
| 模块 | 可复刻点 | 价值 | 注意 |
|---|---|---|---|
| 首启引导 | guide 视频 + native splash 广告 + remote config | 传达前后对比和卖点,保留变现位 | 控制广告打扰和权限前置损耗 |
| 图像处理 | 本地模型/LUT/native pipeline 做即时反馈 | 降低首个价值等待成本 | 高质量增强是否云端要独立验证成本 |
| 结果页转化 | HD、去水印、分享、保存、No Ads | 用户看到结果后转化更自然 | 避免强锁结果导致差评 |
| 新用户 offer | half-off、free-trial、new-user 多套页面 | 可按渠道和 cohort AB | 订阅条款和取消入口要清晰 |
| 归因闭环 | 自有 Attr_Log + SDK/referrer/channel mapping | 把渠道、广告、IAP 收益串起来 | 隐私合规和用户同意要严谨 |
| 广告桥 | Flutter 发业务意图,native 管 mediation | 隔离多 SDK 复杂度 | 频控、失败兜底、配置灰度必须完善 |
动态验证点
| 优先级 | 验证点 | 方法 | 目标证据 |
|---|---|---|---|
| P0 | 真实 API host 和 config 返回值 | MITM;hook NativeAppGlobalApi.loadConfig | host、配置 JSON、广告/IAP 开关 |
| P0 | 首次启动路径 | 清数据安装录屏;hook Activity start / Pigeon channel | Splash -> Guide -> Permission -> Main 的真实分支 |
| P0 | 照片增强是否上传 | 选择本地照片后抓包;断网对比 | 上传 endpoint、payload、任务轮询 |
| P0 | Paywall 触发点和 SKU | 遍历 New User、Filter、AI Video、Result HD/Remove watermark、No Ads | SKU、价格、trial、restore/close 行为 |
| P1 | 广告库存位 | hook loadAd / showAd / showOHCd / onAdClose | Splash、Guide、结果页、退出广告位 |
| P1 | 归因上传 | 模拟 referrer/deep link,抓 /api/attr/report | atts payload、窗口、重试、去重 |
| P1 | 本地模型职责 | hook JNI/native lib 或断网跑处理链路 | 离线功能和联网功能边界 |
阻塞
- 动态缺口:没有真机运行、MITM 或 Frida hook,不能确认真实页面顺序、广告频控、paywall 触发条件和接口 payload。
- 后端缺口:没有恢复真实
_apiUserHost,静态 endpoint candidates 是库/平台噪声。 - AOT 缺口:blutter 输出是对象池/汇编级恢复,不能等同完整 Dart 源码。
- 处理链路缺口:本地模型和 native libs 已证明,但高清增强是否云端完成未证明。
引用证据路径
research/app-package-forensics/upfoto-ai-photo-enhancer/apk-pure-latest/analysis.jsonresearch/app-package-forensics/upfoto-ai-photo-enhancer/apk-pure-latest/brief.mdresearch/app-package-forensics/upfoto-ai-photo-enhancer/apk-pure-latest/evidence.csvresearch/app-package-forensics/upfoto-ai-photo-enhancer/apk-pure-latest/activity-triage.jsondata/extracted/package_forensics/runs/20260610-flutter-arm64-focus/upfoto-ai-photo-enhancer/deep-tools/deep-tool-summary.jsondata/extracted/package_forensics/runs/20260610-flutter-arm64-focus/upfoto-ai-photo-enhancer/deep-tools/flutter-aot/arm64-v8a/apk_contents__config.arm64_v8a.apk/pp.txtdata/extracted/package_forensics/runs/20260610-flutter-arm64-focus/upfoto-ai-photo-enhancer/deep-tools/flutter-aot/arm64-v8a/apk_contents__config.arm64_v8a.apk/objs.txtdata/extracted/package_forensics/runs/20260610-flutter-arm64-focus/upfoto-ai-photo-enhancer/deep-tools/flutter-aot/arm64-v8a/apk_contents__config.arm64_v8a.apk/blutter_frida.js