前段时间无意发现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 |
|