Android 進程常駐(5)----開機廣播的簡單守護以及總結

終於一口氣寫完了,這是去年在一個月搞的成果,也算是對自己有了一個交代。

其實保活就是兩個要點:

1、怎樣監聽到進程掛掉

2、怎樣把進程拉起來

把這兩個點都解決,問題就解決了。

大家把我之前的文章都看完,會發現這兩個點上都有好多種策略,那麼在不同的手機上,兩個點的不同策略就有多種組合方式,也也是我適配手機的主要手段。

當時我適配測試的手機有




還要說一句,有的手機會在你係統設置force close的時候,顯示已經殺掉了進程,但是其實沒有真的殺掉,比如魅族。。。

可以shell進去用命令 ps | grep mars來查看所有MarsDaemon的進程

如果有root權限,可以使用kill -9命令來殺進程,但是效果沒有force close和360\cm 殺的好



最後要說一下,進程常駐是保證不死,但是首先要活一次才行
換句話說好多人問我是不是要開機的時候啓動一次,怎麼啓動
答案肯定是開機廣播
但是現在有第三方軟件獲取root權限之後可以把我們的開機廣播給禁掉,那麼MarsDaemon的保護活也就沒有意義了

那麼360/cm是怎麼禁用我們的廣播的呢?

我們站在他的角度來思考這個問題:

1、他阻止系統發出開機廣播,開機之後立刻注入SystemService

2、系統發出廣播,他讓我們收不到

3、我們收到廣播之後,他把我們return掉

4、他沒能return掉我們,但是立馬殺掉我們


ok,第一個太難,如果他能做到,我們沒有root所以無解。

第四個我們沒有威脅,因爲MarsDaemon就是用來反被殺的

第三個他要注入我們,可以加殼之類防禦

那麼第二個他是怎麼做的呢? 系統方法:


沒錯,他可以將一個組件設置爲enable或者disable,如果把我們的開機廣播設置爲disable,那麼無疑是用不了。

可是這個他們調用不了的,需要系統簽名才行。

但是他們可以用android shell中的pms 的pm命令達到同樣的效果:



只要有root權限就可以使用這個pm disable componentsName命令。第三方安全軟件,我們已經默認他們有root權限了,那麼我們該怎麼辦呢?


MarsDaemon在工程裏面有這樣一個類
/MarsDaemon/LibMarsdaemon/src/main/java/com/marswin89/marsdaemon/PackageUtils


是的,因爲是我們自己的組件,所以設置他不需要任何權限,只需要在有些時機順便重置一下開機廣播的狀態就好(比如每次進程重啓的時候,網絡變化的時候,開關屏的時候),還有一個就是註冊一個關機廣播,每次關機的時候重置一下開機廣播的狀態,從而達到保護開機廣播的作用。

在CleanMaster ,給了root權限之後,禁用開機廣播,然後重啓手機,開機廣播失效;然後加上我的這個方法,再禁用掉,開機廣播ok!

很簡單的一個小tip

發佈了42 篇原創文章 · 獲贊 44 · 訪問量 85萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章