{
  "added_at": "2026-11-03",
  "additional_evidence_urls": [
    "https://github.com/Ayrx/JNIAnalyzer/blob/7170ce6bd138caa6be702e357b3aeb74231ae12f/JNIAnalyzer/ghidra_scripts/JNIAnalyzer.java",
    "https://github.com/Ayrx/JNIAnalyzer/blob/7170ce6bd138caa6be702e357b3aeb74231ae12f/JNIAnalyzer/ghidra_scripts/RegisterNatives.java",
    "https://github.com/Ayrx/JNIAnalyzer/blob/7170ce6bd138caa6be702e357b3aeb74231ae12f/JNIAnalyzer/ghidra_scripts/TraceRegisterNatives.java",
    "https://github.com/Ayrx/JNIAnalyzer/tree/7170ce6bd138caa6be702e357b3aeb74231ae12f/JNIAnalyzer/lib",
    "https://github.com/Ayrx/JNIAnalyzer/blob/7170ce6bd138caa6be702e357b3aeb74231ae12f/JNIAnalyzer/data/README.txt"
  ],
  "category": "android",
  "description_en": "A Ghidra extension by Terry Chia (Ayrx) with scripts for analyzing the native libraries of Android NDK apps. JNIAnalyzer.java uses the bundled JADX decompiler to extract the signatures of all native methods declared in an APK and applies the return types, parameter names and parameter types to the matching functions in the loaded .so. RegisterNatives.java uses Ghidra's P-Code API to find RegisterNatives calls and lay down the JNINativeMethod structures for dynamically registered methods, and TraceRegisterNatives.java applies the output of the author's trace_registernatives tool. A JNI data-type archive sets up the jni.h types.",
  "description_zh": "Terry Chia（Ayrx）编写的 Ghidra 扩展，包含用于分析 Android NDK 应用原生库的脚本。JNIAnalyzer.java 使用随附的 JADX 反编译器从 APK 中提取所有原生方法的签名，并把返回类型、参数名和参数类型应用到已加载 .so 中的匹配函数。RegisterNatives.java 借助 Ghidra 的 P-Code API 查找 RegisterNatives 调用，为动态注册的方法铺设 JNINativeMethod 结构；TraceRegisterNatives.java 则应用作者 trace_registernatives 工具的输出。随附的 JNI 数据类型归档用于设置 jni.h 类型。",
  "entry_url": "https://awesomerea.org/resources/jnianalyzer/",
  "entry_url_zh": "https://awesomerea.org/zh/resources/jnianalyzer/",
  "evidence_url": "https://github.com/Ayrx/JNIAnalyzer/blob/7170ce6bd138caa6be702e357b3aeb74231ae12f/README.md",
  "group": "tools",
  "id": "jnianalyzer",
  "json_url": "https://awesomerea.org/resources/jnianalyzer/record.json",
  "kind": "tool",
  "markdown_url": "https://awesomerea.org/resources/jnianalyzer/index.md",
  "markdown_url_zh": "https://awesomerea.org/zh/resources/jnianalyzer/index.md",
  "name": "JNIAnalyzer",
  "name_zh": "JNIAnalyzer Ghidra 扩展",
  "record_type": "resource",
  "relationship": "foundation",
  "requirements": [
    "Reviewed at master 7170ce6 (2023-01-02); there are no releases and the default branch has had no commits since that date, so treat it as unmaintained and check compatibility with current Ghidra. Build the extension with Gradle against a Ghidra install (gradle -PGHIDRA_INSTALL_DIR=<dir>), then install the produced zip through Ghidra's Install Extensions dialog and restart.",
    "Analysis runs inside Ghidra on an Android native library the analyst has loaded and is authorized to examine. JNIAnalyzer.java reads a supplied APK with JADX to recover native-method signatures; the README warns it overwrites existing function return types and parameter names and types, and that a function annotated JNIAnalyzer:IGNORE is skipped. RegisterNatives.java is marked experimental.",
    "No third-party target files are committed. The repository vendors its Java build dependencies as JARs under JNIAnalyzer/lib/, including JADX, smali/baksmali, dexlib2, dx, apksig, Guava, ANTLR, RxJava, logback and others, each keeping its own open-source license; the committed android-5.1.jar is a 4-entry stub (a single android/R$style class plus JADX resources), not the Android SDK. The Gradle wrapper JAR is also committed, and data/jni_all.gdt is a Ghidra data-type archive of the JNI types.",
    "The repository has no license file, so reuse terms are unstated; the vendored dependency JARs remain under their respective licenses. A Binary Ninja port exists in the author's separate binja-JNIAnalyzer repository."
  ],
  "requirements_zh": [
    "审阅基于 master 分支 7170ce6（2023-01-02）；项目没有发布版本，默认分支自该日期起再无提交，应视为缺乏维护，并自行核实与当前 Ghidra 的兼容性。使用 Gradle 针对某个 Ghidra 安装构建扩展（gradle -PGHIDRA_INSTALL_DIR=<目录>），再通过 Ghidra 的 Install Extensions 对话框安装生成的 zip 并重启。",
    "分析在 Ghidra 中进行，针对分析者已加载且有权分析的 Android 原生库。JNIAnalyzer.java 通过 JADX 读取所提供的 APK 以恢复原生方法签名；README 提醒它会覆盖已有的函数返回类型、参数名和参数类型，并会跳过注释为 JNIAnalyzer:IGNORE 的函数。RegisterNatives.java 标注为实验性。",
    "仓库未提交任何第三方目标文件。它将 Java 构建依赖以 JAR 形式收录在 JNIAnalyzer/lib/ 下，包括 JADX、smali/baksmali、dexlib2、dx、apksig、Guava、ANTLR、RxJava、logback 等，各自保留其开源许可；其中提交的 android-5.1.jar 只有 4 个条目（一个 android/R$style 类加若干 JADX 资源），并非 Android SDK。Gradle wrapper JAR 也被提交，data/jni_all.gdt 是 JNI 类型的 Ghidra 数据类型归档。",
    "仓库没有许可证文件，复用条款未作说明；收录的依赖 JAR 仍适用各自的许可。作者另有一个 Binary Ninja 移植版，位于其独立的 binja-JNIAnalyzer 仓库。"
  ],
  "targets": [
    "app",
    "binary"
  ],
  "url": "https://github.com/Ayrx/JNIAnalyzer",
  "verification": "source-reviewed",
  "verified_at": "2026-10-27"
}
