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