Epic-Android Android 的动态 Java AOP Hook 框架开源项目

我要开发同款
匿名用户2021年09月05日
43阅读
开发技术Java
所属分类手机/移动开发
授权协议Apache

作品详情

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);}});
声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论