Android防自啓攔截方案--framework層

背景:

最近需要做一個防應用自啓的方案,做在framework層源碼裏面。這裏做下簡單的技術方案介紹。

 

原理:

  1. 防止應用接收靜態廣播啓動;
  2. 防止應用的service隱式啓動。

 

大致方法:

防止應用接收靜態廣播啓動方案:

要了解此方案,要先了解廣播發送接收機制,請參考:https://blog.csdn.net/zhgeliang/article/details/80493390

可以在BroadcastQueue.java中的processNextBroadcast方法中處理靜態廣播拉起引用之前:

if ((r.curApp=mService.startProcessLocked   判斷是否是白名單應用,若不是,則調用scheduleBroadcastsLocked(); 方法繼續處理下一個廣播,並返回。 

爲什麼不加在processNextBroadcast的最前面?

我們要做的是防止應用自啓,但應用啓動後其應該接收到的廣播還是應該讓其接收到。

 

防止應用的service隱式啓動

建議先了解service的啓動流程,請參考:https://blog.csdn.net/freekiteyu/article/details/79785720

可以在ActiveServices.java 中的retrieveServiceLocked 中獲取到ServiceRecord 之後(主要是爲了獲取應用相關的信息,爲判斷是否在白名單做準備),返回ServiceLookupResult之前 判斷是否是白名單應用,若不是,則返回null。

防止應用被殺後再啓動:

在killServicesLocked中"// Any services running in the application may need to be placed" 之前判斷若不是白名單應用,調用bringDownServiceLocked(sr);   continue;

 

白名單應用注意事項

Android核心應用(coreApp)應該在白名單內,系統重要應用也應該在白名單內。

 

 

 

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