android native hook简介

这篇具有很好参考价值的文章主要介绍了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");
}

测试步骤:

  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测试结果截图:
android native hook简介
64位hook测试输出截图:

android native hook简介

代码基于Android studio 3.5集成和开发测试。文章来源地址https://www.toymoban.com/news/detail-502463.html

到了这里,关于android native hook简介的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android OpenGL 教程——Native 工程初始化

    NDK 的适用场景官方给出三点: 平台间的 App 移植 复用现有库 对软件性能要求较高的场合比如游戏等 有两种方式可以实现 native activity。 native_activity.h android_native_app_glue 由于第二种方法启用另一个线程处理回调和输入事件,NDK 的例子中就采用了这个实现方式。       NDK 工程

    2024年02月16日
    浏览(39)
  • Android Native Code开发学习(二)JNI互相传参返回调用

    本教程为native code学习笔记,希望能够帮到有需要的人 我的电脑系统为ubuntu 22.04,当然windows也是可以的,区别不大 native code就是在android项目中混合C++或者C语言进行开发,这样的好处是很多底层的东西需要使用C++/C的语言进行操作,而且在android开发中,使用C++和C混合开发能够

    2024年02月11日
    浏览(39)
  • ​第20课 在Android Native开发中加入新的C++类

    ​这节课我们开始利用ffmpeg和opencv在Android环境下来实现一个rtmp播放器,与第2课在PC端实现播放器的思路类似,只不过在处理音视频显示和播放的细节略有不同。 1.压缩备份上节课工程文件夹并修改工程文件夹为demo20,将demo20导入到Eclipse或者在原工程上继续下列的开发步骤。

    2024年01月25日
    浏览(43)
  • Android使用WebView与Native交互的三种方式 ( 附源码 )

    javascript.html: jsToAndroid.html jsToAndroid2.html 1.JS与Native的交互 一.Android调用JS的方法 目前学习了俩种方法:1. 调用webview的loadUrl 2.调用webview的evaluateJavascript 方法说明: 1. webView.loadUrl(“javascript:callJS()”); 参数是一个字符串,说明调用了javascript中的 callJS方法 webview.evaluateJavascript(

    2024年02月11日
    浏览(60)
  • 使用Xposed对native进行hook

    Xposed框架可谓是“家喻户晓”的神器,它具有着frida所不具备的持久性(虽然frida也可以通过frida-gadget实现持久化,但没有Xposed使用方便)。当我们需要hook java层的代码时,Xposed使用起来得心应手,但是随着软件开发者的安全意识越来越高,放在java层的核心代码也就越来少,这就

    2024年02月02日
    浏览(34)
  • Android 内存分析(java/native heap内存、虚拟内存、处理器内存 )

    1.jvm 堆内存(dalvik 堆内存) 不同手机中app进程的 jvm 堆内存是不同的,因厂商在出厂设备时会自定义设置其峰值。比如,在Android Studio 创建模拟器时,会设置 jvm heap 默认384m , 如下图所示: 当app 进程中java 层 new 对象(加起来总和)占用的堆内存达到jvm heap 峰值时,就会抛出OOM 。

    2024年02月14日
    浏览(50)
  • Android TextView动态地加载资源文件,避免Native 层内存泄漏或内存溢出

    在 Android 中,如果使用 TextView 的 setBackgroundResource() 方法设置背景,可能会导致 Native 层内存增长。这是因为 setBackgroundResource() 方法会将资源文件(例如图片)加载到内存中,如果频繁地调用该方法,就会导致内存泄漏或内存溢出。 为了避免这种问题,可以使用 TextView 的 s

    2024年02月09日
    浏览(45)
  • 【React Native】运行Android时发生Required for building and installing your app on Android

    Android SDK - Required for building and installing your app on Android Versions found: N/A Version supported: 33.0.0 查看gradle-wrapper.properties内的gradle版本是否存在 可以配置为本地路径 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists distributionUrl=file:///D:/Deve

    2024年02月03日
    浏览(63)
  • 【Android】 频繁刷新 RecyclerView导致View 对象引用过多引起的Native 内存占用过大解决办法

    在 RecyclerView 中,如果频繁刷新 RecyclerView,可能会导致 Native 内存中有大量的 TextView 对象,从而导致内存占用过多的问题。以下是一些可能导致该问题的原因和解决方法: 使用 ViewHolder 在 RecyclerView 中,使用 ViewHolder 可以避免频繁创建和销毁 View 对象,从而减少内存占用。可

    2024年02月08日
    浏览(83)
  • react native android环境搭建,使用夜神模拟器进行开发(适用于0.73+版本)

    前言 本文基于:“react-native” : “^0.73.0” 1.安装 Node Node.js,下载时选择 = 18 版本 2.下载并安装 JDK Java SE Development Kit (JDK),下载时选择 17 版本 安装 验证是否安装成功 打开命令提示符输入 javac -version 回车 3.安装 Android Studio 下载并安装 Android Studio ,获取编译 Android 应用所需

    2024年01月23日
    浏览(68)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包