簡體   English   中英

控制第三方API對Android系統資源的訪問?

[英]Control access of third party APIs to Android system resources?

在您的Android項目中導入第三方API(數據包依賴注入,生成的庫,源代碼等)時,您會假定它們的行為與廣告中所宣傳的一樣。 大多數時候,代碼不是開源的,它們被混淆或只是被編譯。

有沒有辦法控制此API對重要系統資源(例如網絡,聯系人,視頻和音頻,位置)的訪問?

最好的方法是為它們提供系統資源的proxy 這將具有以下好處:

  • 可以通過在代理中提供模擬數據來執行測試
  • 如果不需要,您的應用程序將不必提供API所需的所有權限,並且代理可以通過模擬授予的權限來允許API不會由於權限而中斷
  • 過濾可能在本地收集的有關用戶的數據,並將其發送到API主存儲庫,用於廣告或惡意意圖

由於用戶定義的活動和服務無法控制第三方API的服務,甚至無法阻止它們直接調用任何Android公共接口,因此我無法找到解決方案的實現方式。

該解決方案不需要root用戶訪問權限,因為您不想讓此控件超出您自己的應用程序的范圍。

這個問題的內容與解決這個廣泛問題的特殊性的幾個問題相關聯( 內容提供商的日志數據網絡請求 -使我在研究答案時考慮這個問題)

注意 :簡短的答案是“否”,但一個人可能足夠有創意(也許進行本機級黑客攻擊可能會解決此問題-idk)

在名為com.myproxies的包中(例如MediaRecorder,SensorManager,Camera,java.net.HTTPURLConnection)為要保護的所需Android資源構建代理類。在代理中,您需要實現該類的所有公共方法在嘲笑,您需要實施邏輯以允許訪問(轉發到適當的方法)或拒絕。 一個有用的步驟是檢查方法調用者

  • 如果您打算導入源代碼,請重構代碼以將包更改為代理(Proguard可以提供幫助)。

  • 如果您使用的是庫,請獲取Jar Jar Links ,該實用程序可以輕松地重新打包Java庫並將其嵌入到您自己的發行版中,並將內部包名稱更改為包中用作代理的類的名稱。 。

  • 如果您使用的是Maven或Gradle軟件包依賴項注入,則還可以嘗試導入Jar Jar Links並在編譯時執行軟件包重構(不是很確定可以做到)。

不幸的是,按照我的經驗,很容易破壞API,並且涉及大量的體力勞動。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM