工具
jni_helper JNI 函数签名提取工具
evilpan 开发的 Android JNI 代码静态逆向辅助工具。其 extract_jni.py 脚本用 Androguard 解析 APK 中的 DEX 文件,找出声明为 native 的方法,推导出每个方法(包括重载方法)对应的 Java_ 修饰符号名和 C 函数原型,并连同 APK 中 arm64-v8a 原生库导出的 Java_ 函数和 JNI_OnLoad 一起保存为 JSON 签名文件。面向 Ghidra、IDA Pro 和 Binary Ninja 的脚本读取该文件,把函数原型和 JNI 类型应用到相应函数上;radare2 脚本仍在开发中。
使用条件与局限
- 审阅时最新版本为 v0.6,发布于 2024-10-23,唯一的附件是 CI 构建的演示 APK;所审阅的 2025-02-24 master 提交只更新了 README 中的一个链接。CI 用 JDK 17 构建演示应用,并在其上运行 extract_jni.py 作为唯一的测试,既不检查输出,也不测试各反汇编器脚本。
- extract_jni.py 需要 Python 3 以及 requirements.txt 中列出的 androguard、rich 和 pyelftools,输入为分析者已有的 APK;它只读取 lib/arm64-v8a 中的原生库。运行时通过 RegisterNatives 绑定的方法不在覆盖范围内,README 将其列为尚未完成的待办事项;各反汇编器脚本也只按 Java_ 修饰符号名查找函数。
- Ghidra 脚本通过 Makefile 与自带的 jni.h.gdt 数据类型归档一起安装到用户主目录下的 ghidra_scripts 文件夹;IDA 插件分别提供适用于 IDA Pro 7.4 之前版本和 7.4 及以后版本的两个版本;Binary Ninja 脚本通过 File > Run Script 运行,并解析自带的 headers/jni.h。项目未说明所支持的 Ghidra、Binary Ninja 和 radare2 版本。
- 仓库没有许可证文件,GitHub 也未检测到许可证,因此这些脚本的复用条款并不明确。自带的头文件保留各自的声明:headers/jni.h 是 Oracle 采用 GPL-2.0 并附 Classpath 例外的文件,r2/jni.h 和 headers/art_method.h 则是采用 Apache-2.0 的 Android 开源项目文件。demo_apk 文件夹包含作者测试应用的源码。本次审阅未运行任何组件。
关于此条目
- 类型
- 工具
- 类别
- Android 工具
- 关联
- 基础工具
- 目标
- 应用 · 二进制
来源复核于
说明已依据一手来源复核;这不代表已运行验证、经过安全审计或确认兼容。
一手来源
- README.md GitHub · evilpan/jni_helper · 修订 04b844c
- extract_jni.py GitHub · evilpan/jni_helper · 修订 04b844c
- requirements.txt GitHub · evilpan/jni_helper · 修订 04b844c
- ghidra/README.md GitHub · evilpan/jni_helper · 修订 04b844c
- ida/README.md GitHub · evilpan/jni_helper · 修订 04b844c
- binary_ninja/jni_helper.py GitHub · evilpan/jni_helper · 修订 04b844c
- r2/README.md GitHub · evilpan/jni_helper · 修订 04b844c
- headers/jni.h GitHub · evilpan/jni_helper · 修订 04b844c
- .github/workflows/main.yml GitHub · evilpan/jni_helper · 修订 04b844c
- https://github.com/evilpan/jni_helper/releases/tag/v0.6
同分区更多条目:应用
- ReArk 鸿蒙与移动应用逆向分析工作台 · 工具
- Aegis:追踪登录验证码计算 · 案例
- Notion:追踪剪贴板桥接 · 案例
- PicoPrint:LX-D02 打印机调查 · 案例
- ReaCut:视频编辑器重建案例 · 案例
- CF632BLE:基于体脂秤协议研究的本地客户端 · 案例