分享

【原创】从零编写简单的手机管家

 昵称3884271 2015-11-13

前段时间无意发现LBE主动防御能检测通过PM or ADB安装程序,觉得挺有意思。平时很少写APK,开发确实有些苦手,逼着自己练练。琢磨了下原理,实现了很一小部分类似功能,稍微记录下,作为学习笔记。水平实在有限,难免有错误和疏漏之处,请各位大大斧正。

一、  功能规划及实现
1.  手机加速:枚举后台进程,调用ActivityManager.killBackgroundProcesses实现
2.  流量管理
2.1 流量统计:枚举应用程序,通过TrafficStats统计流量,并累积
2.2 流量防火墙:移植开源防火墙DroidWall实现对WIFI和运营商网络的访问,需要ROOT权限
3.  应用管理
3.1 普通应用程序:枚举应用程序,根据用户卸载需求,通过构造Intent.ACTION_DELETE 实现卸载
3.2 预装软件:扫描/system/app下的应用程序,根据用户卸载需求,remount /system目录RW,实现对卸载
4.  主动防御
4.1静默安装程序拦截
原理:普通安装和静默安装最大的区别在于调用Binder服务的UID,根据此即可实现拦截。
实现步骤:
        1. 注入system_server,HOOK PackageManager服务端的Binder代理
        2. 重写此Binder代理中的onTransact函数,在这个函数中,过滤出TRANSACTION_installPackage,即安装APK请求。再通过UID过滤是否为静默安装。若是静默安装,则与service通信,弹窗倒计时。根据用户选择实现允许或者阻止
4.2通知管理
原理和静默安装拦截类似,替换Binder服务端的代理实现。
实现步骤:
        1. 注入system_server,HOOK NotificationManager服务端的Binder代理。
  2. 重写onTransact函数。过滤出TRANSACTION_enqueueNotificationWithTag和TRANSACTION_enqueueNotificationWithTagPriority请求。解包Parcel data,获得发送通知的包名。将报名发送到service查询黑名单,命中则返回相应code。将data丢弃,构造Reply返回。否则,重新打包Parcel data,将数据下发。

APK写得比较搓,就不丢上来了。
(有图有真相,录了个视频,丢出来献丑了:http://pan.baidu.com/s/1c0ngu2W)

二、参考文献
谷歌Binder服务原理
http://blog.csdn.net/l173864930/article/details/38468433                                 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多