Xposed使用小结,android Wifi代理,权限申请模拟点击

•1.Xposed安装器(5.0以上版本有一个,5.0以下有一个,两个不同的apk包)

•2.Root权限(手机需要root才可以使用Xposed)


能下载到


wifi代理

/** * Created by peter.li on 2017/12/13. */ 

public class HttpProxyUtil { 

private static HttpProxyUtil instance; public static HttpProxyUtil getInstance() {         if(instance == null){ instance = new HttpProxyUtil(); } return instance; } public static Object getField(Object obj, String name) throws SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException{ Field f = obj.getClass().getField(name); Object out = f.get(obj); return out; } public static Object getDeclaredField(Object obj, String name) throws SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException { Field f = obj.getClass().getDeclaredField(name); f.setAccessible(true); Object out = f.get(obj); return out; } public static void setEnumField(Object obj, String value, String name) throws SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException{ Field f = obj.getClass().getField(name); f.set(obj, Enum.valueOf((Class) f.getType(), value)); } public static void setProxySettings(String assign , WifiConfiguration wifiConf) throws SecurityException, IllegalArgumentException, NoSuchFieldException, IllegalAccessException{ setEnumField(wifiConf, assign, "proxySettings"); } WifiConfiguration GetCurrentWifiConfiguration(WifiManager manager) { if (!manager.isWifiEnabled()) return null; List configurationList = manager.getConfiguredNetworks(); WifiConfiguration configuration = null; int cur = manager.getConnectionInfo().getNetworkId(); for (int i = 0; i < configurationList.size(); ++i) { WifiConfiguration wifiConfiguration = configurationList.get(i); if (wifiConfiguration.networkId == cur) configuration = wifiConfiguration; } return configuration; } public void setWifiProxySettings(Context context,String ip,int port) { //get the current wifi configuration WifiManager manager = (WifiManager)context.getApplicationContext().getSystemService(Context.WIFI_SERVICE); WifiConfiguration config = GetCurrentWifiConfiguration(manager); if(null == config) return; try { //get the link properties from the wifi configuration Object linkProperties = getField(config, "linkProperties"); if(null == linkProperties) return; //get the setHttpProxy method for LinkProperties Class proxyPropertiesClass = Class.forName("android.net.ProxyProperties"); Class[] setHttpProxyParams = new Class[1]; setHttpProxyParams[0] = proxyPropertiesClass; Class lpClass = Class.forName("android.net.LinkProperties"); Method setHttpProxy = lpClass.getDeclaredMethod("setHttpProxy", setHttpProxyParams); setHttpProxy.setAccessible(true); //get ProxyProperties constructor Class[] proxyPropertiesCtorParamTypes = new Class[3]; proxyPropertiesCtorParamTypes[0] = String.class; proxyPropertiesCtorParamTypes[1] = int.class; proxyPropertiesCtorParamTypes[2] = String.class; Constructor proxyPropertiesCtor = proxyPropertiesClass.getConstructor(proxyPropertiesCtorParamTypes); //create the parameters for the constructor Object[] proxyPropertiesCtorParams = new Object[3]; proxyPropertiesCtorParams[0] = ip; proxyPropertiesCtorParams[1] = port; proxyPropertiesCtorParams[2] = null; //create a new object using the params Object proxySettings = proxyPropertiesCtor.newInstance(proxyPropertiesCtorParams); //pass the new object to setHttpProxy Object[] params = new Object[1]; params[0] = proxySettings; setHttpProxy.invoke(linkProperties, params); setProxySettings("STATIC", config); //save the settings manager.updateNetwork(config); manager.disconnect(); manager.reconnect(); } catch(Exception e) { } } public void unsetWifiProxySettings(Context context) { WifiManager manager = (WifiManager)context.getApplicationContext().getSystemService(Context.WIFI_SERVICE); WifiConfiguration config = GetCurrentWifiConfiguration(manager); if(null == config) return; try { //get the link properties from the wifi configuration Object linkProperties = getField(config, "linkProperties"); if(null == linkProperties) return; //get the setHttpProxy method for LinkProperties Class proxyPropertiesClass = Class.forName("android.net.ProxyProperties"); Class[] setHttpProxyParams = new Class[1]; setHttpProxyParams[0] = proxyPropertiesClass; Class lpClass = Class.forName("android.net.LinkProperties"); Method setHttpProxy = lpClass.getDeclaredMethod("setHttpProxy", setHttpProxyParams); setHttpProxy.setAccessible(true); //pass null as the proxy Object[] params = new Object[1]; params[0] = null; setHttpProxy.invoke(linkProperties, params); setProxySettings("NONE", config); //save the config manager.updateNetwork(config); manager.disconnect(); manager.reconnect(); } catch(Exception e) { } } }



/**

* Created by peter.li on 2017/12/13.

*/

public class HttpProxyUtilHigher {

private static HttpProxyUtilHigherinstance;

    public static HttpProxyUtilHighergetInstance() {

if(instance ==null){

instance =new HttpProxyUtilHigher();

        }

return instance;

    }

public static void setEnumField(Object obj, String value, String name)

throws SecurityException, NoSuchFieldException,IllegalArgumentException, IllegalAccessException{

Field f = obj.getClass().getField(name);

        f.set(obj, Enum.valueOf((Class) f.getType(), value));

    }

public static ObjectgetDeclaredFieldObject(Object obj, String name)

throws SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException{

Field f = obj.getClass().getDeclaredField(name);

        f.setAccessible(true);

        Object out = f.get(obj); return out;

    }

public static void setDeclardFildObject(Object obj,String name,Object object){

Field f =null;

        try {

f = obj.getClass().getDeclaredField(name);

        }catch (NoSuchFieldException e) {

e.printStackTrace();

        }

f.setAccessible(true);

        try {

f.set(obj,object);

        }catch (IllegalAccessException e) {

e.printStackTrace();

        }

}

// 获取当前的Wifi连接

    public static WifiConfigurationgetCurrentWifiConfiguration(WifiManager wifiManager) {

if (!wifiManager.isWifiEnabled())

return null;

        List configurationList = wifiManager.getConfiguredNetworks();

        WifiConfiguration configuration =null;

        int cur = wifiManager.getConnectionInfo().getNetworkId();

        // Log.d("当前wifi连接信息",wifiManager.getConnectionInfo().toString());

        for (int i =0; i < configurationList.size(); ++i) {

WifiConfiguration wifiConfiguration = configurationList.get(i);

            if (wifiConfiguration.networkId == cur)

configuration = wifiConfiguration;

        }

return configuration;

    }

/**

    * 设置代理信息 exclList是添加不用代理的网址用的

    * */

    public void setHttpPorxySetting(Context context,String host, int port, List exclList)

throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException,

            IllegalAccessException, NoSuchFieldException {

WifiManager wifiManager =(WifiManager)context.getSystemService(Context.WIFI_SERVICE);

        WifiConfiguration config =getCurrentWifiConfiguration(wifiManager);

        ProxyInfo mInfo =null;

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){

mInfo = ProxyInfo.buildDirectProxy(host,port);

        }

if (config !=null){

Class clazz = Class.forName("android.net.wifi.WifiConfiguration");

            Class parmars = Class.forName("android.net.ProxyInfo");

            Method method = clazz.getMethod("setHttpProxy",parmars);

//            Method methodGetHttpProxy = clazz.getMethod("getHttpProxy",parmars);

            method.invoke(config,mInfo);

            Object mIpConfiguration =getDeclaredFieldObject(config,"mIpConfiguration");

            setEnumField(mIpConfiguration, "STATIC", "proxySettings");

            setDeclardFildObject(config,"mIpConfiguration",mIpConfiguration);

            //save the settings

            wifiManager.updateNetwork(config);

            wifiManager.disconnect();

            wifiManager.reconnect();

            Log.i("MainAcitivity","修改之后");

        }

}

/**

    * 取消代理设置

    * */

    public void unSetHttpProxy(Context context)

throws ClassNotFoundException, InvocationTargetException, IllegalAccessException,

            NoSuchFieldException, NoSuchMethodException {

WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);

        WifiConfiguration configuration =getCurrentWifiConfiguration(wifiManager);

        ProxyInfo mInfo =null;

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){

mInfo = ProxyInfo.buildDirectProxy(null,0);

        }

if (configuration !=null){

Class clazz = Class.forName("android.net.wifi.WifiConfiguration");

            Class parmars = Class.forName("android.net.ProxyInfo");

            Method method = clazz.getMethod("setHttpProxy",parmars);

            method.invoke(configuration,mInfo);

            Object mIpConfiguration =getDeclaredFieldObject(configuration,"mIpConfiguration");

            setEnumField(mIpConfiguration, "NONE", "proxySettings");

            setDeclardFildObject(configuration,"mIpConfiguration",mIpConfiguration);

            //保存设置

            wifiManager.updateNetwork(configuration);

            wifiManager.disconnect();

            wifiManager.reconnect();

        }

}

}


