定制ART跟踪JNI函数绑定

第 18 章:ART 运行时 Android运行时(ART)是Android应用的执行环境,负责加载和执行DEX字节码。ART通过多层级编译策略(解释器、JIT、AOT)和并发垃圾回收(如CC和CMC收集器)优化性能。关键组件包括类链接器、dex2oat编译器、JIT编译器和内存管理系统。ART支持模块化更新,并通过配置文件引导优化(PGO)提升应用性能。调试能力基于JVMTI,提供断点、类重定义等功能。Android 17引入了多项改进,如分代标记-压缩GC、禁止反射修改static final字段、DEX容器格式V41等。ART架构 阅读详情

   JNI函数的绑定:每一个JAVA层函数在native层都对应一个ArtMethod对象,JNI函数在执行前必须完成JNI函数所在类的加载和初始化、以及该JNI函数的ArtMethod对象当中属性和So中具体函数地址的绑定。

JNI函数绑定的分类:

1、静态:

两次绑定,第一次是在类加载的时候,会绑定到Art中的“桥函数”;第二次绑定是在该Jni函数第一次被真正调用时候,由Art完后该JNI函数在So中地址的查询以及绑定。

art_jni_dlsym_looup_stub_(汇编实现)->artFindNativeMethod->FindCodeForNativeMethod(method) 

2、动态:

两次绑定,不同于静态的两次在于由开发人员编写代码主动进行绑定,而不是由art帮助完成绑定。

不管静态或者动态注册,最后都会到达:const void* ArtMethod::RegisterNative函数中的SetEntryPointFromJni(new_native_method)函数

