(一)简介

Android中的 Native Hook是一个非常吸引人的技术节点,诱使开发人员产生绚烂多彩的想法,并带来精彩的体验。在软件调试、逆向、安全等场景中得到采用,各大知名软件公司如byte dance、baidu、tencent等都有自己的开源注入和hook项目。

本文代码来自github,只做了适当的剪裁和优化,主要是为了验证和测试,源代码的技术基本未有改动。

具体的技术细节,本文不做阐述,有兴趣和想法的人自己动手验证吧。

有想法的人和行动派总是在实践中找到自我和快感,因此,armeabi-v7a和arm64-v8a架构相关的指令架构和hook技术细节,请自行探讨。

工程代码下载地址:点击下载

(二)测试

64位hooktest测试源码:

#include <stdio.h>#include "And64InlineHook.h"typedef int (*ptr_old_puts)(const char *);ptr_old_puts old_puts = 0;int new_puts(const char *string)
{return old_puts("inlineHook success");
}int hook()
{A64HookFunction((void*const)puts,(void*const)new_puts,(void **)&old_puts);return 0;
}int main()
{puts("test");hook();puts("test");return 0;
}

32位hooktest测试代码:

#include <stdio.h>
#include <errno.h>#include "inlineHook.h"int (*old_puts)(const char *) = NULL;int new_puts(const char *string)
{return old_puts("inlineHook 32 success");
}int hook()
{if (registerInlineHook((uint32_t) puts, (uint32_t) new_puts, (uint32_t **) &old_puts) != ELE7EN_OK) {printf("registerInlineHook error:%d\r\n",errno);return -1;}if (inlineHook((uint32_t) puts) != ELE7EN_OK) {printf("inlineHook error:%d\r\n",errno);return -1;}printf("hook ok\r\n");return 0;
}int unHook()
{if (inlineUnHook((uint32_t) puts) != ELE7EN_OK) {printf("inlineUnHook error:%d\r\n",errno);return -1;}return 0;
}int main()
{puts("test0");getchar();hook();puts("test1");getchar();unHook();puts("test2");
}

测试步骤:

  1. adb push hooktest /data/local/tmp
  2. 执行adb shell,执行cd /data/local/tmp,接下来执行chmod 777 ./hooktest
  3. 执行./hooktest

注意:

  1. 先执行puts在再调用hook,是因为linux上的延迟加载,若函数没有被调用,执行hook时可能会找不到导出函数puts而失败。
  2. . old_puts是函数指针,也就是说是它是一个二级指针。

32位hook测试结果截图:

64位hook测试输出截图:

代码基于Android studio 3.5集成和开发测试。

android native hook简介相关推荐

  1. Android Native Hook工具

    前言 在目前的安卓APP测试中对于Native Hook的需求越来越大,越来越多的APP开始逐渐使用NDK来开发核心或者敏感代码逻辑.个人认为原因如下: 安全的考虑.各大APP越来越注重安全性,NDK ...

  2. Android Native Hook

    Hook 直译过来就是"钩子"的意思,是指截获进程对某个 API 函数的调用,使得 API 的执行流程转向我们实现的代码片段,从而实现我们所需要得功能,这里的功能可以是监控.修复系 ...

  3. Android Native程序crash的一些定位方法简介

    Android Native程序crash的一些定位方法简介 经常,避免不了,我们的代码会崩溃.如果crash在native代码上,Android会和其他Linux一样,生成一份core dump,将 ...

  4. Android安全 Hook技术,AndroidHook技术分析.pdf-北京理工大学信息系统及安全对抗实验中心.PDF...

    AndroidHook技术分析.pdf-北京理工大学信息系统及安全对抗实验中心.PDF The name of the DepartmentBeijing Forest Studio 北京理工大学信息 ...

  5. android socket_盘点Android常用Hook技术

    Android平台开发测试过程中,Hook技术是每个开发人员都常用的技术.可以用于绕过系统限制.修改别人发布的代码.动态化.调用隐藏API.插件化.组件化.自动化测试.沙箱等等. Hook如果要跨进程 ...

  6. 【Android 系统开发】 Android 系统启动流程简介

    作者 : 万境绝尘 (octopus_truth@163.com) 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/3889548 ...

  7. Android Native crash 处理案例分享

    简介:Android Native crash 处理案例分享 1. 背景 目前 mPaas[1] Android使用Crash SDK对闪退进行的处理,CrashSDK 是 Android 平台上一款 ...

  8. Android Native 内存泄漏系统化解决方案

    导读:C++内存泄漏问题的分析.定位一直是Android平台上困扰开发人员的难题.因为地图渲染.导航等核心功能对性能要求很高,高德地图APP中存在大量的C++代码.解决这个问题对于产品质量尤为重要和关 ...

  9. android 动态hook,一个android动态库hook框架

    oooo oooo `888 `888 oooo ooo 888 .oo. .ooooo. .ooooo. 888 oooo `88b..8P' 888P"Y88b d88' `88b d8 ...

最新文章

  1. win7怎么清理java缓存文件夹_Win7怎么清除浏览器缓存?清除电脑缓存的妙招
  2. MTK平台APP层 通过INvram获取SN号
  3. 18个设计精美的旅游及酒店网站案例
  4. codeigniter钩子的使用
  5. [翻译] 比较 Node.js,Python,Java,C# 和 Go 的 AWS Lambda 性能
  6. 鸿蒙os内测版应用名称,谁知道报名鸿蒙系统公测,应用名称怎么填的?
  7. 取消chrome浏览器下input和textarea的默认样式
  8. 外媒:特斯拉申请新商标 寻求进入餐饮业
  9. javaScript遍历对象
  10. 百度地图神奇错误--------不显示
  11. 集成电路那些事儿:CMOS模拟集成电路版图基础
  12. amos调节变量怎么画_AMOS结构方程教程,调节效应分析操作与结果的详细解读 ——【杏花开生物医药统计】...
  13. 数据库系统的三大范式以及BCNF范式详细讲解 (很详细,很详细,很详细)
  14. 解决“文件或目录损坏且无法读取”的问题
  15. cba篮球暂停次数和时间_CBA在比赛时,为什么有“官方暂停”?
  16. excel自动汇总多表格数据
  17. 数字集成电路:MOS管器件章(一)
  18. [sphinx]中文语言模型训练
  19. 自己写一个控制台人脸识别程序
  20. 机器学习篇-船长总结(hsrjdz01)

热门文章

  1. 视觉系统构建(三)——视觉光源
  2. shell脚本 重启python脚本
  3. eigen 列拼接_Eigen子矩阵操作
  4. 晚清《江南制造局记》一书中记载的英度单位究竟是什么
  5. CPU隔离是什么?作用是什么?
  6. 【二分图算法】手把手教你学会:染色法(判断二分图)、匈牙利算法(二分图的最大匹配)
  7. 关于“该文件夹包含名称过长且无法放入回收站”最简单有效的解决办法
  8. 合工大850参考书_2019合工大软件工程考研初试科目、参考书目、报录比汇总
  9. 机器学习算法--python--sklearn--后续神经网络
  10. ceph源码分析--monitor的lease机制