-
-
[原创]从零编写简单的手机管家
-
发表于:
2015-1-4 23:59
23937
-
前段时间无意发现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
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)