前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >那些年Android黑科技①:只要活着,就有希望

那些年Android黑科技①:只要活着,就有希望

作者头像
陈宇明
发布2020-12-15 14:40:56
8220
发布2020-12-15 14:40:56
举报
文章被收录于专栏:设计模式

作者博客

http://www.jianshu.com/u/abc8086489c7

文章目录

  1. 前言
  2. 系列目录
  3. Android应用内执行shell
  4. 双进程保活aidl版 (android5.0以下)
  5. 双进程保活jni版 (android5.0以下)
  6. 保活 JobService版 (android5.0++)

1

前言

“黑科技什么的最喜欢了! 对,我们就是要搞事。 来呀。谁怕谁。三年血赚,死刑不亏。(๑´ڡ`๑) ” -- 来自暗世界android工程师

这个世界上手机有三大系统,苹果、 安卓、 中国安卓 。本篇强烈呼吁大家不要去做哪些违反用户体验的黑科技功能,研究研究玩玩就好了啦。全当增长技术,在真实的项目开发中尽量能不用就不要用得好。道理大家都懂的。

2

系列目录

那些年Android黑科技①:只要活着,就有希望

  1. android应用内执行shell
  2. 双进程保活aidl版
  3. 双进程保活jni版
  4. 保活JobService版

那些年Android黑科技②:欺骗的艺术

待续····

  1. hook技术
  2. 欺骗系统之偷梁换柱

那些年Android黑科技③:干大事不择手段

待续····

  1. Home键监听
  2. 桌面添加快捷方式
  3. 无法卸载app(DevicePoliceManager)
  4. 无网络权限偷偷上传数据

3

Android应用内执行shell

android系统本身是Linux作为内核,我们一般开发中使用 adb shell 命令来操作。但其实本身在应用内也是可以执行的。强大的地方是在root的情况下,可以实现静默安装和操作一切你想在设备内做事情。其方法如下。

没有root权限的情况下在屏幕上操作,实测可被执行的命令只有swipe和部分keyevent可以生效,其余的可以通过adb的方式调用成功。但是一但在应用内通过shell是不可以的。这确保了android手机的安全。

其中keyevent 返回键 音量键可以调用 而home按键这种则不可以。如果你试图调用dumpsys activity activities 来查看。会抛出权限的异常如下。实测中我有申请权限,但一样无法在应用内部调起。

Permission Denial: can't dump ActivityManager from from pid=12414, uid=10369 without permission android.permission.DUMP0

使用参考:

Root情况下静默安装:

源码:https://github.com/BolexLiu/AndroidShell

4

双进程保活aidl版 (android5.0以下)

原理介绍:实现的机制并不复杂,通过AIDL的方式开启两个服务分别在不同进程中启动,然后互相守护监听对方是否被关闭,如果有一方被断开连接,另一方测重启服务。因为android在5.0之前销毁进程是一个一个销毁的,他并不能同时销毁两个。所以可以做这件事。(被修改的rom除外,比如华为4.4就不行,但三星可以。)

1.配置服务进程。注意process属性会独立在另一个进程中。

2.我们拥有两个服务LocalService RemoteService。项目运行后第一件事,同时启动服务。

3.在LocalService中绑定RemoteService并监听对方的创建和销毁,RemoteService中的实现也一样。

源码:https://github.com/BolexLiu/DoubleProcess

5

双进程保活jni版 (android5.0以下)

原理介绍:这种双进程守利用了Linux子进程在父进程被干掉后还能运行而实现。所以我们要做的是通过java去fork一段C的代码。通过动态链接库封装起来。然后在C代码里不断轮训父进程的ppid是否存活。如果挂掉了侧重新唤醒。

1.配置服务进程。注意process属性会独立在另一个进程中。

2.在DaemonService里利用静态代码块调起so。

3.so中的C代码轮训进程判断是否存活。

感谢CharonChui开源代码。处应该有掌声!

源码:https://github.com/CharonChui/DaemonService

6

保活 JobService版 (android5.0++)

原理: JobService是官方推荐的方式,即使app完成被杀死的状态下也能调用起来,本质是向系统注册一个任务。通过getSystemService拿到系统的JobScheduler。然后通过JobInfo.Buidler进行构造。需要注意的是一定要指定被触发的条件。比如:设备充电中、空闲状态、连接wifi... 非常类似以前的广播保护原理。但是实现不一样。这次是我们反向注册给系统,而不是接收系统的广播。

1.在AndroidManifest进行配置添加permission属性

2.MyJobServer继承JobService类:

3.在合适的地方向系统注册

注意:jobScheduler无法兼容Android 5.0以下的设备,可以参考下面的项目,在低版本中也可以使用。

源码:https://github.com/evant/JobSchedulerCompat

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-06-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码个蛋 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档