网站首页

人工智能P2P分享搜索全网发布信息网站地图标签大全

当前位置:诺佳网 > 电子/半导体 > 嵌入式技术 >

动态分析so文件中的JNI函数

时间:2023-04-10 11:18

人气:

作者:admin

标签: C++语言  python  JAVA 

导读:APP逆向过程中,需要对dex文件和elf文件进行分析,又因现在各APP都有各种代码保护手法,因此都需要进行动态分析。...

APP逆向过程中,需要对dex文件和elf文件进行分析,又因现在各APP都有各种代码保护手法,因此都需要进行动态分析。

今天就分享下对elf文件也就是so文件中动态分析so文件中JNI函数的方案。

jnitrace它是基于frida基础上的一个工具,它是一个动态分析追踪SO文件中的JNI API调用的工具,它可以进行指定SO文件进行跟踪JNI调用。

基础知识

1、JavaVM 和 JNIEnv

JNI 它定义了两个关键数据结构:JavaVM和JNIEnv。它们本质上都是指向函数表的二级指针。(在 C++ 版本中,它们是一些类,这些类具有指向函数表的指针,并具有每个通过该函数表间接调用的 JNI 函数的成员函数。)JavaVM 提供“调用接口”函数,可以利用此类来函数创建和销毁 JavaVM。

JNIEnv 提供了大部分 JNI 函数, so中的原生函数都会收到 JNIEnv 作为第一个参数。该 JNIEnv 将用于线程本地存储。因此无法在线程之间共享 JNIEnv。如果一段代码无法通过其他方法获取自己的 JNIEnv,应该共享相应 JavaVM,然后使用 GetEnv 发现线程的 JNIEnv。

a28c0bfe-d6bf-11ed-bfe3-dac502259ad0.png

JNIEnv 和 JavaVM 的 C 声明与 C++ 声明不同。"jni.h" include 文件会提供不同的类型定义符,具体取决于该文件是包含在 C 还是 C++ 中。因此不建议在这两种语言包含的头文件中添加 NIEnv 参数。

2、spawn和attach注入区别

Frida支持spawn和attach两种启动方式。

attach模式下,Frida会附加到当前的目标进程中,即需要App处于启动状态,这也意味着它只能从当前时机往后Hook;

spawn模式下,Frida会自行启动并注入进目标App,Hook的时机非常早,好处在于不会错过App中相对较早(比如App启动时产生的参数),缺点是假如想要Hook的时机点偏后,则会带来大量干扰信息,严重甚至会导致server崩溃。

attach注入:APP启动后再 hook,不能 hook APP的启动阶段。

spawn注入 :重启 APP,适合 hook APP启动阶段。

基本操作

jnitrace使用需要配合python环境和frida工具(版本需要配套好)

a2a35d0e-d6bf-11ed-bfe3-dac502259ad0.png

这个jnitrace安装后主要核心的实现功能都在jnitrace.py和jnitrace.js

a2c041ee-d6bf-11ed-bfe3-dac502259ad0.png

a2e5642e-d6bf-11ed-bfe3-dac502259ad0.png

下图是jnitrace.py中主要功能:首先判断连接设备的方式 是以remote_device还是usb_device,接着默认采用spawn的注入方式,在去执行jnitrace.js文件中的hook功能,最后在输出执行后的数据。

a2f24004-d6bf-11ed-bfe3-dac502259ad0.png

下图是jnitrace.js的关键功能点,注入后实际功能还是调用到底层的dlopen。

a30e7bde-d6bf-11ed-bfe3-dac502259ad0.png

实践分析

Frida启动后会往要hook的进程中注入frida的so文件

a31d83cc-d6bf-11ed-bfe3-dac502259ad0.png

下图是所有功能组成的解析

a3401018-d6bf-11ed-bfe3-dac502259ad0.png

通过jnitrace -l libxxx.so com.xxx.xxx 可以打印输出so中的jni函数,以及这些jni函数的调用获取数据

a356c6f0-d6bf-11ed-bfe3-dac502259ad0.png

a372e272-d6bf-11ed-bfe3-dac502259ad0.png

a396db5a-d6bf-11ed-bfe3-dac502259ad0.png

通过 jnitrace -l libxxx.so com.xxx.xxx -i RegisterNatives 可以查看到so中的所有动态注册的函数。

a3af5612-d6bf-11ed-bfe3-dac502259ad0.png






审核编辑:刘清

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信