一个完全在智能手机上运行的自主渗透测试代理。把手机丢到网络上,然后走开,它就能发现主机、映射服务、查找漏洞并生成渗透测试报告——全程无需云连接。
░█▄░█ █ █▀▀ █░█ ▀█▀ █▀▀ █▀█ ▄▀█ █░█░█ █░░ █▀▀ █▀█
░█░▀█ █ █▄█ █▀█ ░█░ █▄▄ █▀▄ █▀█ ▀▄▀▄▀ █▄▄ ██▄ █▀▄ v0.1.0
AUTONOMOUS MOBILE PENTEST AGENT
OnePlus 8 · NetHunter · LFM2.5-1.2B · OpenCL GPU
渗透测试(Pentesting)是一种通过模拟攻击来测试计算机网络安全性的实践——前提是获得网络所有者的明确许可。专业渗透测试人员受雇于在真正的攻击者之前发现漏洞。
Nightcrawler 在手机上自动化了这一过程。它使用一个在手机 GPU 上本地运行的小型 AI 模型(LFM2.5-1.2B-Instruct-Heretic,12 亿参数)来决定下一步做什么——探测哪台主机、使用哪个工具、查找什么内容。无需互联网连接或云 API。
▶️ 在 Instagram 上观看 Nightcrawler 的实际运行
该代理的运行方式类似于一位耐心的人类渗透测试人员——它在主机之间轮换,每轮只执行一个小操作,并在数小时内逐步积累知识。这使得它比那些同时向所有主机发起扫描的传统漏洞扫描器更难被检测到。
┌──────────────────────────────────────────────────────────┐
│ 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。
完整功能参考请参阅 docs/FEATURES.md。
所有推理均通过 Adreno 650 GPU 上的 OpenCL 进行:
注意: Android 在电池供电时会限制 GPU 性能(6 倍降速)。Nightcrawler 包含一个 GPU 调速守护进程,可强制最大性能并在电量 ≤15% 时自动降速。
# 1. 安装(在 Kali NetHunter chroot 内)
bash INSTALL.sh
# 2. 等待 llama-server 启动(开机后约 5 分钟)
curl -s http://127.0.0.1:8080/health # 应返回 {"status":"ok"}
# 3. 启动所有服务
bash scripts/run-36h.sh
# 4. 打开 Web 仪表盘(从 Tailscale 网络中的任何设备访问)
# https://<your-tailscale-hostname>:8888
NC_DRY_RUN=1 python3 main.py
这会使用一个模拟 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" # 你的任务 ID
scope:
networks: ["auto"] # "auto" = 启动时从 wlan0 自动检测
excluded_hosts: ["auto"] # "auto" = 网关 + 自身 IP
excluded_ports: [502, 503] # 永不触碰的 SCADA/ICS 端口
authorization: "ROE-YYYY-XXX.pdf"
max_runtime_hours: 0 # 0 = 无限制
model:
local:
ctx_size: 8192
port: 8080
动态范围检测意味着在不同网络之间切换时无需修改任何配置——代理会在启动时从 wlan0 读取当前子网。
nightcrawler/
├── main.py # 入口点
├── config.yaml # 任务范围 + 模型配置
├── scope_proxy.py # 范围强制代理
├── INSTALL.sh # 安装脚本
│
├── agent/ # 核心代理逻辑
│ ├── loop.py # 决策循环 + 错误恢复
│ ├── planner.py # 阶段状态机(侦察 → 漏洞利用)
│ ├── llm_client.py # LLM API 客户端(llama.cpp / 远程)
│ ├── db.py # SQLite 后端(主机、漏洞、凭据)
│ ├── host_memory.py # 每主机观察记录 + 自动标记
│ ├── cve_db.py # 24,956 条 CVE 数据库
│ ├── attack_planner.py # 漏洞利用阶段的战略指令
│ ├── output_parser.py # 从工具输出中提取结构化数据
│ ├── offline_manager.py # WiFi 破解流水线状态机
│ ├── net_detect.py # 从 wlan0 自动检测网络
│ ├── cover_traffic.py # 与真实 Web 流量混合的隐蔽技术
│ ├── passive_capture.py # 后台 tcpdump 捕获广播流量
│ └── ...
│
├── proxy/ # 范围强制组件
│ ├── scope.py # IP/端口/主机验证
│ ├── rate_limiter.py # 命令速率限制 + 抖动
│ └── command_filter.py # 破坏性命令黑名单
│
├── webui/ # Web 仪表盘(Flask)
│ ├── server.py # API + 隐蔽中间件
│ └── templates/index.html # 仪表盘 UI
│
├── data/ # 静态数据文件
│ ├── cve_exploits.json # CVE→利用命令映射
│ └── playbooks.json # 27 个多步骤攻击剧本
│
├── prompts/ # LLM 提示模板(支持热重载)
├── scripts/ # 运维脚本(启动、停止、看门狗)
├── tests/ # 测试套件(API、UI、离线模式)
├── kernels/ # WiFi 驱动模块 + 内核文档
├── simulation/ # 试运行模拟服务器
├── docs/ # 架构、GPU 设置、功能文档
├── logs/ # 运行时数据(gitignored)
└── models/ # 模型文件(gitignored)
代理使用一个简单但有效的循环:
REASONING: ... COMMAND: ...1.2B 模型约有 50% 的命令成功率(这是其规模固有的限制)。代理通过以下方式弥补:
位于 :8888 的仪表盘提供实时监控和控制:
仪表盘经过隐蔽过滤:它伪装 nginx 头,并对来自目标网络的连接返回空 404。
来自跨多个网络 72+ 小时的自主运行:
欢迎贡献!指南请参阅 CONTRIBUTING.md。
# 克隆仓库
git clone https://github.com/garagehq/nightcrawler.git
cd nightcrawler
# 试运行模式(无需真实命令,无需硬件)
NC_DRY_RUN=1 python3 main.py
# 运行测试
python3 -m pytest tests/
此工具仅用于授权的渗透测试。 在部署 Nightcrawler 之前,你必须获得网络所有者的书面许可(交战规则)。未经授权对你不拥有或未被许可测试的网络使用此工具是违法的。
MIT——详情请参阅 LICENSE。
如果你喜欢这个项目,可以请我喝杯咖啡 ☕:
| 术语 | 含义 |
|---|
| Drop box | 留在目标网络上自主执行测试的设备 |
| Scope(范围) | 你被授权测试的网络/主机集合 |
| Rules of Engagement(交战规则,ROE) | 规定你可以做什么的法律文件 |
| Stealth(隐蔽性) | 避免被网络监控(IDS/IPS)检测到的技术 |
| MCP | Model Context Protocol——AI 工具使用的标准接口 |
| C2 | Command and Control——用于监控和操控代理的 Web 仪表盘 |
| 模型 | 量化 | 提示速度 | 生成速度 |
|---|
| LFM2.5-1.2B-Instruct-Heretic(生产环境) | Q8_0 | 115 tok/s | 13 tok/s |
| Qwen3.5-0.8B | Q8_0 | 30.5 tok/s | 6.3 tok/s |
| Qwen3.5-4B | Q4_0 | 10.1 tok/s | 2.0 tok/s |