栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Android中的hook框架:epic简介

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Android中的hook框架:epic简介

epic是Android中的一个开源的hook框架,目前最新版本是:0.11.2,项目地址:https://github.com/tiann/epic。

epic框架的优点有:
1.可以hook普通方法、构造方法、系统方法。
2.手机系统无需root。

集成方式如下:
1.在项目主module的build.gradle中添加依赖:
implementation 'com.github.tiann:epic:0.11.2'
2.如果需要在app启动时就开始hook,请在Application的onCreate方法中调用如下逻辑:

private void startHook() {
    XC_MethodHook hook = new XC_MethodHook() {
        @Override
        protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
            super.beforeHookedMethod(param);
            Object hookObj = param.thisObject;
            String clsName = "unknownClass";
            if (hookObj != null) {
                clsName = hookObj.getClass().getName();
            }
            String mdName = "unknownMethod";
            if (param.method != null) {
                mdName = param.method.getName();
            }
            Log.d(TAG, "beforeHookedMethod: " + clsName + "-" + mdName);
        }

        @Override
        protected void afterHookedMethod(MethodHookParam param) throws Throwable {
            super.beforeHookedMethod(param);
            Object hookObj = param.thisObject;
            String clsName = "unknownClass";
            if (hookObj != null) {
                clsName = hookObj.getClass().getName();
            }
            String mdName = "unknownMethod";
            if (param.method != null) {
                mdName = param.method.getName();
            }
            Log.d(TAG, "afterHookedMethod: " + clsName + "-" + mdName);
        }
    };
    try {
        // hook系统方法
        DexposedBridge.hookAllMethods(BluetoothLeScanner.class, "startScan", hook);
        // hook系统方法
        DexposedBridge.hookAllMethods(Thread.class, "run", hook);
        // hook构造方法
        DexposedBridge.hookAllConstructors(Thread.class, hook);
    } catch (Throwable t) {
        t.printStackTrace();
    }
}

注:
1.要使用epic的hook功能,需要依赖libepic.so库文件。但此库文件不支持默认cpu架构:armeabi。如果app仅支持armeabi架构的话,需要在编译时将armeabi-v7a架构的库文件打包入app中。否则app运行会因为找不到库文件而崩溃。
2.在hook方法时,尤其是hook系统方法时,非常有必要加try、catch Throwable异常捕获。因为可能会遇到在hook时由于访问权限等问题而导致抛出异常,进而崩溃。而即使加上异常捕获,有时也会遇到直接在native层出现异常,try、catch无法捕获的问题,那就没法解决了,这一点要注意。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/667605.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号