廣播攔截策略
1.流程圖
廣播發送
├─ 特權進程(Root/Shell) → 放行
├─ 系統進程(UID≤1000) → 自動啟動校驗 → 非法廣播? → 攔截
│ ? ├─ 黑名單匹配 → 攔截
│ ? └─ 用戶/白名單校驗 → 受限用戶? → 攔截
│ ? ? ? ├─ 小部件/智能白名單 → 放行
│ ? ? ? └─ 普通應用 → 分類限制檢查 → 命中? → 攔截
├─ 動態白名單鏈 → 匹配任一? → 放行
└─ 特殊廣播處理 → 黑名單/分類限制 → 攔截
2.攔截策略
攔截類型 | 觸發條件/判斷邏輯 | 處理結果 |
超級省電模式攔截 | 激活且應用不在白名單() | 攔截 |
系統進程校驗 | 系統進程(UID≤1000)觸發: ? 非法廣播(activityInfo==null) ? 黑名單匹配() | 攔截 |
多用戶限制 | 非主用戶/訪客用戶中: ? 受限用戶(isRestrictUser) ? 特定應用(拼多多/支付寶等,) | 攔截 |
白名單豁免 | 滿足任一條件: ? 系統應用/小部件() ? 智能白名單() ? Action白名單() | 放行 |
分類限制檢查 | 非四大組件類型(!isCpnType)且非Top應用(!isTopPkg),匹配全局/組件限制列表 | 攔截 |
動態進程狀態檢查 | 同時滿足: ? 非默認允許啟動(!) ? 非活躍進程(!) | 攔截 |
特權進程豁免 | Root/Shell進程(isRootOrShell) | 放行 |
實驗版本特殊處理 | 實驗版本()且非全局黑名單 | 放行 |
Provider攔截
1.流程圖
2.攔截策略
攔截類型 | 觸發條件/判斷邏輯 | 處理結果 | 設計目的 |
系統進程豁免 | 調用方進程UID≤10000 | 放行 | 保障系統核心功能穩定性 |
全局黑名單攔截 | 應用在全局禁止列表 | 攔截 | 防止惡意應用濫用Provider25 |
組件黑名單攔截 | 滿足以下任一條件: ? 調用方為null且Provider在黑名單 ? 調用方進程名不包含Provider包名且Provider在黑名單 | 攔截 | 限制未授權訪問或跨應用濫用 |
超級省電模式攔截 | 超級省電模式激活且未通過rSPS校驗 | 攔截 | 極端場景下限制非核心應用資源占用 |
分類限制攔截 | 匹配全局/組件分類限制規則(如非四大組件類型) | 攔截 | 防止非必要后臺數據共享56 |
動態狀態放行 | 滿足以下任一條件: ? 默認白名單() ? 活躍進程() | 放行 | 優化內存和性能 |
多維度白名單放行 | 滿足以下任一條件: ? 保護白名單() ? 關聯白名單() ? Provider組件白名單() ? 調用方在白名單() | 放行 | 保障授權應用或組件正常運作 |
Activity攔截
1.流程圖
2.攔截策略
檢查類型 | 處理結果 | 關聯方法/配置 | 設計目的 |
無效Intent檢查 | 攔截 | handleWhiteListCheck參數校驗 | 防止無效或惡意Intent |
調用方白名單 | 放行 | 預置調用方包名白名單 | 授權應用豁免攔截 |
目標包名白名單 | 放行 | 預置目標包名白名單 | 保護核心應用組件 |
目標組件白名單 | 放行 | 預置Activity類名白名單6 | 精確控制組件級訪問 |
自調用白名單 | 放行 | 同應用內調用校驗3 | 允許應用內部安全跳轉 |
關聯白名單 | 放行 | 跨應用關聯授權(如合作應用)6 | 支持生態內協作 |
全局黑名單 | 攔截 | 全局禁用應用列表16 | 封禁高風險或違規應用 |
推送黑名單 | 攔截 | 禁止非關聯應用彈窗3 | 防止廣告/騷擾推送 |
關聯黑名單 | 攔截 | 預置危險調用關系6 | 阻斷惡意應用協作 |
鎖屏黑名單 | 攔截 | 鎖屏禁用組件列表3 | 保障鎖屏安全性與功耗 |
超級省電模式 | 攔截 | InSuperPowerSavingMode()1 | 極端場景下限制非核心功能 |
分類限制 | 攔截 | 按組件類型(如后臺Activity)過濾3 |
Service攔截
1.流程圖
graph TD
A[調用shouldPreventStartService] --> B{type=""?}
B -- Yes --> C{UID≤10000?}
C -- Yes --> Z[放行]
C -- No --> D{組件黑名單且非自調用?}
D -- Yes --> Y[攔截]
D -- No --> E{Action黑名單且非自調用?}
E -- Yes --> Y
E -- No --> F{BlackguardList命中?}
F -- Yes --> Y
F -- No --> Z
B -- No --> G{參數無效?}
G -- Yes --> Z
G -- No --> H{全局黑名單?}
H -- Yes --> Y
H -- No --> I{分類限制?}
I -- Yes --> Y
I -- No --> J{startService?}
J -- Yes --> K{目標進程未啟動且不允許跨進程?}
K -- Yes --> Y
K -- No --> Z
J -- No --> L{bindService?}
L -- Yes --> M{系統應用?}
M -- No --> N{命中非系統白名單?}
N -- Yes --> Z
N -- No --> Y
M -- Yes --> O{通知/Job/Sync白名單?}
O -- Yes --> Z
O -- No --> P{GCM服務且非體驗版?}
P -- Yes --> Q{自啟動/LRU白名單?}
Q -- Yes --> Z
Q -- No --> Y
P -- No --> Y
2.攔截策略
攔截場景 | 觸發條件 | 放行條件 | 優先級 |
系統進程豁免 | 調用方UID ≤ 10000 | 直接放行 | 最高 |
組件黑名單 | 組件類名在黑名單 && 非自調用(!callerApp.processName.contains(pkgName)) | 自調用或非黑名單組件 | 高 |
Action黑名單 | Action在黑名單 && 非自調用 | Action為空或非黑名單 | 高 |
BlackguardList攔截 | Action在特殊黑名單 | 無豁免條件 | 高 |
全局應用黑名單 | 包名在全局黑名單 | 體驗版且非核心黑名單(isExpVersion && !isExGlobalBlackList) | 中 |
分類限制攔截 | 應用分類受限(如后臺服務) | 默認放行標記/白名單/LRU進程 | 中 |
跨進程啟動攔截 | startService&& 目標進程未啟動 | 允許跨進程啟動(isAllowStartFromStartService返回true) | 低 |
非系統應用綁定攔截 | bindService&& 非系統應用調用 | Root/Shell進程或命中任意白名單(包名+Action/組件/Job/Sync) | 中 |
系統應用綁定攔截 | bindService&& 系統應用調用 | 通知服務/Job/Sync白名單豁免 | 中 |
GCM綁定攔截 | GCM服務 && 非體驗版 | 自啟動白名單/默認放行/LRU進程 | 低 |
RemovePendingJob?
1.流程圖
2.攔截策略
檢查條件 | 命中結果 | 邏輯說明 | 優先級 |
包名為空或無法獲取應用信息 | 移除 | 參數無效防御性處理 | 最高 |
應用分類限制檢查命中(如后臺限制模式) | 移除 | 通過檢測后臺/電池優化等場景 | 高 |
默認放行標記(isDefaultAllowStart) | 放行 | 系統標記為關鍵應用(如系統服務) | 中 |
自啟動白名單(isInAutoBootWhiteList) | 放行 | 用戶手動配置或廠商預裝應用 | 中 |
LRU近期使用進程(isInLruProcessesLocked) | 放行 | 關聯AMS的最近使用進程列表,提升用戶體驗 | 低 |
bringUpServiceLocked攔截
1.流程圖
2.攔截策略
檢查條件 | 結果 | 邏輯行為 |
全局開關關閉(mSwitch=false)或包名為空 | 放行 | 直接返回false,允許繼續執行啟動流程 |
非標準啟動類型(非REGULAR_PROCESS_STARTUP)且包名受限制 | 攔截 | 若包名不在白名單(),返回true阻止啟動 |
系統限制后臺啟動(())且包名在限制列表() | 攔截 | 更新限制計數()并返回true |
包名在LRU近期使用進程列表() | 放行 | 即使命中限制列表,LRU機制仍放行 |
StartInstrumentation攔截
1.流程圖
2.攔截策略
檢查條件 | 結果 | 邏輯行為 |
基礎參數無效(組件名/應用信息/包名為空) | 放行 | 直接返回false,允許StartInstrumentation執行 |
實驗版本或白名單應用 | 放行 | 跳過所有限制檢查 |
Oneway Binder調用(callingPid=0) | 攔截 | 全局開關開啟或包名在黑名單時攔截 |
Root/Shell進程 | 放行 | 系統級調用不限制 |
LRU進程 | 放行 | 用戶近期使用的應用豁免限制 |
關聯調用黑名單命中 | 攔截 | 記錄攔截事件并更新統計 |
StartInstrumentation攔截
1.流程圖
2.攔截策略
檢查條件 | 攔截邏輯 |
應用進程清理后觸發重啟 | 若在息屏黑名單中則攔截自啟動 |
屏幕喚醒鎖釋放時檢查 | 白名單應用放行,Persist限制應用攔截 |
Alarm定時任務觸發時 | 息屏狀態且命中黑名單則忽略Alarm |
判定標準 | 行為 |
---------------------------------- | ----------------------------------------------------------------------------- |
包名在熄屏黑名單列表 | 攔截(返回true) |
包名在系統白名單(如系統核心應用) | 放行(返回false) |
包名在Persist限制列表 | 攔截(返回true) |