工具

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 工具
关联
基础工具
目标
应用 · 二进制

来源复核于

说明已依据一手来源复核;这不代表已运行验证、经过安全审计或确认兼容。

报告条目过时 建议修正翻译

一手来源

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

同分区更多条目:应用

应用分区全部 108 项资源