Writing
HSBBrowserAppStore-tvOS-review-public(中文版)
tvOS,App Store,Review,WebKit · 2026-01-14 · Updated 2026-04-26
tvOS 審查改進建議:一個含 WebKit 依賴的 App 靜態檢驗示例
日期:2026-01-14
前言與目的
這篇文章的目的,是分享一個中立、可重現的靜態檢驗流程,展示我們如何在不解密、不動態注入、不嘗試繞過審核機制的情況下,對一個 tvOS App 進行「是否涉及非公開 API」的檢查。
目標不是指控或貼標,而是鼓勵平台持續改善審查一致性:讓相同標準可以穩定落地,避免「有些 App 被拒、有些 App 卻能上架」的不公平感。
檢驗範圍與原則
- 範圍:只做靜態檢查(binary 依賴、metadata),不嘗試解密、不做逆向繞過。
- 原則:所有結論只建立在可復現的事實與明確的限制說明上。
方法總覽(非侵入式)
以下流程可在本地完成,且不需要破解或動態分析:
1) 檢查 App 結構與主程式架構
2) 讀取 Info.plist 了解平台與版本資訊
3) 檢查 App Store 加密資訊(避免超出合理推論)
4) 列出動態連結框架(關鍵)
5) 檢查 tvOS SDK 公開框架清單
6) 掃描 Obj‑C 類別名稱(僅做高層觀察)
7) 清楚聲明限制與無法確認之處
主要觀察發現(精簡版)
1) App 與其內部 framework 連結到 WebKit.framework
- 主程式與內部
HSBBrowser.framework皆動態連結/System/Library/Frameworks/WebKit.framework/WebKit。
2) tvOS SDK 中沒有公開的 WebKit.framework
- 在 AppleTVOS SDK 的
/System/Library/Frameworks/中,找不到 WebKit.framework。
3) App 為 App Store 加密版本(FairPlay)
cryptid 1表示二進位已加密;因此無法可靠抽取方法 selector 或細節。
4) 僅能做到「框架層級」的證據
- 我們能確定的是「有無連結 WebKit.framework」,而不是「實際呼叫了哪些類或 API」。
- 換言之:可疑性成立,但具體 API 細節不可確認。
為什麼這對審查重要?
在 tvOS 上,WebKit 相關 API 並未公開。若 App 仍能在二進位中直接連結 WebKit.framework,這代表:
- 靜態審查機制可能未完整覆蓋「二進位層級」的 framework 依賴
- 或在特定條件下,審查一致性存在落差(人為/工具/流程)
這不等於 App 一定有惡意,但足以觸發更嚴格審查。這正是建議改善的重點。
建議的審查強化方向(不涉及繞過)
這裡是「防守端」的檢測建議:
- 新增二進位依賴白名單檢查
- 對 tvOS App 檢查
LC_LOAD_DYLIB中是否出現 WebKit.framework 等非公開框架。
- 對 tvOS App 檢查
- 對內嵌 Frameworks 做一致性檢查
- 不只檢查主程式,內部 framework 也應做相同依賴掃描。
- 強化 App Store 加密版本的靜態檢測
- 即便方法 selector 被加密,framework 依賴仍可見。
- 建立平台差異清單
- 建議維護「tvOS 公開 SDK 允許框架清單」,自動比對。
- 必要時進行人工複核
- 對於觸發非公開框架的 App,進入人工審查流程。
為什麼這會傷害守規矩的開發者?
這不只是技術細節,而是規則一致性的問題:
- 有人因為誤用或觸及非公開 API 而被拒。
- 有人卻可能因為「把相同依賴藏在 framework 裡」而通過。
這會導致:
- 規則不可預期:開發者無法判斷什麼會被接受。
- 策略扭曲:人們被迫用灰色技巧而非正當設計。
- 生態不公平:守規矩的團隊承擔更多成本與風險。
因此,強化一致性的審查流程,實際上是在保護願意遵循規範的開發者與整體平台信任度。
限制說明(重要)
- 本分析不包含對 App 進行解密或任何繞過審核的做法。
- 無法從加密版本確認具體方法或類別 API 的使用情況。
- 結論不等於證明 App 有惡意或違規,只能說「存在足以警示的跡象」。
附錄:完整可重現命令
這些命令僅用於靜態檢查,不涉及繞過或解密。
# 1) 基本結構與主程式
ls
rg --files
file Payload/HSBBrowserAppStore.app/HSBBrowserAppStore
# 2) Info.plist
plutil -p Payload/HSBBrowserAppStore.app/Info.plist
# 3) 加密檢查
otool -l Payload/HSBBrowserAppStore.app/HSBBrowserAppStore | rg -n "LC_ENCRYPTION_INFO|cryptid"
# 4) 依賴檢查(主程式)
otool -L Payload/HSBBrowserAppStore.app/HSBBrowserAppStore | rg -n "WebKit.framework"
# 5) 依賴檢查(內部 framework)
otool -L Payload/HSBBrowserAppStore.app/Frameworks/HSBBrowser.framework/HSBBrowser | rg -n "WebKit.framework"
# 6) tvOS SDK 公開框架清單檢查
xcrun --sdk appletvos --show-sdk-path
ls $(xcrun --sdk appletvos --show-sdk-path)/System/Library/Frameworks | rg -n "WebKit"
# 7) Obj‑C 類別掃描(僅高層)
nm -gU Payload/HSBBrowserAppStore.app/Frameworks/HSBBrowser.framework/HSBBrowser | rg -n "WebViewController|WebViewJSManager"如果你是平台方或審查系統維運者,希望這份流程能作為「最小成本、可復現」的稽核參考。若有需要,也樂意補充更正式的測試報告格式。