android native hook简介
(一)简介
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");
}
测试步骤:
- adb push hooktest /data/local/tmp
- 执行adb shell,执行cd /data/local/tmp,接下来执行chmod 777 ./hooktest
- 执行./hooktest
注意:
- 先执行puts在再调用hook,是因为linux上的延迟加载,若函数没有被调用,执行hook时可能会找不到导出函数puts而失败。
- . old_puts是函数指针,也就是说是它是一个二级指针。
32位hook测试结果截图:
64位hook测试输出截图:
代码基于Android studio 3.5集成和开发测试。
android native hook简介相关推荐
- Android Native Hook工具
前言 在目前的安卓APP测试中对于Native Hook的需求越来越大,越来越多的APP开始逐渐使用NDK来开发核心或者敏感代码逻辑.个人认为原因如下: 安全的考虑.各大APP越来越注重安全性,NDK ...
- Android Native Hook
Hook 直译过来就是"钩子"的意思,是指截获进程对某个 API 函数的调用,使得 API 的执行流程转向我们实现的代码片段,从而实现我们所需要得功能,这里的功能可以是监控.修复系 ...
- Android Native程序crash的一些定位方法简介
Android Native程序crash的一些定位方法简介 经常,避免不了,我们的代码会崩溃.如果crash在native代码上,Android会和其他Linux一样,生成一份core dump,将 ...
- Android安全 Hook技术,AndroidHook技术分析.pdf-北京理工大学信息系统及安全对抗实验中心.PDF...
AndroidHook技术分析.pdf-北京理工大学信息系统及安全对抗实验中心.PDF The name of the DepartmentBeijing Forest Studio 北京理工大学信息 ...
- android socket_盘点Android常用Hook技术
Android平台开发测试过程中,Hook技术是每个开发人员都常用的技术.可以用于绕过系统限制.修改别人发布的代码.动态化.调用隐藏API.插件化.组件化.自动化测试.沙箱等等. Hook如果要跨进程 ...
- 【Android 系统开发】 Android 系统启动流程简介
作者 : 万境绝尘 (octopus_truth@163.com) 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/3889548 ...
- Android Native crash 处理案例分享
简介:Android Native crash 处理案例分享 1. 背景 目前 mPaas[1] Android使用Crash SDK对闪退进行的处理,CrashSDK 是 Android 平台上一款 ...
- Android Native 内存泄漏系统化解决方案
导读:C++内存泄漏问题的分析.定位一直是Android平台上困扰开发人员的难题.因为地图渲染.导航等核心功能对性能要求很高,高德地图APP中存在大量的C++代码.解决这个问题对于产品质量尤为重要和关 ...
- android 动态hook,一个android动态库hook框架
oooo oooo `888 `888 oooo ooo 888 .oo. .ooooo. .ooooo. 888 oooo `88b..8P' 888P"Y88b d88' `88b d8 ...
最新文章
- win7怎么清理java缓存文件夹_Win7怎么清除浏览器缓存?清除电脑缓存的妙招
- MTK平台APP层 通过INvram获取SN号
- 18个设计精美的旅游及酒店网站案例
- codeigniter钩子的使用
- [翻译] 比较 Node.js,Python,Java,C# 和 Go 的 AWS Lambda 性能
- 鸿蒙os内测版应用名称,谁知道报名鸿蒙系统公测,应用名称怎么填的?
- 取消chrome浏览器下input和textarea的默认样式
- 外媒:特斯拉申请新商标 寻求进入餐饮业
- javaScript遍历对象
- 百度地图神奇错误--------不显示
- 集成电路那些事儿:CMOS模拟集成电路版图基础
- amos调节变量怎么画_AMOS结构方程教程,调节效应分析操作与结果的详细解读 ——【杏花开生物医药统计】...
- 数据库系统的三大范式以及BCNF范式详细讲解 (很详细,很详细,很详细)
- 解决“文件或目录损坏且无法读取”的问题
- cba篮球暂停次数和时间_CBA在比赛时,为什么有“官方暂停”?
- excel自动汇总多表格数据
- 数字集成电路:MOS管器件章(一)
- [sphinx]中文语言模型训练
- 自己写一个控制台人脸识别程序
- 机器学习篇-船长总结(hsrjdz01)
热门文章
- 视觉系统构建(三)——视觉光源
- shell脚本 重启python脚本
- eigen 列拼接_Eigen子矩阵操作
- 晚清《江南制造局记》一书中记载的英度单位究竟是什么
- CPU隔离是什么?作用是什么?
- 【二分图算法】手把手教你学会:染色法(判断二分图)、匈牙利算法(二分图的最大匹配)
- 关于“该文件夹包含名称过长且无法放入回收站”最简单有效的解决办法
- 合工大850参考书_2019合工大软件工程考研初试科目、参考书目、报录比汇总
- 机器学习算法--python--sklearn--后续神经网络
- ceph源码分析--monitor的lease机制