如何限制應用程序申請不必要許可權?

雖然android有很完整的許可權控制系統,但是在中國這種環境下難以實現,如騰訊微信,新浪微博,網易新聞客戶端等,都在安裝的時候申請大量的不必要的許可權,甚至是根本與應用無關的許可權,比如微信,讀取sd卡信息,系統日誌信息,通信錄信息,通話信息,簡訊信息等都要求,雖然說和程序有一定聯繫,如通信錄好友導入等,但是許可權也未免過大,如一些人或許根本就不想上傳通信錄信息或者系統日誌信息,而且對於微信來說,也 並不是沒有這些許可權就完全不能運行,最多就是相應模塊許可權不足,但是如果你不用相應模塊的話不影響使用,網易新聞客戶端就更詭異了,這個程序我如何也想不出他哪個地方需要我的簡訊許可權和通信錄信息,但是你不給這個許可權他還不給你安裝,這也太流氓了吧。
綜上述,1.我想問問現在有沒有一個程序可以限制其他程序的許可權呢?
2.大家覺得谷歌是不是應該有所行動,形成一些標準,限制程序申請過多的不必要的許可權,否則android的許可權限制系統就會想windows的uac一樣成為一個廢物,因為隨便一個程序一上來就要求系統管理員或者root許可權那如何是好
補充:
其實說這麼多,我想把討論焦點放在是否可以通過制定一些標準形成約束來限制開發者申請過多許可權(說白了,申請那麼多許可權是做什麼大家想必也明白),比如,現在蘋果的程序是否也存在這種問題,如果不存在那麼蘋果是如何解決這種問題的(我想蘋果不可能要求所有程序對他開源吧),其他平台時候有類似解決方案,或者大家時候有什麼想法?@周海龍說的通過apk來限制或許是一種手段,但是如果程序實在流氓上來就檢查許可權,沒有許可權就直接退出怎麼辦?所以我個人覺得最好的解決方案應該是出一個標準,所以想看看大家有些什麼想法


2913-9-27更新:

按照這裡的說法,App Ops的Activity已經在AOSP代碼庫8月份的一次Commit里被注釋掉了,也就是說在可見的未來里,App Ops應該不會出現。很有可能三星/HTC的4.3更新中,App Ops已經消失了:

The CommonsBlog

已經在使用AppOps的要考慮下一次更新以前恢復所有的AppOps設定,否則可能再也沒有調整設置的地方(但清除應用程序默認值可能依然有效)。
所以XPrivacy依然是最靠譜的方法。
-----------------------
如果說到標準,我猜測Android 4.4 Android Kitkat將會正式提供App Ops作為Android系統的隱私管理的準繩。這是唯一不需要Root的方法。

App Ops在Android 4.3隱式地推出,如果要使用,需要一個工具來發送相應的Intent來進入它:
App Ops Starter

App Ops類似於iOS6~7的隱私保護,因為Android比iOS更自由些,App Ops的管轄範圍稍大,包括:

  1. 位置
  2. 讀/寫聯繫人*
  3. 讀/寫通話記錄*
  4. 收/發簡訊*
  5. 撥打電話
  6. 發送通知(已經在4.1實現)
  7. 在(包括其它應用程序的Activity之上的)頂層繪製
  8. 修改系統設置(指開啟藍牙,GPS,Wlan等項目,具體包括哪些API不清楚)
  9. 震動
  10. 拍照(使用攝像頭)*
  11. 錄音*
  12. 讀/寫剪貼板*
  13. 讀/寫日曆*

*其中的讀/寫,收/發可分開控制,禁用錄音無效,禁用攝像頭也不完整:
The CommonsBlog

或者也可利用第三方啟動器的自定義快捷方式來進入
當然,極客點的也可以用shell運行pm的方式

然而,

M66B/XPrivacy 路 GitHub

它是你目前能找到最好的小夥伴
我以為它最重要的作用在於阻止用戶追蹤SDK獲取能唯一識別設備的標識符(IMEI,Android ID,MAC等),畢竟用它的目的就是當鐵公雞,讓應用程序獲取不了任何非必要的信息。