权限模拟点击



if (loadPackageParam.packageName.equals("com.android.packageinstaller")) {

if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.M){

if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.N){

//7.0

                    findAndHookMethod("com.android.packageinstaller.permission.ui.handheld.GrantPermissionsViewHandlerImpl",loadPackageParam.classLoader, "createView",new XC_MethodHook() {

@Override

                        protected void afterHookedMethod(MethodHookParam param)

throws Throwable {

super.afterHookedMethod(param);

                            ViewGroup viewGroup = (ViewGroup)param.getResult();

                            LinearLayout linearLayouteanrLayout = (LinearLayout)viewGroup.getChildAt(0);

                            LinearLayout linearLayouteanrLayout2 = (LinearLayout)linearLayouteanrLayout.getChildAt(1);

                            LinearLayout buttonBarLayout = (LinearLayout)linearLayouteanrLayout2.getChildAt(1);

                            final Button btnAllow = (Button)buttonBarLayout.getChildAt(3);

//                    Log.i("Xposed", "Holk测试程序:btnAllow="+btnAllow.getText().toString());

                            new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {

@Override

                                public void run() {

Log.i("Xposed", "Holk测试程序:btnAllow111="+btnAllow.getText().toString());

                                    btnAllow.performClick();

                                }

},2000l);

                        }

});

                }else{

//6.0

                    findAndHookMethod("com.android.packageinstaller.permission.ui.GrantPermissionsDefaultViewHandler",loadPackageParam.classLoader, "createView",new XC_MethodHook() {

@Override

                        protected void afterHookedMethod(MethodHookParam param)

throws Throwable {

super.afterHookedMethod(param);

                            ViewGroup viewGroup = (ViewGroup)param.getResult();

                            LinearLayout linearLayouteanrLayout = (LinearLayout)viewGroup.getChildAt(0);

                            LinearLayout linearLayouteanrLayout2 = (LinearLayout)linearLayouteanrLayout.getChildAt(2);

//                            LinearLayout buttonBarLayout = (LinearLayout)linearLayouteanrLayout2.getChildAt(3);

                            final Button btnAllow = (Button)linearLayouteanrLayout2.getChildAt(3);

                    Log.i("Xposed", "Holk测试程序:btnAllow="+btnAllow.getText().toString());

                            new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {

@Override

                                public void run() {

Log.i("Xposed", "Holk测试程序:btnAllow111="+btnAllow.getText().toString());

                                    btnAllow.performClick();

                                }

},2000l);

                        }

});

                }

}

}

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,386评论 6 479
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,939评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,851评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,953评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,971评论 5 369
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,784评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,126评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,765评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,148评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,744评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,858评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,479评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,080评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,053评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,278评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,245评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,590评论 2 343

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,598评论 18 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,577评论 18 399
  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 1,678评论 0 9
  • ```java /* * Copyright (C) 2006 The Android Open Source P...
    mrganer阅读 1,130评论 0 50
  • Correctness AdapterViewChildren Summary: AdapterViews can...
    MarcusMa阅读 8,849评论 0 6