drneox/nutcracker

GitHub: drneox/nutcracker

一款模块化的 Android 应用安全分析与攻击性威胁情报框架,集反保护绕过、静态动态分析、机密提取与 OSINT 侦察于一体,对齐 MASVS 标准输出完整 PDF 报告。

Stars: 16 | Forks: 3

Nutcracker logo

GitHub stars GitHub forks GitHub issues GitHub last commit

Python 3.11+ Android platform Frida dynamic analysis MIT license

# nutcracker v0.1 — 移动安全与攻击性威胁情报 面向安全研究人员的 Android 应用分析工具。 直接从 Google Play 下载应用,检测并尝试绕过 反 root/RASP 保护(DexGuard、Arxan、Appdome、Promon、RootBeer),对其进行反编译,提取硬编码的机密信息和 endpoint, 分析不安全的 manifest 配置,并针对 package ID、 domain、endpoint 以及提取的机密信息启动 OSINT 侦察(通过 crt.sh 查询子域,在 GitHub/Postman/FOFA/Wayback 上查询公开泄露以及可选的 Web 搜索)。 所有发现将汇总为一份技术 PDF 报告,可直接用于汇报。 ## ⚠️ 法律免责声明 ## 主要特性 - 通过 Google Play(使用 apkeep + AAS token)、APKPure 或直接 URL 下载 APK - 支持App Bundle (AAB):分包检测及 `adb install-multiple` - 静态保护检测:DexGuard、Arxan、Appdome、RootBeer、Promon Shield 等 - 智能分析 SDK 过滤(AppMetrica、AppsFlyer 等)以避免误报 - 根据 pipeline 配置,通过 `frida_server`、`gadget` 或 `fart` 进行动态去混淆 - 可选的 Frida Gadget 插桩作为内嵌的备选路径 - 漏洞扫描器:semgrep (OWASP MASTG) + 38 条内部正则表达式规则 - 可配置的泄露/机密信息搜索:内部 HC 规则 + apkleaks + 对反编译代码及原始 APK 执行 gitleaks - 可选的 OSINT 模块:通过 crt.sh 获取子域,在 GitHub/Postman/FOFA/Shodan/Wayback 上查询公开泄露,误报过滤以及通过 DuckDuckGo 进行可选的 Web 搜索 - AndroidManifest.xml 分析:危险权限、导出组件、`network security config` 及不安全配置 - 完整的 PDF 报告:封面页、执行摘要、反 root、RASP 绕过、不安全配置、信息泄露、OSINT 及漏洞 - 批处理模式,可按顺序扫描多个应用 - 模块可通过 `config.yaml` 中的 feature flags 进行控制 ## 系统要求 ### macOS(使用 Homebrew 安装) ``` brew install apkeep # download APKs from Google Play / APKPure brew install jadx # decompile APKs to Java + XML brew install apktool # unpack/repack APKs (required for gadget_inject) brew install semgrep # static analysis (OWASP MASTG rules) brew install android-platform-tools # adb ``` ### Linux (Ubuntu/Debian) ``` # 基础工具 sudo apt update sudo apt install -y openjdk-21-jre-headless jadx apktool adb curl # semgrep (推荐通过 pipx) python3 -m pip install --user pipx python3 -m pipx ensurepath pipx install semgrep # apkeep (官方二进制文件) APKEEP_VERSION="0.18.0" curl -L -o /tmp/apkeep.tgz \ "https://github.com/EFForg/apkeep/releases/download/v${APKEEP_VERSION}/apkeep-x86_64-unknown-linux-musl.tar.gz" tar -xzf /tmp/apkeep.tgz -C /tmp sudo install /tmp/apkeep /usr/local/bin/apkeep apkeep --version ``` ### Java(jadx 和 apktool 需要) ``` # 需要 Java 11+。使用 OpenJDK 的示例: brew install openjdk@21 ``` 已测试版本:`openjdk 23.0.1` ### Android SDK(emulator 和 APK 签名需要) 从 [Android Studio](https://developer.android.com/studio) 安装或使用 `sdkmanager`。 该工具会自动在 `~/Library/Android/sdk` (macOS) 处检测 SDK。 所需组件: ``` # 从 Android Studio → SDK Manager,或使用 sdkmanager: sdkmanager "platform-tools" # adb sdkmanager "emulator" # AVD emulator sdkmanager "build-tools;34.0.0" # apksigner, zipalign sdkmanager "system-images;android-34;google_apis;arm64-v8a" # AVD image avdmanager create avd -n nutcracker_avd -k "system-images;android-34;google_apis;arm64-v8a" ``` ## Python 安装 ``` git clone cd nutcracker python3 -m venv .venv source .venv/bin/activate pip install -r requirements.txt ``` ### Python 依赖项 (requirements.txt) | 包 | 用途 | |---|---| | `androguard` | 静态 APK 分析 (DEX、manifest、字符串) | | `click` | CLI | | `rich` | 带颜色和加载动画的终端输出 | | `pyyaml` | 读取 `config.yaml` | | `fpdf2` | PDF 报告生成 | | `loguru` | 结构化日志 | | `requests` | HTTP(下载 frida-server、内部通信) | ## Docker 使用(混合模式) 此模式在 Docker 内部运行 `nutcracker`,并使用连接到宿主机上的 emulator/device。 这是针对 Windows + WSL 推荐的选项。 ### 1) 构建并打开容器 shell ``` docker compose build docker compose run --rm nutcracker ``` ### 2) 验证容器的 ADB 能否看到宿主机 在容器内: ``` adb devices frida-ls-devices ``` 如果什么都没出现,请在宿主机 (Windows/Linux/macOS) 上重启 ADB: ``` adb kill-server adb start-server adb devices ``` ### 3) 从容器运行分析 ``` python nutcracker.py analyze downloads/app.apk ``` ### Windows + WSL 注意事项 - Emulator 通常运行在 Windows 上,而不是 WSL 内部。 - 容器通过 `ADB_SERVER_SOCKET=tcp:host.docker.internal:5037` 连接到宿主机的 `adb server`。 - 如果 Frida 无法解析 `-D emulator-xxxx`,请使用 `-U`(项目 pipeline 已针对 emulator 处理了此情况)。 ## 静态分析规则 (semgrep) 针对 jadx 反编译代码的 OWASP MASTG 规则来自: [mindedsecurity/semgrep-rules-android-security](https://github.com/mindedsecurity/semgrep-rules-android-security) ``` git clone https://github.com/mindedsecurity/semgrep-rules-android-security \ semgrep_rules_android # 更新: git -C ./semgrep_rules_android pull ``` 该路径在 `config.yaml` 中配置: ``` strategies: scanner_config: "p/secrets ./semgrep_rules_android/rules" ``` ## 获取 Google Play AAS Token apkeep 需要长效 AAS token 才能从 Google Play 下载。 ``` # 交互式助手(在设备上进行分步引导): python nutcracker.py setup-token # 可选:选择设备和方法 python nutcracker.py setup-token --serial emulator-5554 --method auto ``` ## 基本用法 ``` source .venv/bin/activate # 分析本地 APK: python nutcracker.py analyze downloads/app.apk # 从 Google Play 下载并分析 (URL 或 package ID): python nutcracker.py scan 'https://play.google.com/store/apps/details?id=com.example.app' python nutcracker.py analyze com.example.app # 从 package list 进行批量扫描: python nutcracker.py batch packages.txt ``` ### `launch` 命令 — 手动 Frida 绕过 使用为该 package 生成的最后一个绕过脚本,启动一个已安装的应用: ``` # 为 package 使用最新的 bypass script: python nutcracker.py launch com.example.app # 指定特定的模拟器: python nutcracker.py launch com.example.app --serial emulator-5554 # 手动指定 script: python nutcracker.py launch com.example.app --script frida_scripts/bypass_com.example.app_....js # 直接传递 APK 路径 (从文件名中提取 package): python nutcracker.py launch downloads/com.example.app/com.example.app.apk ``` 该命令会: 1. 在设备上重启 frida-server(杀死任何现有进程)。 2. 运行 `adb root` 以获取上下文 `u:r:su:s0` — 在 **Android 14 上是必需的**,以便 frida-server 可以读取 `/sys/fs/selinux/policy`。 3. 通过 `frida -f -l