它可以搞定以下近一百個項目

  • Accounts
    • return an empty account list
    • return fake account info
    • return empty authorization tokens
  • Browser
    • return an empty bookmark list
    • return empty search history
  • Calendar
    • return an empty calendar
  • Calling
    • prevent calls from being placed
    • prevent SMS messages from being sent
    • prevent MMS messages from being sent
    • prevent data messages from being sent
  • Clipboard
    • prevent paste from clipboard (both manual and from an application)
  • Contacts
    • return an empty contact list
      • content://com.android.contacts/data
      • content://com.android.contacts/raw_contacts
      • content://com.android.contacts/phone_lookup
      • content://com.android.contacts/profile
  • Dictionary
    • return an empty user dictionary
  • E-mail
    • return an empty list of accounts, e-mails, etc (provider)
  • Identification
    • return a fake Android ID
    • return a fake device serial number
    • return a fake host name
    • return a fake Google services framework ID
    • return file not found for folder /proc
  • Internet
    • revoke access to the internet
    • return fake disconnected state
    • return fake supplicant disconnected state
  • Location
    • return a random or set location
    • return empty cell location
    • return an empty list of (neighboring) cell info
    • prevents geofences from being set
    • prevents proximity alerts from being set
    • prevents sending NMEA data to an application
    • prevent phone state from being sent to an application
      • Cell info changed
      • Cell location changed
    • prevent sending extra commands (aGPS data)
    • return an empty list of Wi-Fi scan results
    • prevents connecting to Google Play services
  • Media
    • prevent recording audio (including from the microphone)
    • prevent taking pictures
    • prevent recording video
    • you will be notified if an application tries to perform any of these actions
  • Messages
    • return an empty SMS/MMS message list
    • return an empty list of SMS messages stored on the SIM (ICC SMS)
    • return an empty list of voicemail messages
  • Network
    • return fake IP"s
    • return fake MAC"s (network, Wi-Fi, bluetooth)
    • return fake BSSID/SSID
    • return an empty list of Wi-Fi scan results
    • return an empty list of configured Wi-Fi networks
    • return an empty list of bluetooth adapters/devices
  • NFC
    • prevent receiving NFC adapter state changes
    • prevent receiving NDEF discovered
    • prevent receiving TAG discovered
    • prevent receiving TECH discovered
  • Notifications
    • prevent receiving statusbar notifications (Android 4.3+)
    • prevent C2DM messages
  • Phone:
    • return a fake own/in/outgoing/voicemail number
    • return a fake subscriber ID (IMSI for a GSM phone)
    • return a fake phone device ID (IMEI): 000000000000000
    • return a fake phone type: GSM (matching IMEI)
    • return a fake network type: unknown
    • return a empty ISIM/ISIM domain
    • return a empty IMPI/IMPU
    • return a fake MSISDN
    • return fake mobile network info
      • Country: XX
      • Operator: 00101 (test network)
      • Operator name: fake
    • return fake SIM info
      • Country: XX
      • Operator: 00101
      • Operator name: fake
      • Serial number (ICCID): fake
    • return empty APN list
    • return no currently used APN
    • return an empty call log
    • prevent phone state from being sent to an application
      • Call forwarding indication
      • Call state changed (ringing, off-hook)
      • Mobile data connection state change / being used
      • Message waiting indication
      • Service state changed (service/no service)
      • Signal level changed
    • return an empty group identifier level 1
  • Shell
    • Linux shell
    • Superuser shell
    • Load/library (by default not restricted)
  • Storage
    • revoke permission to the media storage
    • revoke permission to the external storage (SD card)
    • return fake unmounted state
  • System
    • return an empty list of installed applications
    • return an empty list of recent tasks
    • return an empty list of running processes
    • return an empty list of running services
    • return an empty list of running tasks
    • return an empty list of widgets
    • return an empty list of applications (provider)
    • prevent package add, replace, restart and remove notifications
  • View
    • prevent links from opening in the browser
      • you will be notified if an application tries to open a link
    • return fake browser user agent string
      • Mozilla/5.0 (Linux; U; Android; en-us) AppleWebKit/999+ (KHTML, like Gecko) Safari/999.9

--------------------
如果沒有Android 4.3,如果又沒有Xprivacy
那麼,其實最早是LBE搞出了能在Android上管許可權的工具(它以root許可權向所有的應用程序進程里插入一個.so庫,以行使類似於Xprivacy的劫持,形式上的區別在於,Xprivacy的中介是Xposed改過的app_process binary)

後來騰訊,奇虎,聯想啊,百度啊都上馬了相同原理的工具,不過到目前為止,敏感數據的保護均不是(不再是)它們的主打功能。

其中我比較喜歡
金山手機毒霸

它只有五個功能,相比而言是最不萬金油的:

  • 管許可權
  • 殺毒
  • 斷廣告SDK活路
  • 像綠色守護那樣對應用程序自啟動出手(最好的 Android 省電軟體是什麼?)
  • 簡訊/通話攔截

以毒攻毒。我是這麼解決的:

1. 新手機由於一般什麼程序都沒有,就先安裝一個「騰訊手機管家」。利用騰訊手機管家安裝「百度一鍵Root」獲取Root權。然後好戲開始了.....

