内容
# JADX-NO-MCP
## [中文 README](README_zh.md)
JADX-NO-MCP是一款用于APK逆向工程的桌面和命令行辅助工具。它将JADX、可选的apktool输出、Java调用图提取、本地`.so`符号分析、打包检测和AI友好的Markdown报告整合到一个工作流中。
该项目旨在为安全研究人员提供一个紧凑的导出目录,可以手动审查或发送到AI助手,而无需转储整个反编译的APK。
## 功能
- GUI和CLI模式
- 使用捆绑的`jadx`进行JADX反编译
- 可选的apktool Smali导出
- 在昂贵的反编译之前进行早期APK打包/保护检测
- 清单、权限、深度链接、SDK、URL/IP、危险API和硬编码秘密扫描
- Java方法索引和调用者/被调用者图
- 本地`.so`分析,支持ABI去重
- JNI优先的本地Markdown输出
- 通过`llvm-objdump`或`objdump`进行轻量级JNI CFG提取(如果可用)
- AI关注的输出文件,例如`ai_context.md`、`file_index.md`和紧凑的安全报告
## 要求
- Python 3.9+
- Java JDK 11+
- Windows、Linux或macOS
捆绑工具:
- `bin/jadx` / `bin/jadx.bat`
- `lib/jadx-1.5.5-all.jar`
- `lib/apktool.jar`
可选Python包:
```bash
pip install ttkbootstrap
```
可选系统工具:
```bash
llvm-objdump --version
objdump --version
```
`llvm-objdump`或`objdump`仅需用于本地JNI CFG反汇编。如果两者都未安装,本地报告仍将包括JNI符号、导入、导出和风险标记。
## 快速入门
启动GUI:
```bash
python jadx_ai_analyzer.py
```
从CLI分析一个APK:
```bash
python jadx_ai_analyzer.py target.apk
```
分析APK文件目录:
```bash
python jadx_ai_analyzer.py apk_dir --batch
```
指定输出目录:
```bash
python jadx_ai_analyzer.py target.apk -o export_for_ai
```
跳过安全扫描:
```bash
python jadx_ai_analyzer.py target.apk --no-scan
```
跳过本地`.so`分析:
```bash
python jadx_ai_analyzer.py target.apk --no-so
```
跳过Smali导出:
```bash
python jadx_ai_analyzer.py target.apk --no-smali
```
注意:Smali导出可通过GUI选项获得。当前的CLI标志仅控制跳过Smali导出。
## CLI选项
```text
apk APK文件路径,或使用--batch时APK目录
-o, --output 输出目录,默认:export_for_ai
--jadx 自定义JADX可执行文件路径
--batch 分析目录中的所有.apk文件
--no-smali 跳过Smali导出
--no-scan 跳过安全扫描
--no-so 跳过本地.so分析
```
## 分析流程
1. 早期打包/保护检测
2. JADX反编译
3. 可选Smali导出
4. 本地库提取
5. 元数据提取
6. 安全扫描
7. Java调用图提取
8. 本地`.so`分析
9. AI关注的报告导出
在GUI模式下,如果检测到已知的打包/保护程序,则会弹出确认对话框,询问是否继续。选择`否`将在继续昂贵的反编译之前停止分析。
## 输出结构
每次运行都会在配置的输出路径下创建一个时间戳目录:
```text
export_for_ai/
appname_YYYYMMDD_HHMMSS/
ai_context.md
file_index.md
report.json
sources/
resources/
lib/
methods/
native_analysis/
security/
```
重要文件:
- `ai_context.md` - 顶级AI可读摘要
- `file_index.md` - 紧凑导航索引
- `report.json` - 存在安全结果时的结构化发现
- `methods/*.jsonl` - 每类方法图记录
- `native_call_chain.md` - JNI/本地摘要
- `native_method_index.md` - Java本地方法声明和调用者
- `native_analysis/*_functions.md` - JNI优先的本地符号和CFG摘要
- `security/packer.md` - 按供应商分组的打包/保护程序命中
- `security/permissions.md` - Android权限
- `security/urls_extracted.md` - 提取的URL和IP
## 本地分析
本地分析针对的是在多个ABI文件夹中提供相同`.so`的APK。工具按优先级选择每个库名称的一个副本:
```text
x86_64 > x86 > arm64-v8a > armeabi-v7a > 其他
```
对于JNI函数,Markdown报告关注:
- JNI入口点
- Java类和方法映射
- 符号地址和大小
- 从objdump输出解析的调用和分支
- 风险导入,例如`dlopen`、`dlsym`、`ptrace`、`syscall`和`system`
应用性能保护:
- 无整个库objdump回退
- 每个`.so`最多20次JNI CFG尝试
- 跳过大于30 MB的`.so`文件CFG
- 跳过大于2 MB的反汇编输出
- objdump超时限制
## 打包检测
在反编译之前执行打包检测。它使用从ApkCheckPack改编的规则类型扫描APK zip条目和DEX内容:
- 确切的本地路径
- 本地库名称
- 资产或特殊文件路径
- 正则表达式路径匹配
- DEX字符串或Java类标记
找到匹配项时,详细信息将导出到:
```text
security/packer.md
```
## AI用法
对于AI辅助审查,首先使用:
```text
file_index.md
ai_context.md
security/packer.md
native_call_chain.md
```
然后深入:
```text
methods/*.jsonl
native_analysis/*_functions.md
security/*.md
```
报告故意避免使用大型分隔符和冗长的纯文本,以便令token使用量保持较低。
## 限制
- 静态分析无法完全解决动态注册、加密DEX、反射或运行时加载的代码。
- 本地CFG依赖于导出的JNI符号和本地objdump支持。
- 打包检测基于签名,可能会产生误报或漏报自定义保护程序。
- JADX反编译的Java可能对于严重混淆的APK不完整或不准确。
## 法律声明
仅在您拥有、获得许可或根据适用法律和政策允许检查的APK上使用此工具。
## 参考
- https://github.com/moyuwa/ApkCheckPack/
- https://github.com/bstee615/tree-climber
- https://github.com/P4nda0s/IDA-NO-MCP