Android中的hook框架:epic简介

本文介绍了Epic框架,一个用于Android的开源hook工具,版本0.11.2,支持hook普通方法和构造方法,无需root。演示了如何集成并安全地hook系统方法,特别强调了依赖库文件和异常处理的重要性。
摘要由CSDN通过智能技术生成

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方法中调用如下逻辑:

import de.robv.android.xposed.DexposedBridge;
import de.robv.android.xposed.XC_MethodHook;

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无法捕获的问题,那就没法解决了,这一点要注意。

评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值