关于android的设备管理器-DevicePolicyManager(二)
上回分析到了/data/system/device_policies.xml这个文件是在package change事件发生的时候变化的。那么来看看它的内容。
依据以往的经验。在/data/system以下的几个文件(packages.xml packages.list)都是PackageManager扫面各个package的Manifest文件生成的,预计这文件也差点儿相同吧。
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<policies>
<admin name="com.bgsoft.securitycamera/com.bgsoft.securitycamera.AdminReceiver">
<policies flags="2" />
</admin>
<active-password quality="65536" length="5" uppercase="0" lowercase="0" letters="0" numeric="0" symbols="0" nonletter="0" />
</policies>
在我安装了SecurityCamera这个apk以后,这个文件变成了这样,多出了一个admin的片段,描写叙述的东西看起来确实是SecurityCamera相关的东西。那再来看看它的Manifest文件吧。
<receiver
android:label="@string/labelValue"
android:name=".AdminReceiver"
android:permission="android.permission.BIND_DEVICE_ADMIN"
android:description="@string/description">
<meta-data android:name="android.app.device_admin" android:resource="@xml/lockourscreen" />
<intent-filter>
<action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
</intent-filter>
</receiver>
能够发现有个receiver的段和前文提到的东东是相关的,AdminReceiver 这个东西看来是详细的实现部分,须要详细研究。
查看代码发现它是DeviceAdminReceiver的子类,是一个广播接收器。可是非常奇怪,做为一个广播接收器。在Manifest中没有注冊。也没有在代码中动态的注冊,那它是怎么接收到它想要的action事件的。非常奇怪。
仅仅能在代码中再寻找谁用到了它呢.
this.componentName = new ComponentName(this, AdminReceiver.class);
......
private void startDeviceManager()
{
Intent localIntent = new Intent("android.app.action.ADD_DEVICE_ADMIN");
localIntent.putExtra("android.app.extra.DEVICE_ADMIN", this.componentName);
localIntent.putExtra("android.app.extra.ADD_EXPLANATION", "防盗拍照助手");
startActivityForResult(localIntent, 0);
}
OK,就这里了。可是问题来了,挖.. 不是不是。这是在干什么呢? 寻遍Android的源码。发现Setting能处理这个Intent。
I/ActivityManager( 3138): START u0 {cmp=com.android.settings/.DeviceAdminAdd (has extras)} from pid 24508
BYW:这样的log看了这么多,才明确原来cmp是component。
不废话。看DeviceAdminAdd ,代码较多。不贴了主要分析,就是这个Activity在处理这个Action的是候会弹出一个框,问你是否确认激活这个 设备管理器。
假设ok的话就会调用setActiveAdmin。这个就是前文中提到的那个setActiveAdmin。把这个设置成active的。
那是不是激活了就能收到广播了呢。还有这个管理器究竟有什么用的问题还是没解决。
还是得继续研究。 那线索仅仅能是去分析前文提到的List了。前文仅仅看了假设add,却没关注这个list究竟是做什么用的,失误。
查找出了一堆使用的地方,调个典型的来看看.
void sendAdminCommandLocked(String action, int reqPolicy, int userHandle) {
final DevicePolicyData policy = getUserData(userHandle);
final int count = policy.mAdminList.size();
if (count > 0) {
for (int i = 0; i < count; i++) {
ActiveAdmin admin = policy.mAdminList.get(i);
if (admin.info.usesPolicy(reqPolicy)) {
sendAdminCommandLocked(admin, action);
}
}
}
}
遍历这个list,要知道这个list可都是active的admin了,发给他们消息,对了,有门。这就是它收到广播的方式吗?看看谁调用了这种方法。
找个典型。发如今keyguard上password输错的时候会调用到。 这个设备管理器的作用貌似要能够猜到了。
从
admin.info.usesPolicy(reqPolicy)
能够看出有非常多policy能够被使用。
USES_POLICY_LIMIT_PASSWORD
USES_POLICY_WATCH_LOGIN
。。。。
后来还google原来是与应用的某个xml相应,就是Manifest里面的meta-data
<meta-data android:name="android.app.device_admin" android:resource="@xml/lockourscreen" />
<? xml version="1.0" encoding="utf-8"?>
<device-admin
xmlns:android="http://schemas.android.com/apk/res/android">
<uses-policies>
<watch-login />
</uses-policies>
</device-admin>
Ok,窥豹一斑吧。
关于android的设备管理器-DevicePolicyManager(二)的更多相关文章
- 关于android的设备管理器-DevicePolicyManager(一)
在Andorid的设置->安全里面有个设备管理器的选项,相信大部分android用户都不太会去注意这个东西.近期在安装了一个应用之后发现这个里面的东西变了.怎么回事呢,研究研究看看.</s ...
- Android设备管理器——DevicePolicyManager
自从安卓2.2(API=8)以后,安卓手机是通过设备管理API对手机进行系统级的设备管理. 本篇通过大家熟悉的"一键锁屏"的小项目实现来介绍设备管理API如何通过强制设备管理策略创 ...
- Android设备管理器 DevicePolicyManager
设备管理器有个特点,你注册了之后如果不解除注册就会难以卸载带有设备管理器的应用,目前4.3版本仍未提示用户如何卸载,maybe later. 在「设定-安全」你可以看见「设备管理器」,它提供一些高级功 ...
- Android设备管理器漏洞2--禁止用户取消激活设备管理器
2013年6月,俄罗斯安全厂商卡巴斯基发现了史上最强手机木马-Obad.A.该木马利用了一个未知的Android设备管理器漏洞(ANDROID-9067882),已激活设备管理器权限的手机木马利用该漏 ...
- Android Device Administration 设备管理器——实现一键锁屏
Android Device Administration 设备管理器--实现一键锁屏 最近研究了一下安全这一块的内容,当然,我是比较水的,所以也拿不出什么好知识点,但是有一些冷门的东西我还是可以聊聊 ...
- Android设备管理器漏洞(转)
一.漏洞描述 目前被称为“史上最强Android木马”的病毒Backdoor.AndroidOS.Obad.a利用Android设备管理器漏洞使用户无法通过正常方式卸载.其实该漏洞早在去年底已被发现. ...
- (转)关于android设备管理器的一些分析
转自http://bbs.pediy.com/showthread.php?t=183692 想必很多人都知道轰动一时android木马OBAD,该木马利用android设备管理器的漏洞,当用户激活设 ...
- Android学习笔记_61_手机安全卫士知识点归纳(1)状态/形状图形 GPS 设备管理器DeviceAdminReceiver ImageView属性
1.在做程序自动安装更新的时候 ,必须保证程序的签名和包名是相同. C:\Documents and Settings\zehua\.android \ debug.keystore debug ...
- Android 设备管理器 阻止用户取消激活
该方案测试可行,系统版本4.4.2.它算是借助android系统的一个bug,不确定在后续更高的版本中是否修复. 该功能和360防卸载功能一样的实现原理. 主要的参考资料是:http://bbs.pe ...
随机推荐
- 【BZOJ 3771】 3771: Triple (FFT+容斥)
3771: Triple Time Limit: 20 Sec Memory Limit: 64 MBSubmit: 547 Solved: 307 Description 我们讲一个悲伤的故事. ...
- 【BZOJ 4568】 4568: [Scoi2016]幸运数字 (线性基+树链剖分+线段树)
4568: [Scoi2016]幸运数字 Description A 国共有 n 座城市,这些城市由 n-1 条道路相连,使得任意两座城市可以互达,且路径唯一.每座城市都有一个 幸运数字,以纪念碑的形 ...
- noip2007树网的核
想一下可以发现随便枚举一条直径做就可以了. 核越长越好.于是枚举核的过程可以做到O(n) 然后就是统计答案. 对于每个核最大偏心距肯定是核上面每个点不走核内的点所能走到的最远点的最值. 而且对于核的两 ...
- bzoj 4439: [Swerc2015]Landscaping -- 最小割
4439: [Swerc2015]Landscaping Time Limit: 2 Sec Memory Limit: 512 MB Description FJ有一块N*M的矩形田地,有两种地形 ...
- centos安装pcre
安装pcre前需要已安装gcc工具 1.跳转下载目录 cd install-file 2.下载pcre wget ftp://ftp.csx.cam.ac.uk/pub/software/progra ...
- Android中数据存储(四)——ContentProvider存储数据
目录(?)[+] 当一个应用程序在Android中安装后,我们在使用应用的过程中会产生很多的数据,应用都有自己的数据,那么我们应该如何存储数据呢? 数据存储方式 Android 的数据存储有5种方 ...
- 利用BusyBox ~私人定制 My LINUX~
前言 我在今天在这里跟大家详细地探讨一下Linux系统的定制过程和实现例如.用户能够远程登录:和Nginx能够稳定地运行在我们私人定制的LINUX系统上.一步一步从头开始定制属于我们自己的系统. 正文 ...
- 发现一个CentOS第三方源epel的仓库地址(repos.fedorapeople.org)
这个站点(http://repos.fedorapeople.org)很有意思,比如要安装maven,官方源默认是没有的,当然可以安装epel源,而如果只要单独安装,可以直接安装一个仓库地址. 下面将 ...
- Linux下swap分区多大才合适的问题探讨
说明: 1.这个话题在每个Linux发行版中都各不相同,且在当下内存硬盘的时代下,再组个磁盘阵列之后速度相当. 2.我觉得硬盘大的情况下,有多大搞多大,我只要控制内存的使用率在99%时才使用swap, ...
- CISC RISC架构
参考: http://capacity.blog.163.com/blog/static/20866413120129261737102/ http://cs.stanford.edu/people/ ...