如何正確地在Android手機上安裝國產軟體?
國產軟體往往會申請與之功能不符的許可權,讀取著用戶手機信息,開機後就駐足系統,這些對於注重隱私的用戶來說都是問題。如何「乾淨」地安裝國產流氓軟體呢?筆者整理了一些思路供大家探討。
國產app的全家桶問題一直被大家詬病,一個應用啟動後就會「喚醒」其「家族」內的其他應用,有時還會通過其他方式確保應用始終在後台運行;與此同時,很多應用還會申請與之功能完全不符的許可權,這些嚴重破壞了Android系統的體驗。
要獲得一個純凈的體驗,我們需要解決的是兩種問題,首先是軟體自啟動、駐足後台、頻繁喚醒;其次是應用對手機信息的讀取。
對應這兩個問題,我們要尋找各種解決方案,而手機本身的環境也是我們需要考慮的因素。筆者將「環境「分為三類:已安裝Xposed框架、已root、未root,三種環境下解決問題的難度也各不相同。
Xposed
Xposed簡單來說是一個框架,它可以不修改APK的情況下改變系統和應用程序的行為,所有的更改都在內存中。
如果你安裝了Xposed,問題就變得簡單了,得益於其強大的可定製性,Xposed中有大量應用軟體能夠滿足你的需求。
綠色守護(Greenify)的Xposed模式可以阻止應用在後台運行並且禁止鏈式喚醒,最近新加入的「處方」模式還可以屏蔽軟體廣播。
Android平台的應用程序分為七個優先順序:前台進程、可見進程、主要服務、次要服務、後台進程、內容供應節點、空進程。
第6級別就是一些動作標記,程序設定了遇到什麼節點時將採取什麼動作,比如:插入耳機線,就是一個「內容供應節點」,收音機程序遇到這個「節點」就會激活並自啟,變成後台進程了。
要想收音機不會因此啟動,有兩個辦法,要麼屏蔽這個節點,使你無論是否插入耳機線,都不產生這個節點的信號,要麼我們凍結收音機程序,讓他感受不到這個節點。一些無良的應用,動不動就自己在後台啟動了,就是這個道理。
綠色守護能將一個程序綠化,就是使其感受不到「指定的」「內容供應節點」,從而當發生這些「節點」時,程序不會自動啟動,除非用戶自己讓它啟動(用戶的點擊程序圖標也是一個「內容供應節點」)。
想要更直接地阻止應用後台運行,也可以使用「阻止運行」和「黑域」。
除了綠色守護,為了保障你的隱私,你還應該安裝Xprivacy,這款軟體可以設置軟體讀取隱私信息的許可權。對於某些「流氓」應用強制用戶開啟許可權的情況,Xprivacy還可以偽造隨機信息從而保障隱私。
原理也是利用Xposed框架能夠修改內存信息的方法修改軟體獲取到的信息。
Root
Android平台本來有類似iOS推送服務APNS的GCM(Google Cloud Messaging),但由於眾所周知的原因,這項服務在國內非常不穩定,於是各大廠商就紛紛推出自己的推送服務。
而利用這些推送服務,往往一個app開啟後就會其他應用都可能關聯啟動,尤其以百度、阿里、騰訊為甚。這也就是前面所說的「全家桶」。
如果你Root了手機,寫輪眼(My Android Tools)可以說是一款神器,它能夠禁用activity、service、receiver、provider,其中的Service就包括軟體用來接收推送的服務。因此,寫輪眼(My Android Tools)可以阻止軟體喚醒。
除此之外由於能夠禁用activity、service,它能做的還不止這些,經過合理配置,寫輪眼能夠幫你屏蔽廣告,優化軟體。
對於那些不常用的軟體,可以使用「凍結」類應用將他們禁用。「冰箱」就是其中的代表。
它的原理非常簡單,adb中提供了一個adb shell pm disable命令,在root許可權下可以直接用來凍結app,而冰箱基本可以理解為使用了adb shell pm disable命令。不過它提供了非常方便的launcher,讓你能夠快速地啟動凍結app。
保護隱私方面,對於已經Root的手機,可以使用AppOps應用控制應用許可權。
很多國產ROM甚至系統原生ROM都有許可權控制,但首先,這些許可權往往不完整;其次,AppOps能將許可權設置為ignore,很多國產軟體會強制用戶開啟部分許可權,設置ignore後,應用會得到數據,但數據為空,從而繞過這些許可權申請。
比如如果我們直接拒絕微信使用電話許可權,就無法正常進入微信,而用AppOps將許可權設為忽略就可以順利進入。
左圖為 通過系統許可權管理拒絕微信讀取設備ID,右圖為 通過AppOps忽略微信讀取設備ID請求
未Root
未Root手機其實本文的重點。筆者自從去年入手了S7 edge後就一直糾結於是否Root。Root後永久無法使用Samsung Pay,更可怕的是還會導致前置攝像頭黑屏、系統卡頓發熱等各種問題。可是又無法忍受各種流氓軟體在手機里搗亂,因此一直在尋找方案。
對於TouchWiz系統,我們可以利用KNOX Standard SDK的機制凍結應用(包括系統應用),常見的利用這一機制的軟體包括「空調狗」、「凍住」,它們都可以做到應用使用後立即凍結,從根源拒絕「關聯啟動」等流氓行為,只可惜這一機制只針對三星系列手機。
隱私方面,可以通過AppOps將部分許可權設置為ignore。實際上AppOps在Android 4.4.2之前是集成在系統中的,4.4.2之後,Google不知處於何種想法將其從系統中移除了,系統自身沒有許可權進行管理。
上文中所使用的AppOps是以root為前提的。如果手機沒有root,只有兩種相對比較麻煩的方法,兩種方法都需要電腦端操作。
一是通過電腦端adb進行設置:
adb shell appops set 包名 許可權名稱 ignore
其中許可權名稱包括:
READ_CONTACTS 讀取聯繫人
POST_NOTIFICATION 通知
CALL_PHONE 撥打電話
READ_SMS 讀取簡訊
WRITE_SMS 寫入簡訊
RECEIVE_SMS 接收簡訊
OP_READ_PHONE_STATE 讀取設備ID(包括IMEI)
FINE_LOCATION 定位許可權
COARSE_LOCATION 定位許可權
VIBRATE 震動
CAMERA 攝像頭
WRITE_CLIPBOARD 寫入剪切板
READ_EXTERNAL_STORAGE 讀取外部存儲空間
WRITE_EXTERNAL_STORAGE寫入外部存儲空間
BOOT_COMPLETED 開機時啟動
GET_ACCOUNTS 獲取設備賬號信息
第二種方法是使用App Ops手機端軟體,在免root模式下,App Ops使用遠程adb進行許可權控制,而遠程adb仍然需要在電腦端開啟:adb tcpip 5555,將埠號5555輸入App Ops即可使用。但需要注意的是,重啟後需要重新開啟遠程adb。
然而,想要完全將流氓軟體隔離開來,我們要用到類似「沙盒」的機制。
好在Android自從5.0以後就加入了Android for Work功能,功能的初衷是為了讓大家在工作時能夠使用自己的私人設備。
通過Android for Work,我們可以建立「個人」和「工作」兩套檔案,工作檔案由企業的IT管理員管理,為了安全起見,在兩套方案中的應用無法互相訪問,應用數據存儲的區域其實也是不一樣的,Island中的/data目錄、內置存儲空間、通話記錄、聯繫人、日曆等數據是與原用戶獨立的。
利用這種思路,我們也可以將這套機制用來對付流氓應用,將應用安裝到工作檔案後,它就無法獲取到個人檔案的應用和數據。
Island就是利用Android for Work將流氓應用隔離在「島」上的應用,這款軟體與綠色守護出自同一作者,通過上述方式來實現類似沙盒的效果。
除了沙盒,Island還自帶了凍結應用的功能。然而,使用了Island中自帶的凍結功能後再次解凍時,該應用的AppOps狀態就會被恢復到初始狀態(也就是允許所有許可權)需要重新設置許可權。
如上文所說,進行AppOps設置的兩種方法都需要用到電腦,因此凍結後再解凍軟體需要重新設置許可權的成本較高。
接下來我們就在沙盒環境內解決喚醒和隱私的問題。
喚醒問題我們可以通過在Island中安裝綠色守護來解決。儘管是在非root環境下,它依然能夠強制關閉程序(原理是通過Android輔助功能模擬點擊「強制停止」程序)。
建議開啟「嗜睡模式」,它能夠部分禁止應用的後台行為,該模式利用的是Android 6.0引入的Doze Mode。
在睡眠狀態下,系統將停止一些軟體運行,例如一些非即時通訊軟體的後台就會在鎖屏的狀態下被Android清理掉。從而達到節省電量、延長續航時間的作用。綠色守護中的「嗜睡模式」會將進入Doze Mode的時間縮短,從而進一步節省電量。
而隱私問題則可以通過在沙盒中安裝App Ops來控制,或者同樣地,可以通過電腦端adb操作,但需要注意的是由於沙盒實際上是在Android中使用了多用戶,因此需要在參數中指定用戶:
adb shell pm list usersadb shell appops get com.eg.android.AlipayGphone --user XX
除了上述方案,筆者最近還發現了一款名叫「容器」的應用。
與Island的思路完全不同,該應用利用的是VirtualApp和文件夾重定向。VirtualApp會在你的App內創建一個虛擬空間,你可以在虛擬空間內任意的安裝、啟動和卸載APK,這一切都與外部隔離,如同一個沙盒。
目前「容器」尚在開發中,但按照作者的說法,今後會加入隱私、許可權的控制和應對流氓行為的功能。
總結
要想解決流氓app的喚醒和隱私讀取問題,Xposed平台和Root後的手機上有各種簡單的方案,包括Greenify與XPrivacy,而非root環境下則相對困難,我們可以使用Island創造Android for Work環境,我們可以把這環境看作沙盒,將應用安裝在沙盒內,應用的啟動問題則通過Android 6.0後引入的Doze Mode來解決。
想這麼多方法來安裝國產App,一方面是為了設備保持流暢的狀態,不至於被各種喚醒的應用長期佔據內存和耗電,另外也考慮到隱私問題。折騰安裝國產應用,實際上是無奈之舉,也希望國內的Android生態能夠良性發展。
*本文作者:JohnChu,轉載請註明來自FreeBuf(FreeBuf.COM)

