Android逆向之利用Xposed绕过悬浮窗权限

来源:互联网 发布:系统重装软件哪个好 编辑:程序博客网 时间:2024/06/02 16:52

实现代码

//需在init中hook    public void hook(IXposedHookZygoteInit.StartupParam startupParam) {            // TODO: Implement this method            Log.d("hookSysApi","hook checkAddPermission start");//hook 最终的权限检查方法:checkAddPermission              try{             XposedBridge.hookAllMethods(XposedHelpers.findClass("com.android.internal.policy.impl.PhoneWindowManager",this.getClass().getClassLoader()),"checkAddPermission",new XC_MethodHook(){                    public void beforeHookedMethod(XC_MethodHook.MethodHookParam param){                        if(param.args[0] instanceof WindowManager.LayoutParams){                            WindowManager.LayoutParams params=(WindowManager.LayoutParams)param.args[0];                            if(params.type==WindowManager.LayoutParams.TYPE_SYSTEM_ERROR){                                param.setResult(0);//当检测到是系统错误对话框时,返回0,即ok!                            }                        }                    }                });            }catch(Throwable t){                Log.d("hookSysApi",Log.getStackTraceString(t));            }            Log.d("hookSysApi","hook checkAddPermission end");    }

显示悬浮窗代码

mWindowManager = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);        mParams = new WindowManager.LayoutParams();        // 设置显示位置        mParams.width = LayoutParams.WRAP_CONTENT;        mParams.height = LayoutParams.WRAP_CONTENT;        mParams.y =windowY;        mParams.x=windowX;        mParams.gravity = Gravity.TOP;        mParams.flags =WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL|WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;        mParams.format=PixelFormat.RGBA_8888;        mParams.type=WindowManager.LayoutParams.TYPE_SYSTEM_ERROR;//这里设置成系统级对话框

参考文章

1.Android 悬浮窗权限各机型各系统适配大全(总结)

阅读全文
0 0