Package Forensics · Flutter AOT Deep Dive · 2026-06-10

Photo Sherlock

Packagehippeis.com.photochecker
Version1.133 / 152
FrameworkHybrid native Android + Flutter module
Primary remotehttps://photosherlock.com/api

核心判断

Photo Sherlock 的主方案是拍照/相册/分享图片,裁剪后上传得到 image_url,再由 Flutter 调 search-image 远端接口返回 same_results / similar_results。结果页用缩略图、站点来源、文本结果和直链包装,免费用户受额度/广告约束,Pro 解锁无限搜索、无广告和直链。

本包没有恢复出本地人脸识别模型:未发现 .tflite.onnx.pb,也未见 ML Kit/TensorFlow/OpenCV 人脸识别依赖。静态上更应判定为远端搜索和外部搜索引擎包装,而不是纯本地 face search。

敏感值处理:资源中出现 Google/Firebase key/app id/sender id 等配置项和值,本报告只记录变量名和 host;AdMob unit id 用 ca-app-pub-.../... redacted。

证据入口

证据路径 / 关键词用途
APK 静态报告research/app-package-forensics/photo-sherlock/apk-pure-latest/analysis.jsonXAPK、Flutter、AdMob/Firebase、Billing、权限和组件
blutter AOT.../deep-tools/flutter-aot/arm64-v8a/apk_contents__config.arm64_v8a.apk/pp.txtDart 服务、URL、搜索 schema、IAP、method channel
对象池objs.txtSearchTabTypeBackendErrorType_ProItem
Frida class mapblutter_frida.js确认 SearchServiceHTTPClientIAPService 等类
资源字符串apk_contents/hippeis.com.photochecker.apk/resources.arsc用户文案、法务、Bing、Pro、分享教程、审核提示
原生 layout/xmlres/layout/*res/xml/*相机、选图、导入、裁剪、详情、FileProvider 和广告位

产品链路

1. 选图/拍照/分享select_photo_layoutcamera_fragmentshare_image_tutorial_layout
2. 裁剪/预处理UCropActivityCrop image、无结果时提示裁掉无关区域
3. 上传后回调UPLOADED_IMAGE_URLuploadedImageUrlReceived
4. 远端搜索SearchService::searchImageimage_urlsearch-image
5. 结果包装same_resultssimilar_resultstext_resultsimages
6. 变现/解锁search_locked、rewarded ad、Pro direct link

页面和 Route

未恢复到 Flutter 命名 route 表;能恢复 root widget、Flutter 页面类和原生 layout。

页面 / 组件作用
原生MainActivity主入口
原生camera_fragment.xmlselect_photo_layout.xmlimport_image_layout.xml拍照、相册、分享导入
原生UCropActivityucrop_* layout裁剪图片
原生photo_details_web_layoutphoto_details_flutter_layoutphoto_details_other_layout详情页/WebView/广告承载
FlutterSearchScreenSearchWidgetSearchTabWidget搜索结果主体验和 tabs
FlutterIAPScreenLegalInfoWidgetNoImagesFoundWidget订阅、法务、空结果
BridgeMethodChannelManager上传 URL、广告、购买、UI 可见性回调

Image to search Select a photo Take a photo to search Search in Bing No search data Open Photo Sherlock website

搜索 Schema

  • SearchService::searchImage 调远端。
  • 入参/字段:image_urlpassresult
  • 响应:SearchResult -> tabs -> SearchTab
  • tab 类型:same_results / similar_results
  • 结果字段:text_resultsimagesentitypage_urlhost_name

本地 vs 远端

  • 本地确认:拍照、选图、分享导入、裁剪、FileProvider、缓存、展示。
  • 远端确认:photosherlock.com/apisearch-imageshould-load-rewarded
  • 未证实:上传 host、headers、auth、服务端搜索引擎、排序算法。
  • 未发现:本地 ML 模型或本地 face embedding 实现。

Host / Endpoint / Remote Config

类别线索判断
业务 APIhttps://photosherlock.com/apisearch-imageFlutter 侧硬编码搜索 base 与 endpoint
激励广告should-load-rewarded后端决定是否加载 rewarded ad
官网/跳转photosherlock.com/redirect直链/官网搜索/跳转包装
Bingwww.bing.comSearch in Bing、Bing disclaimer明确包装 Bing 搜索体验,但不证明唯一 provider
Firebasefirebase_database_urlgoogle_storage_bucketphoto-sherlock.firebaseio.comphoto-sherlock.appspot.com确认配置/host,不能证明 Firestore 业务读写
Remote ConfigFirebaseRemoteConfigSHOW_PHOTO_DETAILS_BANNER_ON_BING至少有远程开关控制详情页 Bing banner
法务S3 privacy/terms host隐私/条款托管,不代表业务搜索

订阅、广告、埋点

类别证据含义
IAP 商品com.appsmotor.PhotoSherlock.disableAdsps.pro.sub一次性去广告/Pro subscription 线索
Pro 权益unlimitedSearchesnoAdsopenDirectSearchResult额度、广告、直链是核心付费点
购买动作restorePurchasesmanageSubscriptions、Google Play subscription URL标准 Google Billing 流程
广告AdMob Activity/Service、AdView layout、rewarded/interstitial/native strings多位置广告,ad unit 已 redacted
埋点/归因Firebase Analytics、Crashlytics、Install Referrer、AdServices AD_ID/ATTRIBUTION/TOPICS基础广告归因和稳定性监控
未命中AppsFlyer / Adjust / Branch / OneSignal未看到明确 SDK 线索

复刻低垂果实

机会做法证据来源
首次价值开屏即选图/拍照/分享,返回 same/similar 两 tabSelect a photoSearchResult.tabs
结果包装缩略图宫格、host badge、文本结果、来源直链page_urlhost_nametext_results
免费额度每日免费次数 + reward ad 补一次search_lockedrewardReceived
订阅权益无限搜索、无广告、打开直链_ProItem 三项
分享入口从 dating/social app 截图分享到 App 搜索分享教程文案直接命中 dating/fake 场景
合规信任不承诺身份识别;强调来源检查、删除策略和敏感图处理Bing disclaimer、隐私/条款、内容审核提示

MVP 方案

  1. Android 或 Web PWA:选择/拍照/分享图片 -> 裁剪 -> 上传对象存储 -> 后端 POST /search-image
  2. 后端统一 schema:same_results[]similar_results[]text_results[]images[]
  3. 免费策略:首次 3 次免费;之后 rewarded ad 或订阅;订阅只承诺额度/无广告/直链/历史,不承诺找人准确率。
  4. 搜索供应商 adapter 化,避免前端绑定到 Bing/Yandex/Google Lens/自研任一实现。
  5. 上传前明确告知用途、保留时间和删除方式;敏感/未成年人/成人图像硬拦截。

合规风险

人脸/人物搜索高风险。产品文案应定位为图片来源/相似图片检查,不应暗示身份识别、真人定位或跟踪能力。

静态 Stop Point

当前静态证据不能证明真实运行路径。必须用真机/MITM/Frida/账号/购买沙盒补证。

动态补证计划

  1. 真机新装录屏:选图、裁剪、搜索、结果、打开结果,记录权限、同意、paywall 和广告。
  2. MITM/HAR:抓 photosherlock.com/api/search-imageshould-load-rewarded、上传 URL、Remote Config fetch;保存 redacted manifest。
  3. Frida:hook SearchService::searchImageHTTPRequest::urlMethodChannelManager.uploadedImageUrlReceivedshowRewardedAdbuyPro
  4. 购买沙盒:验证 ps.pro.subdisableAds、restore、manage subscription 和直链权益。
  5. 负样本:成人、儿童、非人像、无结果图,确认审核提示来自本地还是服务端。