这是一个轻量级的库,配置几行代码,就可以实现在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在工程里面有这样一个类
/MarsDaemon/LibMarsdaemon/src/main/Java/com/marswin89/marsdaemon/PackageUtils

是的,因为是我们自己的组件,所以设置他不需要任何权限,只需要在有些时机顺便重置一下开机广播的状态就好(比如每次进程重启的时候,网络变化的时候,开关屏的时候),还有一个就是注册一个关机广播,每次关机的时候重置一下开机广播的状态,从而达到保护开机广播的作用。

在CleanMaster ,给了root权限之后,禁用开机广播,然后重启手机,开机广播失效;然后加上我的这个方法,再禁用掉,开机广播ok!

很简单的一个小tip

Android 进程常驻----开机广播的简单守护以及总结的更多相关文章

  1. Android 进程常驻(5)----开机广播的简单守护以及总结

    这是一个轻量级的库,配置几行代码.就能够实如今android上实现进程常驻,也就是在系统强杀下,以及360获取root权限下.clean master获取root权限下都无法杀死进程 支持系统2.3到 ...

  2. Android 进程常驻、进程守护、进程保活技术的总结

    转载自:http://blog.csdn.net/marswin89/article/details/50917098 这是一个轻量级的库,配置几行代码,就可以实现在Android上实现进程常驻,也就 ...

  3. Android 进程常驻(使用第三方MarsDaemon)(虽然不可用,但是还是保留下。)

    github地址: https://github.com/Marswin/MarsDaemon 原理分析: Android 进程常驻(0)----MarsDaemon使用说明 Android 进程常驻 ...

  4. Android 进程常驻(0)----MarsDaemon使用说明

    版权声明:本文为博主原创文章,未经博主允许不得转载. 这是一个轻量级的库,配置几行代码,就可以实现在Android上实现进程常驻,也就是在系统强杀下,以及360获取root权限下,clean mast ...

  5. Android 进程常驻----native保活5.0以上方案推演过程以及代码

    正文: 上一篇我们通过父子进程间建立双管道,来监听进程死掉,经过测试,无耗电问题,无内存消耗问题,可以在设置中force close下成功拉起,也可以在获取到root权限的360/cleanmaste ...

  6. Android 进程常驻----native保活5.0以下方案推演过程以及代码

    正文: 今天继续昨天,一鼓作气,争取这个礼拜全部写完. 上一篇文章留了一个别人的github链接,他里面的native保活实现方案也是大多数公司采用的方案. 我们先来讲一下他的方案. 他是首先开启一个 ...

  7. Android进程保活

    Android进程回收机制 Low Memory Killer原理 微信团队原创分享:Android版微信后台保活实战分享(网络保活篇) 微信团队原创分享:Android版微信后台保活实战分享(进程保 ...

  8. 【Android】Android 4.0 无法接收开机广播的问题

    [Android]Android 4.0 无法接收开机广播的问题   前面的文章 Android 开机广播的使用 中 已经提到Android的开机启动,但是在Android 4.0 有时可以接收到开机 ...

  9. Android开机广播

    有些时候我们常常需要某个程序开机运行.在这个时候我们就需要监听系统的开机广播,然后启动我们的程序即可. 不多说 直接上代码: public class BootReceiver extends Bro ...

随机推荐

  1. jquery on 绑定事件

    jquery on 绑定事件 1. 多个选择器绑定一个事件 2. 多个事件绑定一个函数 3. 一个选择器绑定多个事件,有两种写法: 或者 on只绑定一次事件,绑定父元素,防止初始化时数据未加载,绑定出 ...

  2. Python 2.7 - CentOS 7 - ImportError: No module named Tkinter

    It's simple. sudo yum -y install tkinter Just want to say, "I'm back".

  3. dom4j学习

    在使用xml读写的过程中,用到了dom4j,也算是一个比较主流的xml包了,在使用的过程中,将学习经历记录一下,以后查阅也比较方便. 首先是在pom中添加依赖,在Maven的中心库搜索后选择了该包: ...

  4. css设置背景图片

    background:pink;图片在背景图上面 background-image:url(food.jpg);一张图片铺满一行background-repeat:repeat-x;同一张图片多张铺满 ...

  5. Python之路----------迭代器

    直接用作于for循环的数据类型有以下几种: 1.集合类的数据类型:list tuple dict set str等 2.生成器generator,包括生成器和带有yiled 的generator fu ...

  6. understanding-论文

    understanding temporal and spatial travel paterns of individual passengers by mining smart card data ...

  7. 批判性思维——Asking The Right Questions

    我们生活在一个纷繁复杂的数字世界中,每天都在信息海洋中遨游.如果不想被其淹没,继而成为别人思想的傀儡,就有必要对你接受的信息进行批判.筛选,自己决定该相信什么不该相信什么,进而形成自己的观点,而不是一 ...

  8. web前端基础知识 jQuery

    通过之前的学习我们已经了解了html.css.javascript的相关知识:本次我们就共同学习进阶知识:jQuery~ 一.什么是jQuery? jQuery其实就是一个轻量级的javascript ...

  9. 自己写一个swap函数交换任意两个相同类型元素的值 对空指针的使用 字节大小的判断(二)了解原理

    验证的代码: #include <stdio.h> int main(){ char c = 'z'; ) + (c << ) + () + 'a'; printf(" ...

  10. javascript 中的 let 作用域

    let 声明了一个块级域的局部变量,并且可以给它一个初始化值. 语法EDIT let var1 [= value1] [, var2 [= value2]] [, ..., varN [= value ...