1. 程式人生 > >Android 進程常駐(5)----開機廣播的簡單守護以及總結

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

ibm col 組合 win 要點 思考 eas 三星 殺死

這是一個輕量級的庫,配置幾行代碼。就能夠實如今android上實現進程常駐,也就是在系統強殺下,以及360獲取root權限下。clean master獲取root權限下都無法殺死進程

支持系統2.3到6.0

支持大部分設備,包含三星。華為。oppo,nexus。魅族等等

能夠簡單對開機廣播進行保護


github地址:

https://github.com/Marswin/MarsDaemon

原理分析:

Android 進程常駐(0)----MarsDaemon使用說明

Android 進程常駐(1)----開篇

Android 進程常駐(2)----細數利用android系統機制的保活手段

Android 進程常駐(3)----native保活5.0下面方案推演過程以及代碼詳述

Android 進程常駐(4)----native保活5.0以上方案推演過程以及代碼詳述

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在project裏面有這樣一個類
/MarsDaemon/LibMarsdaemon/src/main/java/com/marswin89/marsdaemon/PackageUtils

技術分享

是的,由於是我們自己的組件。所以設置他不須要不論什麽權限,僅僅須要在有些時機順便重置一下開機廣播的狀態就好(比方每次進程重新啟動的時候,網絡變化的時候,開關屏的時候)。另一個就是註冊一個關機廣播,每次關機的時候重置一下開機廣播的狀態。從而達到保護開機廣播的作用。

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

非常easy的一個小tip


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