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

Android中的hook框架:epic简介相关推荐

  1. Android 进阶 教你打造 Android 中的 IOC 框架 【ViewInject】 (下)

    上一篇博客我们已经带大家简单的吹了一下IoC,实现了Activity中View的布局以及控件的注入,如果你不了解,请参考:Android 进阶 教你打造 Android 中的 IOC 框架 [View ...

  2. android hook 实例,代码实例分析android中inline hook

    以下内容通过1.实现目标注入程序,2.实现主程序,3.实现注入函数,4.thumb指令集实现等4个方面详细分析了android中inline hook的用法,以下是全部内容: 最近终于沉下心来对着书把 ...

  3. android中使用tmf框架插件化开发的问题

    android中使用tmf框架插件化开发的问题 最近项目开发使用的是tmf框架,其中大多数都是通过源生和H5交互的方式来实现的,大体实现和别的三方框架是一样的,需要按照tmf的官方文档引入一些lib和 ...

  4. 每天学习一个Android中的常用框架——0.目录

    文章目录 1.前言 2.环境 3.目录 3.1 持久化 3.1.1 Litepal 3.1.2 GreenDao 3.1.3 Realm 3.1.4 DBFlow 3.2 网络传输 3.2.1 OkH ...

  5. Android 中的ORM框架

    在android 中,内置了sqlite数据库,java web 中,用惯了Hibernate ,想找找android中是否也有类似的orm框架,后来在开源中国看到了orman,这是一个很不错的框架. ...

  6. android hook红包接口,Xposed框架实现Android中的Hook

    Hook.jpg 前几天受高人指点意外发现了开启Android世界的新大陆,就是这个叫Hook(''钩子'')的东西.听起来很神奇,周末抽时间研究了一番,发现确实是一个值得去研究的技术. 什么是 Ho ...

  7. android中volley通信框架简介

    1. 什么是Volley? 在这之前,我们在程序中需要和网络通信的时候,大体使用的东西莫过于AsyncTaskLoader,HttpURLConnection,AsyncTask,HTTPClient ...

  8. 【Android 逆向】substrate 框架 ( substrate 简介 | substrate 相关文档资料 )

    文章目录 一.substrate 简介 二.substrate 相关文档资料 一.substrate 简介 substrate 官网 : http://www.cydiasubstrate.com s ...

  9. Android平台下hook框架adbi的研究(下)

    上篇中,我大致介绍了一下如何将一个dlopen()的调用插入到指定进程的执行序列中去. 但是,光插入这个没用,还没有具体解决如何hook进程中指定函数的问题.这个任务就要交给dlopen()函数加载进 ...

最新文章

  1. nopi 的使用记录
  2. 从输入 URL 到页面加载完成的过程中都发生了什么
  3. Ext分区文件恢复工具extundelete
  4. 前端性能测试详细分析(二)
  5. golang基础-chan的select操作、定时器操作、超时控制、goroutine中使用recover
  6. 详解ISA2006三种客户端
  7. CentOS服务器上部署 oracle10gr2
  8. 水滴石穿C语言之指针、数组和函数
  9. Qt学习笔记-OpenGL做正方体并旋转
  10. OJ1000: A+B Problem
  11. python字符串_python的字符串怎么拼接
  12. 网页下载CAB文件总结
  13. “我很迷茫很焦虑,需要你的建议”|她在百度内网发了个求助帖
  14. python_激光点云变换到图像平面
  15. 安装PyTorch详细过程
  16. android 如何编译.so,Android源码中编译自己的so库
  17. 【C语言题解】将数字金额翻译成中文大写金额
  18. 工控系统 SCADA(监控和数据采集)系统简介
  19. C++中string类下的begin,end,rbegin,rend的用法
  20. Android性能优化系列之Bitmap图片优化

热门文章

  1. 在ubuntu上绑定USB接口的两种方式
  2. PHP中虚拟主机的配置
  3. 无线模块 编程开发的讨论
  4. 12-Go语言接口interface
  5. 在线flash文本的抓取方法
  6. 魔兽地图编辑器插件 YDWE 触发器函数转化成jass代码 以及转化为自定义文本后重新转化为触发器函数
  7. JavaScript代码 在项目中高效、快速开发
  8. 每日一练--IT冷知识C/C++--第八天
  9. Docker 与 K8S学习笔记(十八)—— Pod的使用
  10. 关于康托展开和逆康托展开详解,及python代码