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

我要开发同款
匿名用户2021年09月05日
183阅读

技术信息

开源地址
https://github.com/tiann/epic
授权协议
Apache

作品详情

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);}});

功能介绍

Epic 是一个在虚拟机层面、以 Java Method 为粒度的 运行时 AOP Hook 框架。简单来说,Epic 就是 ART 上的 Dexposed(支持 Android 5.0 ~ 1...

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

评论