手機管理應用研究【5】——應用雜篇

歡迎轉載,轉載請註明:http://blog.csdn.net/zhgxhuaa



說明


在本系列文章的第一篇《安裝卸載篇》中介紹了應用安裝卸載相關的一些東西。本篇之所以取名爲《應用雜篇》就是希望繼續介紹一些應用相關的相對比較零散的東西,包括:應用安裝位置選擇、應用鎖、山寨應用識別、零流量分享、智能推薦等。

上接《應用安裝卸載篇》,首先介紹一下應用安裝位置選擇。


應用安裝位置


在安裝應用時,應用到底會安裝到內置存儲器裏面還是外置存儲器裏面呢?這裏主要取決於四個方面的信息:

A.       應用自身在AndroidManifest中隊installLocation的定義。

B.       調用安裝程序(pm命令等)時指定的參數。

C.       系統設置裏面的應用安裝位置選項(很多廠商會隱藏,此時默認一般是AUTO)。

D.       安裝時系統(這裏主要是根據存儲空間)的判斷。


應用鎖


應用鎖這個點不大,但是如果要做,還是有一些點可以挖掘,比如:

A.       應用鎖(鎖定應用,使用時需要驗證,如:密碼、圖案等)。

B.       鎖定系統設置(Settings)。

C.       鎖定數據連接狀態(Wifi、藍牙、移動網絡、數據同步)。

D.       鎖定安裝/卸載。

E.        應用隱藏。


應用鎖


這裏有兩種實現方案:

A.       實現一個Service,在Service中定時查詢RunningTask中的Activity,如果發現Activity屬於被鎖定的應用,則彈出加密驗證界面。

B.       利用進程注入技術,對ActivityManagerService中的startActivity進行攔截,,如果發現Activity屬於被鎖定的應用,則彈出加密驗證界面。


兩種方案存在的問題:

1)        方案一不需要root權限即可實現,方案二需要root權限,而且進程注入實現門檻較高,但實現更爲完美。

2)        方案一定時輪詢,在耗電方面表現要差一些。

3)        在採用方案一時,輪詢時間可以定爲300-500毫秒。

4)        採用方案一時需要屏蔽Back鍵和“最近的任務”列表。

5)        採用方案一時需要注意除了MainActivity以外其他Activity的判斷。

6)        無論採用哪種方式都需要注意黑白名單的維護。


下面是採用方案一時的核心實現代碼:



設置鎖


設置鎖鎖定的是系統設置裏面的信息,系統設置的信息大部分都是保存在Settings數據庫中,已SettingsProvider的形式提供訪問的。所以這裏在設定了鎖定選項後可以通過Observer的方式進行監控,一旦發生改變則重置爲原來的值。


鎖定數據連接狀態


有時候可能會有這樣一種需求,就是鎖定手機數據連接的狀態,防止其他應用或者人去改變。

系統在數據連接發生變化時會有響應的廣播發出,這裏響應和處理響應廣播即可。


鎖定安裝卸載


這裏有三種實現思路:

A、 通過進程注入監控系統卸載代碼。

B、 監控系統的應用安裝器進程(PackageInstaller)即可,利用2.1中的方法即可做到。

C、 利用Linux中的inotify機制對應用目錄進行監控,具體不做分析,可參見之前《應用寶卸載監控》的文章。

三種思路存在的問題:

1)        方案1:可以監控靜默安裝/卸載和通過系統接口進行安裝卸載,但無法監控直接暴力刪除應用目錄下的apk文件。需要root權限。

2)        方案2:只能監控利用系統安裝器進行安裝的情況,無法監控靜默安裝和暴力刪除。

3)        方案3:理論上可以監控所有情況,但依賴於監控進程的存活。在小米等手機監控進程可能存在問題。


應用隱藏


可以參考《手機加速篇》中的2.3.2借關於setApplicationEnabledSetting接口的介紹。


山寨應用/惡意應用識別


目前市面上很多手機管理軟件都推出“山寨應用識別”類似功能,下面介紹一下這裏面的一些點。雖然目前各家都在做山寨或者惡意應用掃描的功能,但是木有統一的標準。據網上的數據,騰訊手機管家認爲是惡意應用的有接近40%被360認爲是安全的;同樣360認爲是惡意應用的也有20%多騰訊認爲是安全的。

但無論各傢俱體採用的識別方式差異多大,其中包含的內容無外乎下面這些。在識別山寨應用的時候,可以從如下一些點入手:

A.       自身特徵(包括:包名簽名、圖標、開發商)。通過圖標判斷相似度,著名開發商和合作廠商認爲是安全的。

B.       安全特徵(手機病毒、扣費代碼、偷跑流量、偷發短信等),這裏可以跟安全廠商合作。

C.       隱私特徵(敏感權限)

D.       廣告特徵(通知欄廣告、內嵌廣告)

E.        市場特徵(下載量、評價、用戶舉報)。也可以結合後臺對刷榜情況進行處理。

F.        語言特徵(對電子市場中應用默認語言進行評分)

G.       應用來源(對不同來源採用不同的打分,比如說對來做360的打5分,對來做百度手機助手的打8分)

H.       外部合作(安全廠商掃描、12321網站等)

I.         利用Google Play進行驗證。

這裏面涉及到的核心點有這麼幾個:

1)        應用相似度的計算。

2)        惡意應用的判斷(這裏可以採用加權平均等多種方法)。

 

通過上面的分析可以看出,在識別惡意應用時,有很多工作是可以在本地做校驗的,在本地校驗完後再到服務器做進一步的校驗。這樣的好處是可以減少流量和服務器的計算量。


系統唯一標識


有很多場景和需求你需要用到手機設備的唯一標識符,通常會用到的信息有:IMEI、WIFI Mac address、BT mac address、Android id等。具體的獲取方法這裏不做詳細介紹,可參見http://cloudstack.blog.163.com/blog/static/1876981172012710823152/這篇文章。這裏說一下幾個需要注意的點:

  • 儘量不用使用wifi mac地址,因爲在wifi設備關閉後獲取不到的問題。
  • 不要依靠imei,因爲山寨機可能重複,並且用戶可能通過手機管理軟件禁止相關權限。
  • 所有涉及到權限的都要考慮用戶可能會通過管理軟件等禁止的情況。
  • 除了上面的那篇參考文章中的方法外,guid生成唯一串保存起來以後使用,也是一種可行的實現思路。


這一篇只是做了簡單的方案的介紹,貼的代碼較少,歡迎交流討論。下一篇介紹《省電管理篇》


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章