当前位置: 首页 > article >正文

Native开发与逆向第三篇 - hook JNI函数NewStringUTF

示例代码参考第一篇

jstring xxaa(JNIEnv *env, jobject instance) {
    std::string hello = "Hello from C++ , 这是动态注册";
    return env->NewStringUTF(hello.c_str());
}

目标是hook NewStringUTF 打印字符串。

hook 代码:

function hook_jni_2(){
    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("NewStringUTF")>= 0){
             console.log("NewStringUTF ",JSON.stringify(symbols_one));
             addr_GetStringUTFChars = symbols_one.address;
             console.log("NewStringUTF address = " + addr_GetStringUTFChars); 
             break
         }
     }    
    }
    Interceptor.attach(addr_GetStringUTFChars,{
     onEnter:function(args){
         var env = args[0];
         var param1 = args[1];
         console.log("env :",env,"param1 ", ptr(param1).readCString());
     },onLeave:function (retval) {
         console.log("addr_NewStringUTF retval :", Java.vm.getEnv().getStringUtfChars(retval, null).readCString());
     }
    })
}
setImmediate(hook_jni_2);

运行打印结果:参数和返回值都正常打印出来字符串。
[Pixel 3a::com.mycode.nativehello ]-> env : 0x7d44041250 param1 Hello from C++ , 这是动态注册
addr_NewStringUTF retval : Hello from C++ , 这是动态注册


http://www.kler.cn/news/283223.html

相关文章:

  • 构建视频生态技术基石:EasyCVR平台如何打破视频流媒体协议壁垒
  • kubeadm部署k8s1.25.3一主二从集群(Containerd)
  • 【GIT】说一说 Git 的常见命令和实践
  • uniapp中使用弹出框控制Tab栏区域显示与隐藏
  • Python编程实战营:四款实用小项目助你快速入门,从零开始打造你的个人项目集!
  • 【大模型理论篇】RoPE旋转位置编码底层数学原理分析
  • 深入理解Spring Boot的开箱即用与自动装配特性
  • 【爬虫软件】YouTube关键词搜索采集工具
  • 2024如何开始进入美业?美业创业步骤分享|博弈美业系统管理系统源码
  • Spark-第八周
  • 浅谈【数据结构】树与二叉树之哈夫曼树
  • 【Java设计模式】集合管道模式:简化数据操作
  • 买对不买贵,宠物空气净化器应该怎么选才能选到好的产品
  • 大数据技术之Flume 企业开发案例——负载均衡和故障转移(6)
  • SIGFPE (Arithmetic exception)
  • [Meachines] [Medium] Bastard Drupal 7 Module Services-RCE+MS15-051权限提升
  • 参数高效的模型微调
  • 【学习笔记】技术分析-华为智驾控制器MDC Pro 610分析
  • 怎么自定义spring security对用户信息进行校验及密码的加密校验
  • 关于springboot的异常处理以及源码分析(二)
  • 【面试04】ARM架构问题
  • 从 MLOps 到 LMOps 的关键技术嬗变
  • 红黑树刨析(删除部分)
  • 阿里PAI-ChatLearn:大规模 Alignment高效训练框架正式开源
  • 【C++笔记】类和对象的深入理解(一)
  • MySQL:简述数据库的主从复制
  • 08:字符串
  • 用mintupgrade工具将Linux Mint 21.3升级到Linux Mint 22失败的解决办法
  • Python私教张大鹏FastAPI开源框架和项目第一次整理 20240830
  • chapter09-OOP高级部分——(抽象类模版设计模式)——day12