link0-o/BinSight
GitHub: link0-o/BinSight
BinSight 是一款结合静态分析、本地规则引擎、RAG 知识库和可选 LLM 评估的 ELF/PE 可执行文件风险扫描器,生成基于证据的结构化风险报告。
Stars: 0 | Forks: 0
# BinSight
中文文档: [README.zh-CN.md](README.zh-CN.md)
BinSight 扫描可执行文件并生成基于证据的风险报告。它使用确定性的扫描 pipeline、本地风险规则、本地 RAG 知识以及可选的 LLM 评估步骤。该扫描器不是一个完全自主的 agent:工具执行是固定且可审计的,同时报告会将本地、AI 和最终融合的评估结果分开保留。
## 功能
- 原生 Linux 和 Windows CLI 构建。
- 面向 Windows 和桌面 Linux 的可选 Qt 6 Widgets GUI。
- ELF 和 PE 格式检测。
- 由 LIEF 支持的生产级 PE/ELF 解析,用于提取导入表、节区、架构和位数。
- 内置备用解析器,适用于依赖受限或离线开发构建。
- 无需外部 `strings` 命令即可提取可疑的 ASCII 和 UTF-16LE 字符串。
- 当 `objdump` 或 `llvm-objdump` 可用时,提供可选的有界反汇编片段。
- YAML 风格的风险规则,本地 Markdown RAG 上下文,以及 Markdown/JSON 报告。
- 安全优先的默认静态模式,以及明确的 Linux Docker 和 Windows ETW 专家级动态观察。
- LLM 提供商:
- `none` 用于离线的纯规则报告。
- `openai` 用于官方 OpenAI Responses API。
- `openai-compatible` 用于通用的 `/chat/completions` 兼容端点。
- 针对 DeepSeek、Kimi/Moonshot、GLM/Zhipu、Qwen/DashScope、SiliconFlow 和 OpenRouter 的提供商预设。
- `anthropic` 和 `deepseek-anthropic` 用于 Anthropic 兼容的 messages API。
- `ollama` 用于本地 Ollama 生成。
## 下载
对于日常使用,请从 GitHub Releases 下载软件包:
- `BinSight-vX.Y.Z-windows-x86_64.zip`
- `BinSight-vX.Y.Z-linux-x86_64.tar.gz`
Windows:
```
.\Open BinSight GUI.lnk
.\Scan with BinSight.lnk
.\bin\binsight.exe scan .\sample.exe
.\bin\binsight.exe gui
```
Linux:
```
./bin/binsight scan ./sample
./bin/binsight gui
```
发布包包含 `rules/`、`knowledge/`、`docs/` 和 `docker/`。如果构建包含 Qt,它还将包含 `bin/binsight-gui` 或 `bin/binsight-gui.exe`。Windows GUI 包通过 Qt 官方的 `windeployqt` 工具部署所需的 Qt 运行时 DLL。Windows 包还包含面向新用户的根目录级 `.lnk` 快捷方式和 `.cmd` 启动器。如果未提供 `--rules-dir` 或 `--knowledge-dir`,BinSight 会在可执行文件包结构旁边查找这些目录。
## 从源码构建
Linux:
```
cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release
cmake --build build
ctest --test-dir build --output-on-failure
```
使用 Visual Studio 2022 的 Windows:
```
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build --config Release
ctest --test-dir build --build-config Release --output-on-failure
```
包含 LIEF 的生产解析器构建:
```
cmake -S . -B build -DBINSIGHT_USE_LIEF=ON
```
`BINSIGHT_USE_LIEF` 默认为 ON。仅在依赖受限或离线开发构建时使用 `-DBINSIGHT_USE_LIEF=OFF`。
GUI 构建:
```
cmake -S . -B build -DBINSIGHT_BUILD_GUI=AUTO
cmake -S . -B build -DBINSIGHT_BUILD_GUI=ON # require Qt 6 Widgets
cmake -S . -B build -DBINSIGHT_BUILD_GUI=OFF # CLI only
```
`AUTO` 是默认值。当 Qt 6 Widgets 可用时,CMake 会构建 `binsight-gui`;否则 CLI 保持完全可用状态。
BinSight 遵循 [工业组件优先原则](docs/DESIGN_PRINCIPLES.md):优先使用成熟的可嵌入组件,而不是自定义解析器或依赖特定的 CLI 工具。LIEF 是生产级的 PE/ELF 解析器。内置解析器是一个 **临时 / 原型 / 教育性质** 的后备实现。
## 用法
离线分析:
```
./build/binsight scan ./sample
```
默认进行静态分析,绝不执行目标。
Linux 轻量级动态观察:
```
docker build -t binsight-observer:latest docker/linux-observer
./build/binsight observe linux-docker ./sample \
--out dynamic.json \
--i-understand-risk
./build/binsight scan ./sample --dynamic-report dynamic.json
```
Docker 观察并非恶意软件级别的沙箱。它使用受限的容器设置并默认禁用网络,但容器与宿主机共享内核。仅在实验室机器或您已准备好执行的样本上使用它。对于高风险的加壳恶意软件,请使用专用的 VM 或专业沙箱。
Windows ETW 专家观察:
```
.\bin\binsight.exe observe windows-etw .\sample.exe `
--out dynamic.json `
--i-understand-risk `
--timeout 90 `
--max-events 5000 `
--max-json-bytes 10485760
.\bin\binsight.exe scan .\sample.exe --dynamic-report dynamic.json
```
Windows ETW 专家观察会在本地 Windows 主机上执行目标。它不是沙箱,无法阻止恶意行为。它仅写入有限的 JSON 摘要,而不是原始的 `.etl` 日志,从而保持发布包大小和单次运行的存储空间可控。请参阅 [Windows ETW 观察](docs/WINDOWS_ETW_OBSERVATION.md)。
默认情况下,BinSight 会写入:
- `report.zh-CN.md`
- `report.en.md`
- `report.json`
当启用在线 AI 提供商并使用 `--report-lang both` 时,BinSight 会分别针对中文和英文 Markdown 报告请求特定语言的 AI 评估文本。这可能会发起不止一次模型请求,但能确保每份面向人类的报告在语言上保持一致。
Windows 构建会将中文 Markdown 报告以带 BOM 的 UTF-8 格式写入,以便 Windows 编辑器能够可靠地检测编码。Linux 和 macOS 构建则将 Markdown 保持为不带 BOM 的 UTF-8 格式。
需要时选择单一的 Markdown 语言:
```
./build/binsight scan ./sample --report-lang zh-CN
./build/binsight scan ./sample --report-lang en
```
交互式配置:
```
./build/binsight config wizard
./build/binsight config show
```
图形化配置和扫描:
```
./build/binsight gui
./build/binsight-gui
```
GUI 支持英文/中文界面文本、文件拖放、输出目录选择、报告语言选择、提供商/模型预设、在平台支持时安全保存 API key,以及报告预览/打开按钮。在没有 `DISPLAY` 或 `WAYLAND_DISPLAY` 的 Linux 系统上,`binsight gui` 将回退并提供 CLI 使用提示,而不是尝试打开窗口。
模型选择器是可编辑的,因此用户可以输入尚不在预设列表中的特定供应商模型 ID。“AI 配置”选项卡还包含一个轻量级的模型连接测试,该测试仅发送一个简短的连通性 prompt,而不是二进制报告。较慢的模型可能需要几十秒的时间;默认的 AI 超时时间为 90 秒,可以在 GUI、配置向导中或使用 `--llm-timeout` 进行更改。
DeepSeek OpenAI 兼容 API:
```
export DEEPSEEK_API_KEY=...
./build/binsight scan ./sample \
--provider deepseek \
--model deepseek-v4-flash \
--llm-timeout 120
```
DeepSeek Anthropic 兼容 API:
```
export DEEPSEEK_API_KEY=...
./build/binsight scan ./sample \
--provider deepseek-anthropic \
--model deepseek-v4-pro
```
其他 OpenAI 兼容预设:
```
./build/binsight scan ./sample --provider kimi --model kimi-latest
./build/binsight scan ./sample --provider glm --model glm-5.2
./build/binsight scan ./sample --provider qwen --model qwen-plus
```
在 Windows 上,将 API keys 存储在 Windows 凭据管理器中:
```
.\bin\binsight.exe config set-key --provider deepseek
.\bin\binsight.exe config wizard
```
配置文件仅存储非敏感值和凭据引用名称。API keys 不会被写入报告、JSON 或明文配置文件中。
OpenAI:
```
export OPENAI_API_KEY=...
./build/binsight scan ./sample \
--provider openai \
--base-url https://api.openai.com/v1 \
--model gpt-5.5 \
--api-key-env OPENAI_API_KEY \
--out report.md \
--json report.json
```
对于第三方的 OpenAI 兼容端点,请使用 `--provider openai-compatible` 或使用诸如 `deepseek`、`kimi`、`glm` 或 `qwen` 等供应商预设。
在扫描前测试提供商/模型:
```
./build/binsight config test-llm --provider deepseek --model deepseek-v4-flash
./build/binsight config test-llm --provider kimi --model kimi-latest
```
Ollama:
```
./build/binsight scan ./sample \
--provider ollama \
--base-url http://localhost:11434 \
--model llama3.1 \
--out report.md \
--json report.json
```
## 报告
Markdown 报告是特定于语言的,旨在供人类阅读。JSON 报告旨在用于自动化、测试以及未来的 MCP/agent 集成。风险结论包含证据引用,例如导入函数、可疑字符串、节区、库、RAG 上下文以及可选的反汇编片段。
## 发布
本地打包:
```
cmake --build build --target package
```
GitHub 发布:
```
git tag v0.2.0
git push origin v0.2.0
```
推送 Tag 会触发发布工作流,并将 Linux/Windows 软件包上传到 GitHub Releases。
标签:AI评估, Bash脚本, DAST, DNS 反向解析, ELF/PE解析, 云安全监控, 可执行文件分析, 恶意软件分析, 本地RAG, 请求拦截, 静态分析