※低成本玩轉硬體安全(一) | BadUSB on Arduino
※淺談拒絕服務攻擊的原理與防禦(3)| 反射DDOS攻擊利用代碼
※下一個獵殺目標 | 近期大量MySQL資料庫遭勒索攻擊
※scapy在wlan中的應用
※卡巴斯基頂級安全專家叛國罪後續 | 7年前的案子,為何現在才提起?
TAG:FreeBuf |
※不裝軟體能在 Windows 電腦顯示 Android 手機屏幕嗎?
※WireX Botnet惡意軟體 攻擊安卓手機
※Android 史上最複雜的惡意軟體,就算手機沒 Root 也會幫你 Root
※Google將推出Android安全認證 將預裝官方殺毒軟體
※如何用手機軟體Snapseed調出復古范兒?
※GooglePlay正在與Android廣告軟體進行艱苦鬥爭
※Android廣告軟體的新趨勢:濫用Android插件框架
※在Linux安裝GoogleTensorFlow神經網路軟體
※QakBot銀行惡意軟體導致大量 Active Directory 被鎖定
※CIA Angelfire:專門感染Windows的惡意軟體框架
※Android軟體調侃iPhone X「M型劉海」,安卓秒變「劉海屏」
※施耐德電氣公司的U.motion Builder軟體曝出未修復安全漏洞
※蘋果iPhone7需要安裝殺毒軟體嗎
※「made in China」最強背鍋,勒索軟體FakeCry「各種冒牌」有何目的?
※ExpensiveWall:「包裝」惡意軟體現身 Google Play,危及用戶財產安全
※微軟宣布Windows Store應用商店將上線完整版Office軟體
※直指電網:比Stuxnet更具威脅的基建設施惡意軟體Industroyer
※惡意軟體就在Docker容器中?
※比爾蓋茨換用Android手機,上面裝了很多微軟軟體