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

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

评论 16 您还未登录,请先 登录 后发表或查看评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:技术工厂 设计师:CSDN官方博客 返回首页

打赏作者

火龙映天

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值