# 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 脚本仍在开发中。

- 类型：工具
- 目标：应用 · 二进制
- 类别：Android 工具
- 关联：基础工具
- 来源复核于：2026-10-20
- 收录于：2026-11-02
- 原始资源：<https://github.com/evilpan/jni_helper>
- 一手来源：<https://github.com/evilpan/jni_helper/blob/04b844c43438c2c0bbef29bf9b9695e5aba9a4bc/README.md>
- 目录页面：<https://awesomerea.org/zh/resources/jni-helper/>
- 记录 JSON：<https://awesomerea.org/resources/jni-helper/record.json>
- 英文版：[English](https://awesomerea.org/resources/jni-helper/index.md)

## 使用条件与局限

- 审阅时最新版本为 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 文件夹包含作者测试应用的源码。

## 一手来源

1. <https://github.com/evilpan/jni_helper/blob/04b844c43438c2c0bbef29bf9b9695e5aba9a4bc/README.md>
2. <https://github.com/evilpan/jni_helper/blob/04b844c43438c2c0bbef29bf9b9695e5aba9a4bc/extract_jni.py>
3. <https://github.com/evilpan/jni_helper/blob/04b844c43438c2c0bbef29bf9b9695e5aba9a4bc/requirements.txt>
4. <https://github.com/evilpan/jni_helper/blob/04b844c43438c2c0bbef29bf9b9695e5aba9a4bc/ghidra/README.md>
5. <https://github.com/evilpan/jni_helper/blob/04b844c43438c2c0bbef29bf9b9695e5aba9a4bc/ida/README.md>
6. <https://github.com/evilpan/jni_helper/blob/04b844c43438c2c0bbef29bf9b9695e5aba9a4bc/binary_ninja/jni_helper.py>
7. <https://github.com/evilpan/jni_helper/blob/04b844c43438c2c0bbef29bf9b9695e5aba9a4bc/r2/README.md>
8. <https://github.com/evilpan/jni_helper/blob/04b844c43438c2c0bbef29bf9b9695e5aba9a4bc/headers/jni.h>
9. <https://github.com/evilpan/jni_helper/blob/04b844c43438c2c0bbef29bf9b9695e5aba9a4bc/.github/workflows/main.yml>
10. <https://github.com/evilpan/jni_helper/releases/tag/v0.6>

## 同分区更多条目：应用

- [ReArk 鸿蒙与移动应用逆向分析工作台](https://awesomerea.org/zh/resources/reark/index.md) · 工具
- [ARSCLib Android 二进制资源读写库](https://awesomerea.org/zh/resources/arsclib/index.md) · 工具
- [Pithus（bazaar）Android 应用分析平台](https://awesomerea.org/zh/resources/pithus-bazaar/index.md) · 工具
- [House Android 运行时分析工具](https://awesomerea.org/zh/resources/house/index.md) · 工具
- [ABCDE OpenHarmony 逆向工具包](https://awesomerea.org/zh/resources/abcde/index.md) · 工具
- [de4js JavaScript 反混淆与解包工具](https://awesomerea.org/zh/resources/de4js/index.md) · 工具

## 关于此条目

说明已依据一手来源复核。
原创说明采用 MIT 许可；外部项目、论文与素材保留各自的权利和许可。
