当前位置: 首页 > 软件库 > 手机/移动开发 > >

Epic-Android

Android 的动态 Java AOP Hook 框架
授权协议 Apache
开发语言 Java
所属分类 手机/移动开发
软件类型 开源软件
地区 国产
投 递 者 江承嗣
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

Epic 是一个在虚拟机层面、以 Java Method 为粒度的 运行时 AOP Hook 框架。简单来说,Epic 就是 ART 上的 Dexposed(支持 Android 5.0 ~ 11)。它可以拦截本进程内部几乎任意的 Java 方法调用,可用于实现 AOP 编程、运行时插桩、性能分析、安全审计等。

支持情况

目前 Epic 支持 Android 5.0 ~ 11 的 Thumb-2/ARM64 指令集,arm32/x86/x86_64/mips/mips64 不支持。本项目被 VirtualXposed 和 太极 以及大量企业级用户使用,经过了数千万用户的验证,已经被证明非常稳定。目前,手机 QQ 已经在产品中使用 Epic。

示例

  1. 监控 Java 线程的创建和销毁:
class ThreadMethodHook extends XC_MethodHook{
    @Override
    protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
        super.beforeHookedMethod(param);
        Thread t = (Thread) param.thisObject;
        Log.i(TAG, "thread:" + t + ", started..");
    }

    @Override
    protected void afterHookedMethod(MethodHookParam param) throws Throwable {
        super.afterHookedMethod(param);
        Thread t = (Thread) param.thisObject;
        Log.i(TAG, "thread:" + t + ", exit..");
    }
}

DexposedBridge.hookAllConstructors(Thread.class, new XC_MethodHook() {
    @Override
    protected void afterHookedMethod(MethodHookParam param) throws Throwable {
        super.afterHookedMethod(param);
        Thread thread = (Thread) param.thisObject;
        Class<?> clazz = thread.getClass();
        if (clazz != Thread.class) {
            Log.d(TAG, "found class extend Thread:" + clazz);
            DexposedBridge.findAndHookMethod(clazz, "run", new ThreadMethodHook());
        }
        Log.d(TAG, "Thread: " + thread.getName() + " class:" + thread.getClass() +  " is created.");
    }
});
DexposedBridge.findAndHookMethod(Thread.class, "run", new ThreadMethodHook());

以上代码拦截了 Thread 类以及 Thread 类所有子类的 run方法,在 run 方法开始执行和退出的时候进行拦截,就可以知道进程内部所有 Java 线程创建和销毁的时机;

  1. 监控 dex 文件的加载:
DexposedBridge.findAndHookMethod(DexFile.class, "loadDex", String.class, String.class, int.class, new XC_MethodHook() {
    @Override
    protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
        super.beforeHookedMethod(param);
        String dex = (String) param.args[0];
        String odex = (String) param.args[1];
        Log.i(TAG, "load dex, input:" + dex + ", output:" + odex);
    }
});
  • epic是weishu大神开源的一个Hook框架,支持ART上的Java方法HOOK。 本文走马观花一下。 epic相当于ART上的Dexposed,所以也是Xposed-Style Method Hook。 从DexposedBridge.findAndHookMethod开始跟踪代码: 取出最后一个参数callback,然后调用XposedHelpers.findMethodExact得到想要

  • 前言 博主 分享有关 android 面试容易被问到的问题 从上到下 一个一个去回答 可以检测自己的实力水平 也可以学习补不足! 共勉 1.Android相关的知识 1.Activity 1.Activity的启动流程 2.onSaveInstanceState(),onRestoreInstanceState的掉用时机 3.activity的启动模式和使用场景 4.Activity A跳转Act

  • 简介 exposed 致力于为App提供 Xposed 运行环境。基本思路是劫持APP进程启动的入口,加载 Xposed 插件以及 hook框架 epic 。 exposed本质上是一个 Xposed 与 APP进程 之间的兼容层,它给Xposed模块提供运行环境(如插件加载、hook环境等)。 目前使用最广泛的实现是 VirtualXposed,它使用 VirtualApp 来运行APP并提供进

  • Github地址:https://github.com/coder-pig/Android-Storage-Box title: Android-Skillful-Craftsman(Android能工巧匠)  categories: AndroidPocket  tags: AndroidPocket 本文声明: 本文的内容整理自网络,本着知识交流分享的原则,请勿用于商业用途,  对于引用的部分

  • 启动, 打开APP的必经之路, 第一体验,关系到用户留存和转化率等核心数据; 启动分析 启动类型 Android Vitals可以对应用冷,热,温启动时间做监控。 通过adb shell am start -W ... 命令执行启动并打印启动耗时信息,下面的启动监控中会详细讲解 1. 冷启动 应用从头开始启动,系统进程在冷启动后才创建应用进程 启动流程:Click Event -> IPC ->

  • epic是Android中的一个开源的hook框架,目前最新版本是:0.11.2,项目地址:https://github.com/tiann/epic。 epic框架的优点有: 1.可以hook普通方法、构造方法、系统方法。 2.手机系统无需root。 集成方式如下: 1.在项目主module的build.gradle中添加依赖: implementation 'com.github.tiann:

  • 第一步 在根目录下的build.gradle里添加: allprojects { repositories { ... maven { url 'https://jitpack.io' } } } 第二步 在项目主module的build.gradle中添加依赖: implementation 'com.github.tiann:epic:0.11

 相关资料
  • EPIC是一个开源的Perl开发工具.支持语法高亮显示,快速语法检查,内容帮助,perldoc支持,源码格式,模板支持和一个Perl调试器.

  • Epic Browser 是一款基于 Firefox 的印度语的浏览器,具有反病毒功能的浏览器。

  • 本文向大家介绍实例详解BootStrap的动态模态框及静态模态框,包括了实例详解BootStrap的动态模态框及静态模态框的使用技巧和注意事项,需要的朋友参考一下 1.要用bootStrap这个框架就必须要重载它的class类,也就是说class要一样 代码如下: 有疑问的可以在下面留言,欢迎大家一起交流 1.1动态模态框 1.2静态模态框 总结 以上所述是小编给大家介绍的BootStrap的动态

  • 我不得不承认,随着iOS8的发布,我对iOS中的动态和静态框架有点困惑。 我正在寻找一种方法来分发我创建的库,我需要支持iOS7和更高版本。(注意:这将是一个专有的框架。我不能使用可可荚,我也不能分发源代码)。下面是我已经知道的: iOS 8为iOS引入了“嵌入式框架”,但据我所知,它们不适用于iOS 7,仅适用于iOS 8及以上版本。 我可以选择将我的库作为静态库(.a文件)分发,还可以分发头。

  • 主要内容:史诗的工作Jira史诗(Epic)是一个大型用户故事,根据客户或最终用户需求分解为较小的任务(用户故事)。 根据客户需求,根据需要在史诗中添加或删除任务。 Epic用于组织工作和创建层次结构。 Epic通过将更大的任务组织成更小的任务来保持敏捷性。 Epic是工作层次结构的顶层,开发人员使用它。 Epic是更大的故事,具有明显的开始和结束。 Epic可以跨越多个冲刺,即,史诗是通过多个冲刺传递的。 Epic

  • 问题内容: 我是php的新手,我想根据从MySQL获取的结果动态创建复选框。如果我在employee表中有10条记录,那么它必须创建10个以员工姓名作为value的复选框。我看过几本教程来制作数组复选框等,但无法解决问题。请那里的任何人帮助!!! 问题答案: 试试看: 上面看到的示例依赖于两点才能真正正常运行: 您正在使用MySQL 您的SQL查询必须检索员工的姓名(以便您可以在循环中使用它们