function hookJniRegister() {
var Regiseteraddr = Module.findExportByName("libart.so","_ZN3art9ArtNethod14RegisterNativeEPKvb");
Interceptor.attach(Regiseteraddr, {
    onEnter: function (args) {
    console. log("go into RegisterNative" );
    var artmethodptr = args[0];
    var dex_method_index_ = Memory.readU32(ptr(artmethodptr).add(12));
    var funcaddr = args[1];
    console.log ("RegisterNative :" + dex_method_index_ + " - -funcaddr:" + funcaddr);},             
    onLeave: function (retval){
}
}

 

 

安卓NDK开发实战:从JNI原理到性能优化与避坑指南 在移动开发领域,性能优化与底层硬件交互是高级开发的核心诉求。通过理解JNI(Java Native Interface)这一跨语言通信的桥梁,开发者能够突破Java虚拟机的限制,直接调用C/C++代码,实现性能敏感型计算和复用庞大的成熟生态库。其技术价值在于为应用提供了与系统底层、硬件及现有C/C++生态对话的能力,从而在图像处理、音视频编解码等场景中发挥关键作用。例如,在`ndk编译opencv3`这类任务中,正是通过NDK将计算机视觉库集成到安卓应用,解决了密集计算和算法复用的需求。同时,在`安卓缓存r 阅读详情

相关推荐

Android逆向工程实战指南:从APK结构到动态脱壳的完整学习路径

逆向工程是一种通过分析软件二进制代码来理解其内部工作原理的技术方法,广泛应用于安全审计、漏洞挖掘和软件架构研究。其核心原理在于通过静态分析与动态调试相结合的手段,还原程序的逻辑结构与执行流程。在移动安全领域,这项技术对于评估Android应用的安全性、学习优秀代码设计具有重要价值。典型的应用场景包括分析应用通信协议、识别潜在漏洞、研究第三方SDK行为等。本文聚焦于Android平台,系统性地介绍了从APK文件结构解析、Java层逻辑分析,到对抗加固方案进行动态脱壳的完整技术路径,并深入探讨了Frida工具在

xpp02的专栏 501

Android 稳定性【篇二:ANR&SWT】

ANR(Application Not Responding,即应用程序无响应)。在Android中,当应用程序在规定时间内没有处理完毕相应的事件,系统就会报出ANR。

qq_27672101的博客 6432

深度解析DroidGuard虚拟机逆向:从字节码到种子密钥的攻防实战

在移动应用安全领域,虚拟机保护技术是一种常见的代码混淆与反逆向手段,其核心原理是通过自定义的指令集和运行时环境,将关键逻辑以字节码形式封装执行,从而对抗静态分析与动态调试。这项技术的核心价值在于为敏感业务逻辑(如设备认证、支付风控)提供高强度运行时保护,广泛应用于金融、支付等高安全要求的Android应用场景。本文聚焦于Google DroidGuard这一典型实现,深入剖析其自定义虚拟机架构、多层混淆机制以及反调试策略。通过结合Frida动态插桩与Unicorn模拟执行等实战工具链,文章详细拆解了从定位虚

weixin_34409357的博客 595

从 Java 调用一个 Native 函数

Java 调用Native函数,实际就是 JNI 调用。 我们将关注 Java端如何把参数传递到 Native,Java调用Native函数时,额外的做了哪些事情。 在前面分析Native 调用Java 函数时,直接打断点,就能得到调用 backtrace,那是得益于 GDB 对 Native代码的调试支持, 可以根据包含 symbols的 so库,自动帮忙我们理清

大将军王虎剩的专栏 6089

安卓逆向工程实战指南:从APK结构到动态调试与脱壳

逆向工程是一种通过分析已编译程序来理解其内部结构、运行逻辑与安全机制的技术。其核心原理在于将二进制代码或字节码转换为可读形式,从而揭示软件的设计思路与数据流。这项技术的价值在于,它不仅是移动安全领域进行漏洞挖掘、恶意软件分析和隐私审计的基石,也为开发者提供了验证自身代码防护效果、学习优秀架构设计的途径。在实际应用场景中,安卓应用(APK)作为主要分析对象,其内部包含关键的DEX字节码、资源文件和原生库。掌握静态分析工具链(如JADX)与动态调试框架(如Frida),能够有效应对代码混淆与加固等挑战,实现对应

weixin_34239592的博客 425

Android不是操作系统:十年工程师拆解其电源管理与HAL设计真相

Android常被误认为传统操作系统,实则是面向移动终端的软硬件集成方案。其核心不在于通用内核抽象,而在于电源管理、HAL抽象、内存隔离等工程权衡——这些机制绕过Linux标准PM QoS与POSIX规范,以‘够用主义’换取快速落地。技术价值体现在极低的厂商准入门槛和生态爆发力,但代价是子系统耦合严重、适配成本高企。典型应用场景包括定制ROM开发、低功耗IoT设备移植、车载/VR系统优化等。本文聚焦Android底层真实约束,揭示WakeLock泄漏、LMK静态阈值、HAL硬件绑定等关键问题的技术根源。

dejz8829的专栏 526

ART运行时之method/field加载

先简单介绍下OAT的文件格式,后面针对Method/Field/JNI方法加载做些代码分析。OAT文件格式 在虚拟机以ART模式运行的Android手机上,apk安装时,系统通过installed调用dex2oat将apk中的classes.dex优化成目标机器的本地机器指令,优化的oat文件放在/data/dalvik-cache目录下。 OAT文件是ELF格式文件,其包含2个重要的Secti

guoguodaern的专栏 4970

Android逆向实战:多维度ROOT检测绕过与商业壳脱壳技术解析

在移动应用安全领域,逆向工程是深入理解应用内部机制、评估安全防护强度的关键技术手段。其核心原理是通过静态与动态分析,解析应用的代码逻辑与数据流,从而揭示其运行机制与潜在漏洞。这项技术的价值在于,它不仅是安全研究人员进行漏洞挖掘与风险评估的基础,也是开发者加固自身应用、构建防御体系的重要参考。在实际应用场景中,当面对采用ROOT检测与代码加壳等防护措施的APP时,逆向工程便演变为一场深度的技术对抗。其中,ROOT检测涉及对系统文件、属性、进程等多维度痕迹的识别,而代码加壳则通过加密、混淆等手段保护核心逻辑。本

aaa1231722的博客 702

frida 主动调用so native实例函数的问题

Java.api[类路径](返回值, 对象指针, 参数);

Pansy的博客 2229

Android逆向工程实战:金融支付应用安全攻防与纵深防御体系构建

Android逆向工程是在没有源代码的情况下,通过分析APK文件来理解应用工作原理、数据结构及业务逻辑的技术。其核心原理在于对DEX字节码进行反编译、反汇编,并结合动态调试、代码插桩等手段,还原并干预应用的运行时行为。这项技术的价值在于,它不仅是安全研究人员分析漏洞、评估风险的关键方法,也是开发人员构建更健壮防御体系的逆向思维训练。在移动安全领域,尤其是承载海量敏感数据的金融支付应用中,逆向工程常被用于分析通信加密、本地数据保护、反调试等核心安全机制。通过工具链(如Jadx、Frida、Burp Suite

weixin_34357436的博客 440

安卓APP逆向分析实战:从工具链到对抗混淆的完整指南

在移动应用开发与安全领域,逆向分析是一项关键技术,它通过解析已编译应用来理解其内部结构和运行机制。其核心原理是结合静态与动态分析,利用反编译工具还原代码逻辑,并通过运行时插桩技术监控应用行为。这项技术的价值在于,它不仅能帮助开发者以攻击者视角审视自身代码,发现如硬编码密钥、不安全的通信协议等安全隐患,还能助力安全研究人员评估应用整体安全水位。在实际应用场景中,逆向分析常用于协议分析、漏洞挖掘、恶意软件检测以及学习优秀应用架构。本文以典型应用为例,详细阐述了如何运用Frida进行动态调试以绕过SSL Pinn

areen7003的博客 507

Android 知识体系

Android归档前言 前言 感谢: Gityuan:Android系统架构开篇 刘望舒的博客:知识体系

许浑的博客 8196

Android逆向工程资源大全:从工具链到实战路径的完整指南

逆向工程是深入理解软件内部机制、分析安全漏洞的关键技术,其核心原理在于通过静态与动态分析手段,解析程序的代码逻辑与数据流。在移动安全领域,这项技术的价值尤为突出,能够帮助开发者进行安全审计、安全研究员挖掘漏洞,以及技术爱好者探索应用实现。应用场景广泛覆盖了恶意软件分析、协议破解、漏洞挖掘及软件保护评估等。本文聚焦Android平台,系统梳理了逆向工程所需的核心工具链,如JADX、APKTool、Frida等,并详解了从环境搭建、动态注入到加固脱壳、协议分析的完整实战路径,特别针对Frida脚本编写与内存Du

weixin_30745553的博客 401

unidbg逆向分析实战:移动端Native算法模拟与Hook技术详解

在移动安全与逆向工程领域,动态分析技术是理解核心算法逻辑的关键。传统调试工具如Frida虽功能强大,但常面临反调试、环境依赖等挑战。unidbg作为一种创新的沙盒模拟方案,通过构建虚拟CPU与操作系统环境,实现了对Android so与iOS Mach-O文件的指令级模拟执行。其核心价值在于无需真实设备或Root权限,即可在PC端完整复现算法执行流程,尤其适用于签名算法、加密协议等关键逻辑的提取与分析。本文聚焦unidbg的实战应用,深入解析其JNI桥接、系统调用模拟等核心机制,并通过Hook技术、内存操作

weixin_34228387的博客 338

App逆向分析实战:从解密到算法还原的完整技术路径

逆向工程是理解软件内部工作原理的关键技术,它通过分析程序的二进制代码、数据结构和执行逻辑,揭示其设计思路和实现机制。在移动安全领域,逆向分析的核心价值在于安全审计、漏洞挖掘、协议分析和恶意软件检测。对于Android应用,这一过程通常涉及对APK包体的解密、反编译和动态调试,以还原其核心业务逻辑和加密算法。在实际工程实践中,开发者常使用Apktool、Jadx等工具进行静态分析,结合Frida动态插桩技术来Hook关键函数,从而定位加密参数和算法实现。针对常见的AES、RSA等加密方案,可以通过拦截密钥和初

470

Android应用安全攻防:反编译工具链、加固原理与实战分析

在移动应用开发领域,代码保护与逆向分析是核心技术议题。从原理上讲,Android应用以APK格式分发,其核心逻辑存储在DEX字节码文件中,这使其容易受到静态反编译分析。通过工具链(如JADX、APKTool)可将字节码还原为高可读性的伪代码,从而暴露业务逻辑和敏感信息,这凸显了代码混淆、加固等技术价值。在工程实践中,针对加固应用常需结合动态分析技术,例如使用Frida进行运行时Hook或内存Dump来绕过保护。这些技术广泛应用于安全审计、漏洞挖掘、恶意软件分析和应用调试等场景。本文聚焦于Android平台,

weixin_34212762的博客 336

Android与嵌入式Linux开发核心差异解析:从系统架构到应用实践

在嵌入式系统与移动应用开发领域,Linux内核作为共同基础,却衍生出Android与嵌入式Linux两套截然不同的技术体系。理解操作系统架构是掌握其开发范式的关键:Android通过硬件抽象层(HAL)和应用框架构建了封闭的沙箱环境,为应用提供标准化API;而嵌入式Linux则赋予开发者从内核裁剪到硬件直接访问的完整控制权。这种架构差异决定了技术价值取向——Android侧重应用生态与用户体验的一致性,嵌入式Linux则追求在资源受限环境下对硬件的精细控制与系统优化。在实际应用场景中,前者适用于消费电子产品

weixin_30642869的博客 356

hook_ArtMethod_RegisterNative:挂钩艺术方法

hook_ArtMethod_RegisterNative 将libext.so 和libext64.so 放到 /data/app 目录下, chmod 777 , 并setenforce 0 frida -U -f 包名 -l hook_artmethod_register.js --no-pause 包含yang神的hook RegisterNatives 可以比较是否相同 参考 yang神的hook artmethod.js 来打印 ArtMethod* 得到函数的方法和签名 hook ArtMethod::RegisterNative 可以得到更多的信息,动态注册无法逃离这个函数,防止某些app自实现动态注册,不走jni的registerNatives

上一篇: ART中的内联函数笔记
Viewz
博客等级 码龄9年 309粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值