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, 请求拦截, 静态分析