一、简介
Android 提供了一个可管理和操作设备的API叫DevicePolicyManager,使用这个API可以接管手机的应用权限,对手机做出很重要很多大胆的操作,比如设置锁屏方式、恢复出厂设置、设置密码、强制清除密码,修改密码等操作。
很多“远程查找手机”的实现使用了设备管理器功能,可以实现远程锁定手机,远程擦除,远程响铃等。
此外,很多恶意软件通过设备管理器进行“锁屏勒索”等恶意操作,为了限制设备管理器被滥用,Android N 规定,第三方应用开发者只能使用DevicePolicyManager.resetPassword为无密码设备设置初始密码,而不能重置或清除已有的设备密码,但在Android N以下还是存在该类型的勒索攻击。
由于设备管理器的高权限,因此要谨慎对待申请激活设备管理器的App,例如:
今日头条、某些安全管家等等,
二、设备管理器使用
- Menifest文件中注册receiver
| 1 | <receiver android:name=".demo.DeviceReceiver" | 
- 创建xml文件夹添加device_admin.xml
| 1 | <?xml version="1.0" encoding="utf-8"?> | 
- 新建一个class继承DeviceAdminReceiver - 1 
 2
 3- import android.app.admin.DeviceAdminReceiver; 
 public class MyAdmin extends DeviceAdminReceiver {
 }
- 实现代码 - 1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41- public class MainActivity extends AppCompatActivity { 
 private DevicePolicyManager dpm;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
 dpm = (DevicePolicyManager) getSystemService(DEVICE_POLICY_SERVICE);
 //openAdmin();
 Button bt = (Button)findViewById(R.id.button);
 bt.setOnClickListener(new View.OnClickListener() {
 @Override
 public void onClick(View view) {
 ComponentName cn = new ComponentName(getApplication(), MyAdmin.class);
 if(dpm.isAdminActive(cn)){
 //设备管理员的api
 dpm.lockNow(); //锁屏
 //dpm.wipeData(0); //擦除数据,谨慎使用
 //dpm.wipeData(DevicePolicyManager.WIPE_EXTERNAL_STORAGE);//删除sdcard数据
 }else{
 openAdmin();
 Toast.makeText(getApplicationContext(), "请先激活管理员", 0).show();
 }
 }
 });
 }
 
 //激活设备管理器
 public void openAdmin(){
 //进入设备管理器激活向导
 Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
 ComponentName cn = new ComponentName(this, MyAdmin.class);
 intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, cn);
 //提示用户开启管理员
 intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION,
 "请激活设备管理器");
 startActivityForResult(intent,0);
 }
 }
三、设备管理器相关漏洞
- 隐藏设备管理器中的列表
 当用户激活设备管理器后,程序会在setting设备管理器列表隐藏,应用程序激活成设备管理器后,可以实现锁屏、擦除用户数据等功能,并且无法使用常规的卸载方式对其卸载
 参考:https://bbs.pediy.com/thread-183692.htm
 http://seclab.safe.baidu.com/2014-10/deviceadminexploit2.html