Epic是一个在虚拟机层面、以JavaMethod为粒度的 运行时 AOPHook框架。简单来说,Epic就是ART上的 Dexposed(支持Adroid5.0~11)。它可以拦截本进程内部几乎任意的Java方法调用,可用于实现AOP编程、运行时插桩、性能分析、安全审计等。
支持情况
目前Epic支持Adroid5.0~11的Thumb-2/ARM64指令集,arm32/x86/x86_64/mips/mips64不支持。本项目被 VirtualXposed 和 太极 以及大量企业级用户使用,经过了数千万用户的验证,已经被证明非常稳定。目前,手机QQ已经在产品中使用Epic。
示例
监控Java线程的创建和销毁:classThreadMethodHookextedsXC_MethodHook{@OverrideprotectedvoidbeforeHookedMethod(MethodHookParamparam)throwsThrowable{super.beforeHookedMethod(param);Threadt=(Thread)param.thisObject;Log.i(TAG,"thread:"+t+",started..");}@OverrideprotectedvoidafterHookedMethod(MethodHookParamparam)throwsThrowable{super.afterHookedMethod(param);Threadt=(Thread)param.thisObject;Log.i(TAG,"thread:"+t+",exit..");}}DexposedBridge.hookAllCostructors(Thread.class,ewXC_MethodHook(){@OverrideprotectedvoidafterHookedMethod(MethodHookParamparam)throwsThrowable{super.afterHookedMethod(param);Threadthread=(Thread)param.thisObject;Class<?>clazz=thread.getClass();if(clazz!=Thread.class){Log.d(TAG,"foudclassextedThread:"+clazz);DexposedBridge.fidAdHookMethod(clazz,"ru",ewThreadMethodHook());}Log.d(TAG,"Thread:"+thread.getName()+"class:"+thread.getClass()+"iscreated.");}});DexposedBridge.fidAdHookMethod(Thread.class,"ru",ewThreadMethodHook());以上代码拦截了 Thread 类以及 Thread 类所有子类的 ru方法,在 ru 方法开始执行和退出的时候进行拦截,就可以知道进程内部所有Java线程创建和销毁的时机;
监控dex文件的加载:DexposedBridge.fidAdHookMethod(DexFile.class,"loadDex",Strig.class,Strig.class,it.class,ewXC_MethodHook(){@OverrideprotectedvoidbeforeHookedMethod(MethodHookParamparam)throwsThrowable{super.beforeHookedMethod(param);Strigdex=(Strig)param.args[0];Strigodex=(Strig)param.args[1];Log.i(TAG,"loaddex,iput:"+dex+",output:"+odex);}});






评论