Native开发与逆向第四篇 - hook JNI函数GetStringUTFChars

2024-08-31 15:28

本文主要是介绍Native开发与逆向第四篇 - hook JNI函数GetStringUTFChars,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

修改测试demo
通过GetStringUTFChars 获取java层传入的字符串参数。

extern "C" JNIEXPORT jstring JNICALL
Java_com_mycode_nativehello_MainActivity_stringFromJNI(JNIEnv* env,jobject /* this */,jstring s) {std::string hello = env->GetStringUTFChars(s, 0);return env->NewStringUTF(hello.c_str());
}

目标hook GetStringUTFChars 打印字符串。
hook 代码如下:

function hook_jni_3(){var symbols = Process.getModuleByName("libart.so").enumerateSymbols();var addr_GetStringUTFChars = NULL;for (var index = 0; index < symbols.length; index++) {const symbols_one = symbols[index];if (symbols_one.name.indexOf("art") >= 0){if (symbols_one.name.indexOf("checkJNI") == -1 && symbols_one.name.indexOf("GetStringUTFChars")>= 0){console.log("GetStringUTFChars ",JSON.stringify(symbols_one));addr_GetStringUTFChars = symbols_one.address;console.log("GetStringUTFChars address = " + addr_GetStringUTFChars); break}}    }Interceptor.attach(addr_GetStringUTFChars,{onEnter:function(args){var env = args[0];var param1 = args[1];console.log("env :",env,"param1 ", Java.vm.getEnv().getStringUtfChars(param1, null).readCString());},onLeave:function (retval) {console.log("GetStringUTFChars retval :", ptr(retval).readCString());}})
}
setImmediate(hook_jni_3);

运行打印结果:参数和返回值都正常打印出字符串。
env : 0x7d44041250 param1 Hello stringFromJNI
GetStringUTFChars retval : Hello stringFromJNI

这篇关于Native开发与逆向第四篇 - hook JNI函数GetStringUTFChars的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1124284

相关文章

Python中的filter() 函数的工作原理及应用技巧

《Python中的filter()函数的工作原理及应用技巧》Python的filter()函数用于筛选序列元素,返回迭代器,适合函数式编程,相比列表推导式,内存更优,尤其适用于大数据集,结合lamb... 目录前言一、基本概念基本语法二、使用方式1. 使用 lambda 函数2. 使用普通函数3. 使用 N

MySQL中REPLACE函数与语句举例详解

《MySQL中REPLACE函数与语句举例详解》在MySQL中REPLACE函数是一个用于处理字符串的强大工具,它的主要功能是替换字符串中的某些子字符串,:本文主要介绍MySQL中REPLACE函... 目录一、REPLACE()函数语法:参数说明:功能说明:示例:二、REPLACE INTO语句语法:参数

python中update()函数的用法和一些例子

《python中update()函数的用法和一些例子》update()方法是字典对象的方法,用于将一个字典中的键值对更新到另一个字典中,:本文主要介绍python中update()函数的用法和一些... 目录前言用法注意事项示例示例 1: 使用另一个字典来更新示例 2: 使用可迭代对象来更新示例 3: 使用

Python开发简易网络服务器的示例详解(新手入门)

《Python开发简易网络服务器的示例详解(新手入门)》网络服务器是互联网基础设施的核心组件,它本质上是一个持续运行的程序,负责监听特定端口,本文将使用Python开发一个简单的网络服务器,感兴趣的小... 目录网络服务器基础概念python内置服务器模块1. HTTP服务器模块2. Socket服务器模块

Python lambda函数(匿名函数)、参数类型与递归全解析

《Pythonlambda函数(匿名函数)、参数类型与递归全解析》本文详解Python中lambda匿名函数、灵活参数类型和递归函数三大进阶特性,分别介绍其定义、应用场景及注意事项,助力编写简洁高效... 目录一、lambda 匿名函数:简洁的单行函数1. lambda 的定义与基本用法2. lambda

Java 与 LibreOffice 集成开发指南(环境搭建及代码示例)

《Java与LibreOffice集成开发指南(环境搭建及代码示例)》本文介绍Java与LibreOffice的集成方法,涵盖环境配置、API调用、文档转换、UNO桥接及REST接口等技术,提供... 目录1. 引言2. 环境搭建2.1 安装 LibreOffice2.2 配置 Java 开发环境2.3 配

Python 函数详解:从基础语法到高级使用技巧

《Python函数详解:从基础语法到高级使用技巧》本文基于实例代码,全面讲解Python函数的定义、参数传递、变量作用域及类型标注等知识点,帮助初学者快速掌握函数的使用技巧,感兴趣的朋友跟随小编一起... 目录一、函数的基本概念与作用二、函数的定义与调用1. 无参函数2. 带参函数3. 带返回值的函数4.

MySQL中DATE_FORMAT时间函数的使用小结

《MySQL中DATE_FORMAT时间函数的使用小结》本文主要介绍了MySQL中DATE_FORMAT时间函数的使用小结,用于格式化日期/时间字段,可提取年月、统计月份数据、精确到天,对大家的学习或... 目录前言DATE_FORMAT时间函数总结前言mysql可以使用DATE_FORMAT获取日期字段

Django中的函数视图和类视图以及路由的定义方式

《Django中的函数视图和类视图以及路由的定义方式》Django视图分函数视图和类视图,前者用函数处理请求,后者继承View类定义方法,路由使用path()、re_path()或url(),通过in... 目录函数视图类视图路由总路由函数视图的路由类视图定义路由总结Django允许接收的请求方法http

Python38个游戏开发库整理汇总

《Python38个游戏开发库整理汇总》文章介绍了多种Python游戏开发库,涵盖2D/3D游戏开发、多人游戏框架及视觉小说引擎,适合不同需求的开发者入门,强调跨平台支持与易用性,并鼓励读者交流反馈以... 目录PyGameCocos2dPySoyPyOgrepygletPanda3DBlenderFife