开源项目展示AI Agent在本地安全审计中的应用,可在智能手机上独立运行,无需云端依赖。
一个完全在智能手机上运行的自主渗透测试智能体。将手机放在网络上然后离开,它会发现主机、绘制服务地图、发现漏洞并生成渗透测试报告——全程不需要云连接。
░█▄░█ █ █▀▀ █░█ ▀█▀ █▀▀ █▀█ ▄▀█ █░█░█ █░░ █▀▀ █▀█
░█░▀█ █ █▄█ █▀█ ░█░ █▄▄ █▀▄ █▀█ ▀▄▀▄▀ █▄▄ ██▄ █▀▄ v0.1.0
AUTONOMOUS MOBILE PENTEST AGENT
OnePlus 8 · NetHunter · LFM2.5-1.2B · OpenCL GPU
渗透测试(pentesting)是通过模拟攻击来测试计算机网络安全的做法——需要得到网络所有者的明确许可。专业的渗透测试人员被聘用来在真正的攻击者之前发现漏洞。
Nightcrawler 在手机上实现了这一过程的自动化。它使用一个小型 AI 模型(LFM2.5-1.2B-Instruct-Heretic,12 亿参数)在手机的 GPU 上本地运行,用来决定下一步该做什么——应该探测哪台主机、使用哪个工具、查找什么。不需要互联网连接或云 API。
▶️ 在 Instagram 上观看 Nightcrawler 的实际演示
如果在没有 WiFi 的情况下部署,它可以自主使用外部 USB WiFi 适配器破解 WPA2 网络
使用隐蔽扫描发现网络上的设备
探测发现的服务(web 服务器、文件共享、SSH、DNS 等)
测试已知漏洞和默认凭证
生成结构化的渗透测试报告,包含发现和修复建议
该智能体的运作方式像一个耐心的人工渗透测试人员——它在主机间轮换,每次只执行一个小操作,逐渐在数小时内建立知识库。这使得它比传统漏洞扫描工具(一次性轰炸所有主机)更难被检测。
┌──────────────────────────────────────────────────────────┐
│ PHONE (OnePlus 8) │
│ │
│ ┌─────────────┐ ┌──────────────────┐ │
│ │ LFM2.5 │ │ Agent Loop │ │
│ │ 1.2B model │◄───►│ (main.py) │ │
│ │ on GPU │ │ Decides what │ │
│ │ (:8080) │ │ to do next │ │
│ └─────────────┘ └────────┬─────────┘ │
│ │ │
│ ┌────────▼─────────┐ │
│ │ Scope Proxy │ ← Safety layer │
│ │ Validates every │ Blocks out- │
│ │ command before │ of-scope │
│ │ execution │ actions │
│ └────────┬─────────┘ │
│ │ │
│ ┌────────▼─────────┐ │
│ │ Kali MCP Server │ ← Runs the │
│ │ nmap, curl, │ actual │
│ │ smbclient, ... │ commands │
│ └──────────────────┘ │
│ │
│ ┌──────────────────┐ ┌──────────────────┐ │
│ │ Web Dashboard │ │ SQLite DB │ │
│ │ (:8888) │ │ Hosts, vulns, │ │
│ │ Monitor & steer │ │ creds, commands │ │
│ └──────────────────┘ └──────────────────┘ │
└──────────────────────────────────────────────────────────┘
完整系统设计见 docs/ARCHITECTURE.md。
完全自主——运行期间无人工干预
100% 本地推理——AI 在手机的 GPU 上运行,不需要云
范围强制——双层防御防止超范围操作
隐蔽优先——扫描速率慢、主机轮换、掩护流量、仅使用 nmap -T2
27 个利用剧本——自动执行的多步攻击链
24,956 条 CVE 数据库——版本感知的漏洞匹配
Web 仪表板——实时监控、主机管理、C2 控制
WiFi 破解模式——使用 USB 适配器的自主 WPA2 破解(Pwnagotchi 启发)
被动发现——mDNS/NBNS/DHCP/ARP 广播的后台捕获
多网络——数据按网络隔离,通过 MAC 键控主机存活 DHCP 变更
自我修复——垃圾检测、上下文重置、看门狗、卡死检测
训练捕获——记录成功交互供未来模型微调
报告生成——可下载的渗透测试报告,包含漏洞、利用链和修复步骤
完整特性参考见 docs/FEATURES.md。
带有 Kali NetHunter 的 Android 手机(在 OnePlus 8、Snapdragon 865 上测试)
通过 Magisk 获得 Root 访问权限
12GB+ RAM(模型使用约 1.3GB,Android 使用约 4GB,剩余供工具使用)
用于离线 WiFi 破解模式的 USB WiFi 适配器(推荐 Ralink RT3572)
支持监听模式的自定义内核(build guide)
NVIDIA AGX 用于通过 Tailscale 卸载到更大的模型
所有推理通过 Adreno 650 GPU 上的 OpenCL 执行:
注意:Android 在电池供电时会限流 GPU(6 倍减速)。Nightcrawler 包含一个 GPU 调速守护程序,可强制最大性能并在 ≤15% 电量时自动降流。
# 1. Install (inside Kali NetHunter chroot)
bash INSTALL.sh
# 2. Wait for llama-server to start (~5 min after boot)
curl -s http://127.0.0.1:8080/health # Should return {"status":"ok"}
# 3. Start all services
bash scripts/run-36h.sh
# 4. Open the web dashboard (from any device on your Tailscale network)
# https://<your-tailscale-hostname>:8888
NC_DRY_RUN=1 python3 main.py
这使用了一个 mock Kali 服务器,你可以在不执行真实网络命令的情况下测试智能体循环。
kali-server-mcp --port 5000 &
python3 scope_proxy.py --config config.yaml --port 8800 --upstream http://127.0.0.1:5000 &
bash scripts/webui-daemon.sh start
python3 main.py &
在部署前编辑 config.yaml:
mission:
id: "CLIENT-YYYY-XXX" # Your engagement ID
scope:
networks: ["auto"] # "auto" = detect from wlan0 at startup
excluded_hosts: ["auto"] # "auto" = gateway + self IP
excluded_ports: [502, 503] # SCADA/ICS ports to never touch
authorization: "ROE-YYYY-XXX.pdf"
max_runtime_hours: 0 # 0 = no limit
model:
local:
ctx_size: 8192
port: 8080
动态范围检测意味着在网络之间移动时无需更改配置——智能体在启动时从 wlan0 读取当前子网。
nightcrawler/
├── main.py # Entry point
├── config.yaml # Mission scope + model config
├── scope_proxy.py # Scope enforcement proxy
├── INSTALL.sh # Installer
│
├── agent/ # Core agent logic
│ ├── loop.py # Decision loop + error recovery
│ ├── planner.py # Phase state machine (recon → exploit)
│ ├── llm_client.py # LLM API client (llama.cpp / remote)
│ ├── db.py # SQLite backend (hosts, vulns, creds)
│ ├── host_memory.py # Per-host observations + auto-tagging
│ ├── cve_db.py # 24,956-entry CVE database
│ ├── attack_planner.py # Strategic directives for exploit phase
│ ├── output_parser.py # Extract structured data from tool output
│ ├── offline_manager.py # WiFi breach pipeline state machine
│ ├── net_detect.py # Auto-detect network from wlan0
│ ├── cover_traffic.py # Stealth blending with realistic web traffic
│ ├── passive_capture.py # Background tcpdump for broadcast traffic
│ └── ...
│
├── proxy/ # Scope enforcement components
│ ├── scope.py # IP/port/host validation
│ ├── rate_limiter.py # Command rate limiting + jitter
│ └── command_filter.py # Destructive command blocklist
│
├── webui/ # Web dashboard (Flask)
│ ├── server.py # API + stealth middleware
│ └── templates/index.html # Dashboard UI
│
├── data/ # Static data files
│ ├── cve_exploits.json # CVE→exploit command mappings
│ └── playbooks.json # 27 multi-step attack playbooks
│
├── prompts/ # LLM prompt templates (hot-reloadable)
├── scripts/ # Operational scripts (start, stop, watchdogs)
├── tests/ # Test suites (API, UI, offline mode)
├── kernels/ # WiFi driver modules + kernel docs
├── simulation/ # Dry-run mock server
├── docs/ # Architecture, GPU setup, features
├── logs/ # Runtime data (gitignored)
└── models/ # Model files (gitignored)
智能体使用一个简单但有效的循环:
选择目标——加权随机选择(70% 已知端口的主机,30% 新发现)
构建上下文——将主机内存、网络观察和阶段指导注入 prompt
询问 LLM——模型输出 REASONING: ... COMMAND: ...
验证——范围代理检查命令是否在范围内且不具有破坏性
执行——命令通过 Kali MCP 服务器运行
学习——输出解析器提取发现,更新主机内存
重置上下文——清除对话,保持持久内存,重复
1.2B 模型的命令成功率约为 50%(这是其大小固有的)。智能体通过以下方式进行补偿:
垃圾检测——5 连击重置,使用不同的 few-shot 示例
重复检测——强制工具/目标多样化
基于时间的卡死检测——5 分钟后停止强制上下文重置
直接剧本执行——多步攻击绕过 LLM 直接执行
:8888 处的仪表板提供实时监控和控制:
实时源——每个命令、发现和智能体决定
主机卡片——可点击的卡片显示端口、服务、漏洞
网络地图——交互式力导向图(拖动、缩放、平移)
漏洞详情——CVE 标签、利用链、修复步骤
C2 控制——标记/黑名单主机、强制阶段、暂停/继续、注入命令
离线模式——Pwnagotchi 启发的 WiFi 攻击 UI,带动画面孔
仪表板采用隐蔽过滤:它欺骗 nginx 标头并对来自目标网络的连接返回空 404。
来自 72+ 小时的跨多个网络的自主运行:
每个网络发现 30+ 台主机
自主执行 2,000+ 命令
发现多个服务中的 10+ 个漏洞
通过直接执行 6+ 个剧本
整个过程中智能体内存稳定在 35-50MB(无泄漏)
欢迎贡献!详见 CONTRIBUTING.md 的指南。
模型微调——将命令格式合规率从约 50% 提升到 85% 以上
新剧本——为更多服务添加利用链
CVE 数据库——扩大覆盖范围超出当前的 24,956 条条目
适配器支持——测试更多 USB WiFi 芯片组
文档——教程、不同手机的设置指南
测试——更多测试覆盖,特别是边界情况
# Clone the repo
git clone https://github.com/garagehq/nightcrawler.git
cd nightcrawler
# Dry-run mode (no real commands, no hardware needed)
NC_DRY_RUN=1 python3 main.py
# Run tests
python3 -m pytest tests/
此工具仅用于授权渗透测试。在部署 Nightcrawler 之前,你必须从网络所有者处获得书面许可(Rules of Engagement)。未经授权针对你不拥有或没有测试权限的网络使用是违法的。
MIT——详见 LICENSE。
如果你喜欢这个项目,可以给我买杯咖啡 ☕: