小米5xposed框架有什么用
答案:1 悬赏:50 手机版
解决时间 2021-02-22 17:14
- 提问者网友:未信
- 2021-02-22 12:48
小米5xposed框架有什么用
最佳答案
- 五星知识达人网友:何以畏孤独
- 2021-02-22 13:40
dexspy是小米基于著名的xposed框架修改的新patchrom框架。这几天瞄了一下反编译的代码,做个笔记。与smali注入相比,新的机制借助xposed的hook机制可以使未来MIUI移植适配变得更简单。dexspy的java部分代码在framework_ext中,核心类是miui/dexspy/*,代码和xposed旧机制的源码还是挺类似的,不过做了一个修改:arrayOfString[0]="android.app.Activity";arrayOfString[1]="android.app.ActivityManager";arrayOfString[2]="android.app.ApplicationPackageManager";arrayOfString[3]="android.app.Dialog";arrayOfString[4]="android.app.DownloadManager$CursorTranslator";arrayOfString[5]="android.app.LoadedApk";.sHookedClassNames=arrayOfString;这个数组定义了所有需要hook的类。在初始化时,会对每个类的特定方法挂上before和after钩子:privatestaticvoidinitDexspyZygote()throwsException{for(StringclassName:sHookedClassNames){hookMethodsThroughHandler(className,getHookClassName(className));}}publicstaticvoidhookMethodsThroughHandler(StringclassName,StringhandlerClassName){Classclazz=ReflectionUtils.findClass(className,0x0);ClasshandlerClazz=ReflectionUtils.findClass(handlerClassName,0x0);Method[]methods=handlerClazz.getMethods();for(Methodmethod:methods){if((!method.getName().startsWith("before_"))&&(!method.getName().startsWith("after_"))){}MemberhookedMethod=findHookedMethod(clazz,method);hookMethod(hookedMethod,MethodHookTemplate.sInstance);}}然而每个类都可能有n多方法,dexspy怎么知道要hook哪些呢?framework_ext反编译出来后,可以看到很多Injector.java文件,比如android/app/Injector.java放的就是前面那些android.app.*的钩子:staticclassActivityHook{privatestaticfinalStringTAG="Activity";publicstaticvoidafter_onCreate(MethodHook.MethodHookParamparamMethodHookParam,BundleparamBundle){ActivitylocalActivity=(Activity)paramMethodHookParam.thisObject;if((UiUtils.isV5Ui(localActivity))&&(UiUtils.resolveAttribute(localActivity,16842926)==101515270))localActivity.getWindow().setGravity(80);}publicstaticvoidafter_onOptionsItemSelected(MethodHook.MethodHookParamparamMethodHookParam,MenuItemparamMenuItem){ActivitylocalActivity=(Activity)paramMethodHookParam.thisObject;if((UiUtils.isV5Ui(localActivity))&&(paramMenuItem.getItemId()==16908332)){localActivity.finish();paramMethodHookParam.setResult(Boolean.valueOf(true));}}比如这个就是android.app.Activity类的钩子了,里面hook了onCreate(),onOptionsItemSelected()等方法。dexspy加载时会对扫描这些Injector,将相应方法的before和after钩子挂上。跟xposed主要的区别就在这里,好处就是以后这套框架如果开放了,模块编写自己的Injector类就能方便实现挂钩。当然现在的xposed也挺方便,但代码没这么直观清晰就是了。另外就是dexspy是基于旧xposed的,效率不如目前版本的xposed,尤其hook很多时效率会比较糟糕,估计未来会对dexspy做一次升级吧。网上找的。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