2. 騰訊手機管家會查出百度ROOT使用了非法許可權。(ROOT要簡訊許可權幹嗎?百思不得姐)利用騰訊幹掉百度的許可權。

3. 然後打開百度一鍵ROOT,欣喜地發現百度建議:

照建議禁止騰訊手機管家開機啟動。

4. 大結局: 整個世界安靜了,蒼蠅的脖子被自己的大腸勒死了。


Android 4.3以後內置一個隱藏的AppOps可以實現此功能


CM有增加設置讓用戶可以選擇授權部分許可權給應用程序。
但是這個功能幾乎不可能加入到發布版中去。
沒錯,流氓程序太多了,你只有選擇裝或者不裝。
這個就是Android Market和Apple的APP store運營策略上的區別了。


控制許可權當然首推Xposed框架中的XPrivacy(http://www.xprivacy.eu).

根據我自己歸納,控制許可權的方式大致分為以下幾種:

1. 第三方應用。也就是LBE、360這一類XX手機助手,它們的使用門檻最低,但是缺點在於提供的選項比較單一、效率較低在舊機子上明顯卡頓、而且這些軟體發行者本身的可信任程度值得商榷。

2. 強行吊銷應用許可權。包括修改apk文件和CM系統自帶的許可權管理。效率最高,但是有些應用不吃這套,修改後直接閃退,估計是在啟動時會先檢查許可權的完整性(鄙視之)。

3. 也就是這裡推薦的 XPrivacy. 基於Xposed框架,直接從虛擬機層面進行操作,具體的原理我不太清楚,但可以肯定效率高於第一類應用。更大的好處在於極為豐富具體的選項,精確控制每一項許可權,還可以用偽造數據等方法確保應用穩定運行。最重要的是完全開源,安全性更高。但有一定的使用門檻,建議至少對Android有基本的了解再使用。


Xposed Framework + XPrivacy

不過很多許可權,像讀取日誌什麼的有時候是應用內數據統計等 SDK 要求的,不一定是騰訊故意就要收集你的數據。怪就怪 Google Play 大陸沒法用吧。


發現最簡單的辦法還是刷MIUI


我來說下吧,這個許可權其實我接觸過不少,就說安卓的,別人怎麼用我不管,但每個應用的許可權我覺得必須是自己決定給還是不給,什麼時候給什麼時候不能給,其中決定什麼時候給什麼時候不能給更為重要,做的比較好的就是miuiv5的4.7.11版本和之前版本了,之後的版本簡配了讓用戶決定什麼時候給什麼時候不給的權利了,當然如果用別的系統的建議安裝lbs去管理。然後說說怎麼設置app許可權,一般情況下除非是地圖應用我是絕對不給位置方面許可權的,通話和簡訊許可權基本不會給,imei許可權都不給,其他許可權根據app情況來給,這裡不是想強調我是如何分配許可權的,是想強調一個問題,安卓是可以設置也是必須要親自設置每個app許可權的,如果你不想或者不會設置,覺得這樣麻煩,那建議你選默認給你設置好的蘋果手機吧,安卓不適合你,也請不要到處說安卓不保護隱私而蘋果這方面多麼多麼好。假如你設置了所有app都無法獲取imei,按照現在各個app尿性看,過幾天你去看許可權監控列表中,軟體訪問IMEI被拒絕的次數越多,說明你平時越依賴哪個軟體。在說說為什麼要決定什麼時候給和什麼時候不給許可權,這個這和周圍人探討過,都是一片罵我多事的聲音。這個啥意思呢我舉個栗子,假如軟體A比方說QQ吧(只是比方說),QQ有拍照的許可權對吧,而且你也確實要用QQ拍照給朋友發小視屏啊照片啊的,但是你又怎麼確定不會在你不知情情況下QQ偷偷的拍照上傳呢(此時QQ有拍照許可權完全可以這麼干),也許QQ大廠商干不出來,那別的app呢?所以這時候我們需要許可權設置中除了允許和拒絕外,還必須有個詢問,也就是QQ每次拍照系統會彈出詢問由用戶決定是否允許,若干秒不選擇後拒絕掉這次請求,同時請不要無恥的默認把以後都允許給勾選上,如果用戶想以後都允許,他自己許可權設置那塊直接設置成允許就行了何必設置成詢問呢?這就是為什麼我只用miui5的4.7.11版本,因為一升級就給默認勾選了。至於miui67版本的許可權這塊,不僅簡配了很多如限制IMEI被讀取的選項,這個設置成"詢問"也居然給簡配沒了,對你沒有看錯,我希望他在設置成詢問時候不要默認勾選了"以後都按此設置",結果這倒好,直接改成了只能詢問一遍,然後就必須選擇好是允許還是拒絕了,你TM這是學蘋果呢吧,反正據我所知蘋果就沒有詢問這個選項。蘋果說白了選擇權不在你手裡,人家怎麼設置你就信則靈就行。最後要說的是,知乎的安卓版app是我見過的為數不多的要許可權少的app,它甚至都沒問我要IMEI許可權,在當今這個流氓app一大堆的時代不要IMEI都搞得我有點不好意思了。


手機用的程序都自己親自修改許可權,反編譯,去掉敏感的,測試穩定不,影響使用不,能用就用,不能就不用這個程序了.目前只有百度輸入法比較牛B去掉上網功能了,他還能檢測上網升級。不知道原理。反編譯還不行,被保護了。用慣了,只好這樣湊合用了,每天都有提示升級,可惜它升不了,哈哈,沒給這個上網的許可權


您關注的這個問題也是正式我當前關注的問題,從公司角度來講,得到大量的用戶信息可以掌握用戶的信息使用狀態,從這些數據中,可以開發新的適應於客戶的應用為公司盈利,反過來講,從客戶的角度,這種行為已經侵犯了用戶的權益,但這些應用安裝的時候卻申請使用這些權利,如果你安裝就默認同意了行為,那麼公司也不會受法律的追究,那麼如何限制應用程序申請不必要的許可權? 我當前只想到一個方法,就是再開發一款應用來監控所有的APK程序,限制他們的請求。


我從來不給單機遊戲聯網的許可權,無論是數據上網還是wifi,避免了很多通知欄廣告,也從來不給非必要軟體讀取通訊錄跟簡訊的許可權.
MIUI在這方面做的很好,很早之前就開始宣傳許可權控制的重要性,自帶的許可權控制也做的很不錯,這一點是走在其他國產廠商的前面的,建議使用LBE安全大師,MIUI的許可權管理也是LBE提供技術支持的,

非廣告


如果存在幾個同樣的產品,我肯定會裝許可權要的少的
百度輸入法很惡,一個破輸入法要你簡訊 電話許可權,甚至還要定位。。。。


許可權修改器就OK,不需要root,安裝包處入手處限制去除許可權。已安裝的程序也可以修改,不過,需重裝。
( 個別軟體做了許可權校驗功能,修改後會無法使用)


兩個版本(貌似不是一個作者……)
版本一
英文許可權版,1.6以上系統都可支持
本身僅一個許可權 : 寫入SD卡許可權

原理:安裝包處限制許可權版本二
許可權內容被譯為中文,支持2.3以上系統
本身三個許可權 : 寫入SD卡、查看網路、完全網路網路許可權

原理:安裝包處去除許可權


很多都可以吧、、、LBE可以設置,所有安裝程序都能設置許可權限制,還能設置許可權監控,好用


我用的是360的安全衛士,貌似是可以設置其它app的許可權


LBE表示毫無壓力


裝個許可權管理的APP就可以了,這方面的APP蠻多的。


LBE好像可以設置?


我還記得年頭我用手機翻牆,用了代理偽裝美國ip,使用了美國這個地區的googleplay,裡面的內容大概的用了一些,質量是國內軟體市場包括中國地區的googleplay完全不能比的,無論是軟體質量可用性數量差了十萬八千里。國內googleplay裡面的軟體和美國的最大差別在於兩點,質量和要求許可權。這或許就是重視知識產權的地方優勢,有無數的創意和動力,不像國內出來一個苗頭好的私人或者小公司的軟體,不用幾天各大公司掙相模仿,臉都不帶紅的,然後各種開發商只好從偷盜隱私彈廣告掙錢。關於許可權方面,蘋果顯然做的比較好,為什麼不讓你裝輸入法,就是因為輸入法就有鍵盤記憶和各種內容無可避免的許可權要求,還有很早以前導航之類的軟體,要你在設置里同意它們確定你的位置才能進行導航,別想著導航軟體會讀你的信息什麼的,蘋果是不會允許這類軟體上架的,開發者有嚴格的框架限制,而且開發賬號要錢買的,又有人工審核。做個形象的比喻就是蘋果的app市場就是山姆,麥德龍。而安卓的市場就是小縣城的菜市場,魚龍混蛇,手機打字太累了


你聽說過LBE嗎


推薦閱讀:

Android M 的 Doze 模式下第三方推送服務還能用嗎?
用axure可以製作出符合Material Design的APP高保真原型嗎?
有沒有拍照濾鏡的第三方SDK?
如何評價《第一行代碼》一書?
知乎網頁登錄背景的動畫是怎麼做出來的?

TAG:Android應用 | Android開發 | Android |