sharedUserID的使用

来源:互联网 发布:《唯有落花知》 编辑:程序博客网 时间:2024/06/10 09:21

在AndroidManifest.xml的根节点中设置android:sharedUserId="android.uid.system"属性,应用签名时需要跟系统的签名保持一致,即可以用java -jar signapk.jar platform.x509.pem platform.pk8  NBSecu.apk a.apk,编译后的a.apk拥有系统所有权限,相当于系统的“设置”应用。


该应用在不需要root权限的情况下,能够调用系统的任何方法。如下面这些操作:


1.断开/连接某个应用软件的网络

管理应用的联网情况,需要开启防火墙,开启防火墙时,所有的应用都不能联网。所以要遍历所有的应用,设置为可联网。

Method method = Class.forName("android.os.ServiceManager")        .getMethod("getService", String.class);IBinder binder = (IBinder) method.invoke(null,        new Object[] { NETWORKMANAGEMENT_SERVICE });mNMService = INetworkManagementService.Stub.asInterface(binder);// 设置防火墙为true时,所有的应用都不可联网mNMService.setFirewallEnabled(true);mNMService.setFirewallEgressDestRule("0.0.0.0/0.0.0.0", 53, true);// 已经设置断网的应用final List<Integer> saveList = getSaveAppList(ctx);// 获取所有安装的应用final List<TrafficApp> apps = AppTrafficManager.getInitApps(ctx);new Thread(new Runnable() {    public void run() {        for (TrafficApp app : apps) {            if(!saveList.contains(app.uid)){                // 设置应用可以联网                setUidNetWorkState(app.uid, true);            }        }    }}).start();public static void setUidNetWorkState(int uid, boolean isEnable) {    try {        // 根据uid设置是否可以联网        mNMService.setFirewallUidRule(uid, isEnable);    } catch (RemoteException e) {        e.printStackTrace();    }}

aidl的处理:aidl中用不到的方法可以直接删除掉,只保留用到的方法即可。


2.设置数据网络是否可用

Android5.0之前所有应用都可以通过反射调用CONNECTIVITY_SERVICE中的setMobileDataEnabled(boolean enable)方法设置。

Android5.0以上都需要系统权限才可以设置。

Class<?> serviceManager = Class.forName("android.os.ServiceManager");Method method = serviceManager.getDeclaredMethod("getService", String.class);IBinder subBinder = (IBinder) method.invoke(serviceManager.newInstance(), "isub");// android5.0是该方法,5.1中该方法的返回值类型改为int型了long dataSubId = ISub.Stub.asInterface(subBinder).getDefaultDataSubId();IBinder binder = (IBinder) method.invoke(serviceManager.newInstance(), "phone");// android5.0是该方法,5.1中该方法改为setDataEnabled(int subId, boolean enable);ITelephony.Stub.asInterface(binder).setDataEnabledUsingSubId(dataSubId, enabled);

3.挂断电话

Class<?> serviceManager = Class.forName("android.os.ServiceManager");Method method = serviceManager.getMethod("getService", String.class);IBinder binder = (IBinder) method.invoke(        serviceManager.newInstance(), "telecom");ITelecomService.Stub.asInterface(binder).endCall();


0 0
原创粉丝点击