mirror of
https://github.com/zhaoxuya520/reverse-skill.git
synced 2026-10-17 04:30:58 +08:00
feat: resolve Codex, Binary Ninja, and security review issues
Add an optional Codex adapter, Binary Ninja route and skill, Git-blob security boundaries, payload provenance documentation, and Gradle Wrapper verification. Closes #47 Closes #121 Closes #125
This commit is contained in:
@@ -129,6 +129,7 @@ jobs:
|
||||
Get-Content kali/scripts/bootstrap-manifest.json -Raw -Encoding UTF8 | ConvertFrom-Json | Out-Null
|
||||
Get-Content skills/config/routing.json -Raw -Encoding UTF8 | ConvertFrom-Json | Out-Null
|
||||
Get-Content skills/tests/routing-benchmark.json -Raw -Encoding UTF8 | ConvertFrom-Json | Out-Null
|
||||
Get-Content plugins/reverse-skill/.codex-plugin/plugin.json -Raw -Encoding UTF8 | ConvertFrom-Json | Out-Null
|
||||
Write-Host "All JSON valid"
|
||||
|
||||
- name: Doc fact tables vs manifest (verify-doc-facts)
|
||||
@@ -337,6 +338,17 @@ jobs:
|
||||
shell: bash
|
||||
run: python3 skills/scripts/verify-doc-links.py
|
||||
|
||||
- name: Repository executable/reference boundaries
|
||||
shell: bash
|
||||
run: python3 skills/scripts/verify-repository-security.py
|
||||
|
||||
gradle-wrapper-validation:
|
||||
name: Gradle wrapper validation
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||
- uses: gradle/actions/wrapper-validation@9c971963bec38e04b3d30dcc455b5382be2fdbfb # v6.3.0
|
||||
|
||||
version-check:
|
||||
name: version consistency
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
@@ -8,6 +8,8 @@ Versioning follows [Semantic Versioning](https://semver.org/).
|
||||
## [Unreleased]
|
||||
### Added
|
||||
- **CI runs remaining unwired suites** — `test-p0-friction.ps1` on the Windows leg of `routing-tests` (Windows PowerShell 5.1); `case-review/tests/test_review_case.py` in the Linux `case-contract` job. `test-workflow-title-safety.ps1` was already wired.
|
||||
- **Binary Ninja route and skill** — added `binary-ninja-reverse` for HLIL/MLIL/LLIL, Python API, and an explicitly enabled loopback community MCP bridge; Binary Ninja remains a manual commercial dependency.
|
||||
- **Optional Codex adapter plugin** — added `plugins/reverse-skill/` without changing the client-neutral core or auto-registering MCP servers.
|
||||
|
||||
### Fixed
|
||||
- **IDA MCP HTTP stall** — `run-supervisor.py` patches stock `idalib_supervisor` onto `ThreadingHTTPServer` and accepts Streamable HTTP GET `/mcp` (patch failure is skipped, supervisor still starts). Keep-alive deadlock is **time since last healthy `tools/list`**, not process `CreationDate`; `open.ps1` holds `opening.lock` so in-flight opens are never `-Force`d. New `recover.ps1` is an immediate `-Force` path. Never `taskkill`s `ida.exe`.
|
||||
|
||||
@@ -70,7 +70,7 @@ User task
|
||||
|
||||
| Routing rules | Regression benchmark | Core skill modules | CI platforms | Client model |
|
||||
|---:|---:|---:|---|---|
|
||||
| 43 (R0–R44) | 173 cases | 44 tracked modules | Windows + Ubuntu | Client-neutral |
|
||||
| 44 (R0–R45) | 175 cases | 45 tracked modules | Windows + Ubuntu | Client-neutral |
|
||||
|
||||
The routing core is driven by one structured configuration, validated by cross-platform CI, and kept separate from optional client adapters.
|
||||
|
||||
@@ -135,7 +135,7 @@ PRIMARY ladder: [skills/MASTER-ROUTING.md](skills/MASTER-ROUTING.md) · Full mat
|
||||
|
||||
<p align="left">
|
||||
<img src="https://skillicons.dev/icons?i=py,nodejs,powershell,bash,java,docker,git&theme=light" /><br/>
|
||||
<code>IDA Pro</code> · <code>radare2</code> · <code>Ghidra</code>
|
||||
<code>IDA Pro</code> · <code>radare2</code> · <code>Ghidra</code> · <code>Binary Ninja</code>
|
||||
</p>
|
||||
|
||||
<p align="right">(<a href="#about">back to top</a>)</p>
|
||||
@@ -185,6 +185,7 @@ Platform-specific docs:
|
||||
| APK / Android analysis | `skills/apk-reverse/` |
|
||||
| iOS / mobile | `skills/mobile-reverse/` |
|
||||
| Binary reverse (exe/dll/so/elf) | `skills/ida-reverse/` / `skills/radare2/` |
|
||||
| Binary Ninja / HLIL / MLIL / MCP | `skills/binary-ninja-reverse/` |
|
||||
| .NET / C# | `skills/dotnet-reverse/` |
|
||||
| Frontend JS / encrypted params | `skills/js-reverse/` |
|
||||
| DSL VM / custom JS opcode VM | `skills/reverse-engineering/dsl-vm-reverse/` |
|
||||
@@ -244,6 +245,8 @@ GitHub Actions CI runs all of the above on **Windows + Ubuntu** for every push/P
|
||||
|
||||
The routing core, regression suite, manifests, and case workflow do not depend on a specific AI client. Claude Code, Codex, Cursor, OpenCode, and other clients should load the repository through their own adapter or project-instruction mechanism. Client-specific configuration must remain optional and outside the core routing contract.
|
||||
|
||||
For Codex, the repository also exposes an optional adapter plugin at [`plugins/reverse-skill/`](plugins/reverse-skill/). It delegates to the repository's existing routing core and does not register external MCP servers automatically.
|
||||
|
||||
### Repository layout
|
||||
|
||||
```
|
||||
@@ -324,7 +327,7 @@ This project is intended solely for lawful security research, education, CTF com
|
||||
|
||||
## Installation and download security
|
||||
|
||||
See [Installation and Download Security Guidance](docs/UV-AND-DOWNLOAD-SECURITY.md).
|
||||
See [Security Policy](SECURITY.md), [Installation and Download Security Guidance](docs/UV-AND-DOWNLOAD-SECURITY.md), and the [2026-09-03 repository security review](docs/SECURITY-REVIEW-2026-09-03.md).
|
||||
|
||||
## Community quick start and issue triage
|
||||
|
||||
|
||||
@@ -248,6 +248,7 @@ Full dependency table with paths in the original [README.md](README.md).
|
||||
| Tool index | `tool-index.md` | Check whether local tools exist, where they are, and which scripts call them |
|
||||
| APK reverse engineering | `apk-reverse\` | Unpack, jadx, smali, repackaging, Frida, native dispatch; optional licensed JEB Pro cross-check |
|
||||
| IDA Pro | `ida-reverse\` | Deep binary RE and `idapro_*` workflows |
|
||||
| Binary Ninja | `binary-ninja-reverse\` | HLIL/MLIL/LLIL, Python API, and optional loopback MCP integration |
|
||||
| JS / Web | `js-reverse\` | Frontend signatures, request chains, environment simulation, SourceMap / AST / Hook |
|
||||
| radare2 | `radare2\` | CLI reconnaissance, strings, imports/exports, patching |
|
||||
| General methodology | `reverse-engineering\` | Cross-language, cross-platform, anti-analysis, pattern library |
|
||||
@@ -267,6 +268,7 @@ Full dependency table with paths in the original [README.md](README.md).
|
||||
|
||||
- APK / Android → `apk-reverse\SKILL.md`
|
||||
- exe / dll / so / elf → `ida-reverse\SKILL.md` or `radare2\SKILL.md`
|
||||
- Binary Ninja / Binja / HLIL / MLIL → `binary-ninja-reverse\SKILL.md`
|
||||
- Frontend signature / encrypted parameters → `js-reverse\SKILL.md`
|
||||
- HTTP capture / browser sampling / request replay → anything-analyzer, Reqable MCP + `js-reverse`
|
||||
- Penetration testing / port scanning / vulnerability scanning → `pentest-tools\SKILL.md`
|
||||
|
||||
+10
-5
@@ -72,7 +72,7 @@
|
||||
|
||||
| 路由规则 | 回归基准 | 核心 Skill | CI 平台 | 客户端模型 |
|
||||
|---:|---:|---:|---|---|
|
||||
| 43 条(R0–R44) | 173 条用例 | 44 个已跟踪模块 | Windows + Ubuntu | 平台无关 |
|
||||
| 44 条(R0–R45) | 175 条用例 | 45 个已跟踪模块 | Windows + Ubuntu | 平台无关 |
|
||||
|
||||
路由核心由单一结构化配置驱动,通过跨平台 CI 验证,并与各客户端的可选适配层保持分离。
|
||||
|
||||
@@ -137,7 +137,7 @@ PRIMARY 快路径:[skills/MASTER-ROUTING.md](skills/MASTER-ROUTING.md) · 全
|
||||
|
||||
<p align="left">
|
||||
<img src="https://skillicons.dev/icons?i=py,nodejs,powershell,bash,java,docker,git&theme=light" /><br/>
|
||||
<code>IDA Pro</code> · <code>radare2</code> · <code>Ghidra</code>
|
||||
<code>IDA Pro</code> · <code>radare2</code> · <code>Ghidra</code> · <code>Binary Ninja</code>
|
||||
</p>
|
||||
|
||||
<p align="right">(<a href="#关于项目">返回顶部</a>)</p>
|
||||
@@ -181,6 +181,7 @@ git clone https://github.com/zhaoxuya520/reverse-skill.git
|
||||
| APK / Android 逆向 | `skills/apk-reverse/` |
|
||||
| iOS / 移动端 | `skills/mobile-reverse/` |
|
||||
| 二进制逆向 (exe/dll/so/elf) | `skills/ida-reverse/` / `skills/radare2/` |
|
||||
| Binary Ninja / HLIL / MLIL / MCP | `skills/binary-ninja-reverse/` |
|
||||
| .NET / C# | `skills/dotnet-reverse/` |
|
||||
| 前端 JS 签名 / 加密参数 | `skills/js-reverse/` |
|
||||
| DSL VM / 风控自定义 VM | `skills/reverse-engineering/dsl-vm-reverse/` |
|
||||
@@ -215,7 +216,7 @@ git clone https://github.com/zhaoxuya520/reverse-skill.git
|
||||
| [skills/scripts/master-route.ps1](skills/scripts/master-route.ps1) | 一键分诊 |
|
||||
| [skills/scripts/case-init.ps1](skills/scripts/case-init.ps1) | 作战 case 目录(scope/timeline) |
|
||||
| [skills/case-review/](skills/case-review/) | 只读 Evidence 图审查与 artifact fixity 校验 |
|
||||
| [skills/scripts/test-routing.ps1](skills/scripts/test-routing.ps1) | 173 条路由回归基准 |
|
||||
| [skills/scripts/test-routing.ps1](skills/scripts/test-routing.ps1) | 175 条路由回归基准 |
|
||||
| [skills/scripts/verify-routing-coherence.ps1](skills/scripts/verify-routing-coherence.ps1) | 结构一致性与供应链版本固定门禁 |
|
||||
| [skills/ops/](skills/ops/) | Scope / 证据链 / 角色 / 时间线 / skill 供应链安全 |
|
||||
| [skills/references/community-security-skills.md](skills/references/community-security-skills.md) | 社区安全 skill 生态对照(借鉴不并库) |
|
||||
@@ -223,7 +224,7 @@ git clone https://github.com/zhaoxuya520/reverse-skill.git
|
||||
### 修改后验证
|
||||
|
||||
```powershell
|
||||
# 路由回归(173 条)
|
||||
# 路由回归(175 条)
|
||||
powershell -NoProfile -ExecutionPolicy Bypass -File skills/scripts/test-routing.ps1
|
||||
# 结构一致性 + 供应链版本固定门禁
|
||||
powershell -NoProfile -ExecutionPolicy Bypass -File skills/scripts/verify-routing-coherence.ps1
|
||||
@@ -234,6 +235,10 @@ powershell -NoProfile -ExecutionPolicy Bypass -File skills/scripts/extract-summa
|
||||
|
||||
GitHub Actions 会在 Windows 与 Ubuntu 上执行同一套核心检查。
|
||||
|
||||
### 可选 Codex 插件入口
|
||||
|
||||
仓库提供可选 Codex 适配插件 [`plugins/reverse-skill/`](plugins/reverse-skill/)。它委托给仓库现有路由核心,不改变客户端中立架构,也不会自动注册外部 MCP 服务。
|
||||
|
||||
### 仓库结构
|
||||
|
||||
```
|
||||
@@ -319,7 +324,7 @@ GitHub Actions 会在 Windows 与 Ubuntu 上执行同一套核心检查。
|
||||
|
||||
## 安裝與下載安全
|
||||
|
||||
請參閱[安裝與下載安全指引](docs/UV-AND-DOWNLOAD-SECURITY_zh.md)。
|
||||
請參閱[安全政策](SECURITY.md)、[安裝與下載安全指引](docs/UV-AND-DOWNLOAD-SECURITY_zh.md)與[2026-09-03 倉庫安全復審](docs/SECURITY-REVIEW-2026-09-03.md)。
|
||||
|
||||
## 社群問題、快速開始與分類
|
||||
|
||||
|
||||
@@ -323,7 +323,7 @@ Windows (PowerShell):
|
||||
powershell -NoProfile -ExecutionPolicy Bypass -File "<SKILL_ROOT>/skills/scripts/bootstrap-reverse.ps1" -Capability @('tool_name') -StartServices
|
||||
|
||||
Supported capability names (must match `skills/scripts/bootstrap-manifest.json`):
|
||||
jadx, apktool, jeb-pro, frida, frida-ps, idalib-mcp, reqable-mcp, jshookmcp, xquik-mcp, anything-analyzer, idapro, r2, rabin2, adb, agent-browser, ghidra-mcp, seclists, proxycat, burpsuite-mcp, nmap, pentestswarm, binwalk, yara, pwntools, bkcrack
|
||||
jadx, apktool, jeb-pro, binaryninja, frida, frida-ps, idalib-mcp, reqable-mcp, jshookmcp, xquik-mcp, anything-analyzer, idapro, r2, rabin2, adb, agent-browser, ghidra-mcp, seclists, proxycat, burpsuite-mcp, nmap, pentestswarm, binwalk, yara, pwntools, bkcrack
|
||||
|
||||
Do NOT invent capabilities. Tools not listed require manual install steps in the skill docs.
|
||||
```
|
||||
|
||||
+1
-1
@@ -467,7 +467,7 @@ Kali Linux(Bash,含 Kali 原生工具链):
|
||||
bash <本包根目录>/kali/scripts/bootstrap-reverse.sh 工具名 --start-services
|
||||
```
|
||||
|
||||
支持的能力名(与 `skills/scripts/bootstrap-manifest.json` 保持一致,共 25 项):jadx、apktool、jeb-pro、frida、frida-ps、idalib-mcp、reqable-mcp、jshookmcp、xquik-mcp、anything-analyzer、idapro、r2、rabin2、adb、agent-browser、ghidra-mcp、seclists、proxycat、burpsuite-mcp、nmap、pentestswarm、binwalk、yara、pwntools、bkcrack
|
||||
支持的能力名(与 `skills/scripts/bootstrap-manifest.json` 保持一致,共 26 项):jadx、apktool、jeb-pro、binaryninja、frida、frida-ps、idalib-mcp、reqable-mcp、jshookmcp、xquik-mcp、anything-analyzer、idapro、r2、rabin2、adb、agent-browser、ghidra-mcp、seclists、proxycat、burpsuite-mcp、nmap、pentestswarm、binwalk、yara、pwntools、bkcrack
|
||||
|
||||
## 刷新工具索引
|
||||
|
||||
|
||||
+31
@@ -0,0 +1,31 @@
|
||||
# Security policy and trust boundaries
|
||||
|
||||
## Reporting a vulnerability
|
||||
|
||||
Use a [private GitHub security advisory](https://github.com/zhaoxuya520/reverse-skill/security/advisories/new) for vulnerabilities in executable scripts, bootstrap/install paths, CI, MCP bridges, or credential handling. Do not include live credentials or third-party target data in a public issue.
|
||||
|
||||
## Repository trust model
|
||||
|
||||
The repository contains two different surfaces:
|
||||
|
||||
- **Executable surface:** scripts, CI workflows, the Burp bridge, and build tooling. These may create files, install explicitly selected tools, start local services, or update an explicitly selected MCP client configuration.
|
||||
- **Passive research surface:** Markdown/JSON playbooks and payload corpora. These files are not invoked by bootstrap or routing scripts, but their exploit signatures may trigger antivirus products.
|
||||
|
||||
Repository instructions cannot technically prevent a user or external AI client from bypassing the provided entry scripts and calling a tool directly. The enforced boundary covers repository-owned route/case/bootstrap paths; external clients and MCP servers retain their own permission and policy controls.
|
||||
|
||||
## Payload corpus and antivirus detections
|
||||
|
||||
`skills/pentest-tools/src-hunter/references/payloader/` contains non-executable security research strings. In particular, `waf-bypass.md` includes PHP/image-polyglot and encoded web-shell examples that can match malware signatures. Do not disable antivirus protection merely to make a clone succeed.
|
||||
|
||||
Use Git object inspection when a working-tree file is quarantined, keep payload access explicit and scope-gated, and review any corpus hash change before release. The current investigation is documented in [the 2026-09-03 security review](docs/SECURITY-REVIEW-2026-09-03.md).
|
||||
|
||||
## Required checks
|
||||
|
||||
```text
|
||||
python3 skills/scripts/verify-repository-security.py
|
||||
python3 skills/scripts/verify-doc-links.py
|
||||
powershell -File skills/scripts/verify-routing-coherence.ps1
|
||||
powershell -File skills/scripts/smoke.ps1
|
||||
```
|
||||
|
||||
CI additionally validates the Gradle Wrapper with the official Gradle action. Auto-install capabilities remain restricted to `bootstrap-manifest.json`; manual commercial tools are never downloaded automatically.
|
||||
@@ -1,6 +1,7 @@
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip
|
||||
distributionSha256Sum=544c35d6bd849ae8a5ed0bcea39ba677dc40f49df7d1835561582da2009b961d
|
||||
networkTimeout=10000
|
||||
validateDistributionUrl=true
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
|
||||
@@ -6,14 +6,20 @@ This document records which community concerns can be addressed in-repository an
|
||||
|---|---|---|
|
||||
| #21, #86 | AI safety refusal for a particular target | Added authorization-first and defensive-use guidance; this cannot override a client safety policy. |
|
||||
| #44, #61 | Installation and usage questions | Added `QUICKSTART_zh.md` and linked it from both READMEs. |
|
||||
| #47 | Codex/plugin integration request | The project remains client-neutral; client-specific plugin work needs an agreed integration contract. |
|
||||
| #47 | Codex/plugin integration request | Added the optional `plugins/reverse-skill/` adapter; the routing core remains client-neutral. |
|
||||
| #51 | Prefer uv over pip | Added correct guidance for `uv tool install` and `uv pip` without unsafe mechanical replacement. Bootstrap still uses pinned pipx. |
|
||||
| #58, #60 | Low-information reports | Need a reproducible sample, environment, and exact error before a code fix is possible. |
|
||||
| #58 | Antivirus alert | Superseded by the evidence-backed review in `docs/SECURITY-REVIEW-2026-09-03.md` and Issue #125. |
|
||||
| #28, #60 | Test/low-information reports | Closed without code changes because they contain no reproducible problem. |
|
||||
| #62 | iOS workflow evidence threshold | Requires a maintainer decision about workflow policy and test data rather than a blind code change. |
|
||||
| #63 | Account-ban concern | Depends on third-party platform policy; users should follow applicable terms. |
|
||||
| #80 | radare2-skills contribution discussion | Contribution instructions are available in `skills/CONTRIBUTING.md`; maintainers must decide scope and ownership. |
|
||||
| #82 | ZIP download security warning | Covered by `docs/UV-AND-DOWNLOAD-SECURITY.md` plus the quick-start archive checklist. |
|
||||
| #83 | Codex synchronization failure | Added a diagnostic checklist; a client version and reproducible case are still required for a client-side fix. |
|
||||
| #77, #87, #95, #97, #99, #100, #101, #103, #104 | Feature proposals or existing work items | These require separate design review and should not be silently duplicated by a documentation PR. |
|
||||
| #77 | Analysis decision/blind-spot rules | Implemented through PRs #84 and #85 with routing/coherence regression coverage. |
|
||||
| #121 | Binary Ninja MCP/HTTP support | Added `binary-ninja-reverse`, route R45, manual tool discovery, and an explicit loopback community MCP boundary. |
|
||||
| #125 | Repository/payload security review | Published `SECURITY.md`, the 2026-09-03 review, Git-blob CI gates, and Gradle Wrapper verification. |
|
||||
| #127 | macOS installation refusal | Covered by `docs/platforms/macos.md`, the quick start, and client-policy guidance. |
|
||||
| #128 | Grok API provenance | The repository contains no Grok/xAI API client, proxy, key, or reseller endpoint; model providers are configured outside this project. |
|
||||
| #87, #95, #97, #99, #100, #101, #103, #104 | Feature proposals or existing work items | These require separate design review and should not be silently duplicated by a documentation PR. |
|
||||
|
||||
A Pull Request should close only issues that it actually resolves. Discussion items, third-party platform behavior, and reports without reproduction details should remain open for maintainer review.
|
||||
|
||||
+1
-2
@@ -95,7 +95,7 @@ The repository is not tied to one client. Its core assets are `RULES.md`, `skill
|
||||
| Scenario | Main entry |
|
||||
|---|---|
|
||||
| APK / Android analysis | `skills/apk-reverse/`, `skills/mobile-reverse/` |
|
||||
| Binary reverse engineering | `skills/ida-reverse/`, `skills/radare2/`, `skills/reverse-engineering/` |
|
||||
| Binary reverse engineering | `skills/ida-reverse/`, `skills/binary-ninja-reverse/`, `skills/radare2/`, `skills/reverse-engineering/` |
|
||||
| Frontend JS signing / parameter analysis | `skills/js-reverse/` |
|
||||
| HTTP traffic / request replay | BurpSuite MCP, anything-analyzer, browser automation |
|
||||
| CTF / security competitions | `CTF-Sandbox-Orchestrator/` |
|
||||
@@ -212,4 +212,3 @@ Keywords: AI Agent, Skill Router, Tool Orchestration, MCP, Workflow Automation,
|
||||
## License
|
||||
|
||||
MIT License. See [LICENSE](../LICENSE).
|
||||
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
# reverse-skill 包内安全审计(可执行面)
|
||||
|
||||
> 2026-09-03 复审:已扩展到 Git 对象、payload 身份、符号链接、二进制 allowlist、GitHub Action 固定与 Gradle Wrapper 验证。详见 [Repository security review — 2026-09-03](SECURITY-REVIEW-2026-09-03.md)。
|
||||
|
||||
> 日期:2026-08-02
|
||||
> 范围:`skills/**/scripts`、`skills/scripts`、`kali/scripts`、`burp-mcp-full` 可执行脚本与 bootstrap 清单
|
||||
> **不含**:`src-hunter` / payloader 等**教学型 payload 文档**(其 DROP/注入样例属方法论,非自动执行)
|
||||
@@ -124,4 +126,3 @@ rg -n "Invoke-Expression|FromBase64String|DownloadString|rm -rf /|DROP DATABASE"
|
||||
|
||||
- 审计执行:仓库本地静态扫描 + 关键路径人工复核
|
||||
- 结果:无后门 / 无自动删库;供应链加固列为后续改进项
|
||||
'@
|
||||
|
||||
@@ -20,6 +20,8 @@
|
||||
|
||||
本專案保持客戶端中立,因此 OpenCode、Codex、Cursor、Claude Code 與其他客戶端的實際載入方式,仍以各客戶端官方文件為準;不要假設某一個客戶端的 plugin 或同步格式能套用到其他客戶端。
|
||||
|
||||
最可靠的通用方式是把完整 repository 根目錄作為工作區開啟,而不是只把 `skills/` 子目錄複製進客戶端。確認客戶端能讀取根目錄的 `AGENTS.md` / `RULES.md`,再執行平台原生 `master-route`;若客戶端不會自動載入專案規則,就在對話中明確引用 `RULES.md` 和目標 `SKILL.md`。
|
||||
|
||||
## OpenCode、Codex 與同步問題
|
||||
|
||||
若客戶端顯示 `Not Synchronizable` 或無法同步,先確認工作區是否指向完整的 repository 根目錄、檔案權限是否允許讀取,以及客戶端是否支援該目錄格式。最可靠的替代方式是直接在本地工作區開啟 repository,並在對話中明確引用所需的規則或技能文件。若問題仍可重現,回報時請附上客戶端版本、作業系統、完整錯誤訊息與最小重現步驟。
|
||||
@@ -54,3 +56,7 @@ AI 的安全策略不會因為提示中加入「我已授權」就必然允許
|
||||
請遵守 AI 客戶端、GitHub、工具供應商及目標環境的服務條款。repository 本身無法保證第三方平台不會限制帳戶,也不能替平台決定帳戶政策。若要貢獻 radare2 或其他技能,請先閱讀 `skills/CONTRIBUTING.md`,並以小型、可驗證的 Pull Request 提交。
|
||||
|
||||
只有包含完整錯誤訊息、環境資訊與重現步驟的問題,才適合進一步修復。像是只有「病毒」、「gaha」或「test」的回報,請補充檔名、下載 URL、掃描產品、版本與重現方式。
|
||||
|
||||
## 外部模型與 API
|
||||
|
||||
本 repository 不內建、不代理、也不轉售 Grok/xAI API,不會收集或分發 Grok API key。模型與 API endpoint 由使用者在所選 AI 客戶端或供應商中自行配置;使用第三方轉發服務時,請自行核對供應商、資料處理條款與金鑰風險。
|
||||
|
||||
@@ -0,0 +1,100 @@
|
||||
# Repository security review — 2026-09-03
|
||||
|
||||
## Executive summary
|
||||
|
||||
This review addresses GitHub Issue #125 and the Microsoft Defender detection `Backdoor:PHP/ImagePHPBackdoor.A` reported against `skills/pentest-tools/src-hunter/references/payloader/waf-bypass.md`.
|
||||
|
||||
The executable surface showed **no evidence of an implanted backdoor, downloader-to-shell chain, destructive root deletion, database wipe, credential collector, or executable reference to the payload corpus**. The Defender alert is consistent with static signature matching on deliberately embedded security-research strings. The strongest candidate is the file's single image/polyglot sequence at line 2322, which combines a GIF header with PHP dynamic evaluation. Without Defender engine telemetry, this is a high-confidence attribution rather than proof of the vendor's exact signature rule.
|
||||
|
||||
The review also found two hardening gaps and fixed them:
|
||||
|
||||
1. The passive/executable boundary was documented but not continuously enforced. A Git-index CI verifier now checks payload identity, binary allowlists, symlinks, dangerous executable-source patterns, payload references, and full-SHA GitHub Action pins.
|
||||
2. The Gradle 8.7 Wrapper distribution lacked `distributionSha256Sum`, and the tracked wrapper JAR had no official CI validation step. Both controls are now present.
|
||||
|
||||
## Scope and baseline
|
||||
|
||||
- Repository baseline: `71acc8e3115f76bad7a914c36466c1086232288c`
|
||||
- Reviewed paths: all Git-tracked objects, executable source extensions, workflows, bootstrap manifests, the Gradle Wrapper, and the complete history of the flagged payload file
|
||||
- Tools: Git object plumbing, Python 3.14 SHA-256 and policy checks, repository regression scripts
|
||||
- Not performed: dynamic execution of payloads; upload to third-party malware-analysis services; reverse engineering of Defender's proprietary signature database
|
||||
|
||||
## Evidence → Finding → Path
|
||||
|
||||
| Evidence | Observation | Finding | Path |
|
||||
|---|---|---|---|
|
||||
| E-001 | 586 tracked entries; 70 executable-source files; 1 binary-like file; 0 symlinks | F-001: no unexplained executable/binary expansion in baseline | P-001 executable surface review |
|
||||
| E-002 | The only binary-like object is `gradle-wrapper.jar`, SHA-256 `2db75c40782f5e8ba1fc278a5574bab070adccb2d21ca5a6e5ed840888448046` | F-002: wrapper needs explicit provenance validation | P-002 supply-chain hardening |
|
||||
| E-003 | No executable script or workflow references `waf-bypass.md` or the payloader directory | F-003: payload corpus is passive data in repository-owned execution paths | P-003 reference boundary |
|
||||
| E-004 | Payload blob `fdaebd8b5b262ac05c233b7edb1b4d32e8f47fbd`, SHA-256 `0273517455962bb9908264f82e4708b31d541c91c2ec715e8032d6c1376728b5`, 173,699 bytes | F-004: corpus identity is stable and can be gated | P-003 reference boundary |
|
||||
| E-005 | Blob contains two PHP `eval(base64_decode(...))` patterns and one GIF-header-plus-PHP-eval pattern | F-005: detection is plausibly signature-based | P-004 AV attribution |
|
||||
| E-006 | File history has one introduction commit: `9c28c6c` (`release: v1.0.1`) | F-006: no later payload mutation was hidden in normal history | P-004 AV attribution |
|
||||
| E-007 | Bootstrap pin/coherence tests and full-SHA workflow inspection pass | F-007: automatic sources are constrained by manifest and immutable workflow refs | P-002 supply-chain hardening |
|
||||
|
||||
```mermaid
|
||||
flowchart LR
|
||||
A[Git-tracked repository] --> B{Surface classification}
|
||||
B --> C[Executable scripts / CI / bridge]
|
||||
B --> D[Passive Markdown / JSON corpus]
|
||||
C --> E[Pattern scan + pin checks + binary allowlist]
|
||||
D --> F[Git-blob hash + explicit access gate]
|
||||
E --> G[CI pass or block]
|
||||
F --> G
|
||||
D --> H[AV signature may alert]
|
||||
H --> I[Do not execute or disable AV; verify provenance and hash]
|
||||
```
|
||||
|
||||
## Detailed findings
|
||||
|
||||
### F-001 — No implanted executable malware found
|
||||
|
||||
The executable scan found two explainable high-signal constructs in the baseline:
|
||||
|
||||
- a loopback `/dev/tcp` port probe in Kali tool discovery;
|
||||
- dynamic loading of selected function ASTs in a Codex encoding regression test.
|
||||
|
||||
The regression test now uses `ScriptBlock.Create` instead of `Invoke-Expression`, reducing ambiguous scanner signals. The TCP client and `/dev/tcp` occurrences remain allowlisted health probes with fixed source paths.
|
||||
|
||||
### F-002 — Payload alert attribution
|
||||
|
||||
The flagged file is Markdown, but signature scanners inspect byte sequences regardless of extension. Its image-header-plus-PHP-evaluation example closely resembles an image/PHP polyglot web shell, which is consistent with the reported detection family. Other nearby examples include encoded PHP evaluation and command-execution strings.
|
||||
|
||||
This establishes a plausible static-signature cause. It does **not** establish that every antivirus alert on every archive is a false positive; users should verify the repository origin, commit, and corpus hash and keep protection enabled.
|
||||
|
||||
### F-003 — Execution boundary and residual limitation
|
||||
|
||||
Repository-owned bootstrap, router, CI, and executable scripts do not import or execute the payloader corpus. `src-hunter` requires a granted case scope and explicit payload request before the corpus is opened.
|
||||
|
||||
Residual limitation: an external Agent or user can bypass repository entry scripts and invoke Nmap, an MCP server, or another tool directly. That behavior is outside the repository's technical enforcement boundary. Client permissions, sandboxing, MCP registration, and target authorization remain required controls.
|
||||
|
||||
### F-004 — Supply-chain controls
|
||||
|
||||
- GitHub Actions are pinned to full commit SHAs.
|
||||
- Auto-install sources are constrained by `bootstrap-manifest.json` and the existing pin gate.
|
||||
- MCP host registration is opt-in and client-specific configuration is not written by default.
|
||||
- Binary Ninja and other commercial applications remain manual dependencies.
|
||||
- Gradle 8.7 now uses official distribution SHA-256 `544c35d6bd849ae8a5ed0bcea39ba677dc40f49df7d1835561582da2009b961d`.
|
||||
- CI uses Gradle's official wrapper validation action pinned to commit `9c971963bec38e04b3d30dcc455b5382be2fdbfb` (v6.3.0).
|
||||
|
||||
## Reproduction
|
||||
|
||||
```powershell
|
||||
python skills/scripts/verify-repository-security.py
|
||||
python skills/scripts/verify-doc-links.py
|
||||
powershell -NoProfile -ExecutionPolicy Bypass -File skills/scripts/verify-routing-coherence.ps1
|
||||
powershell -NoProfile -ExecutionPolicy Bypass -File skills/scripts/smoke.ps1
|
||||
```
|
||||
|
||||
Inspect the quarantined payload without requiring a working-tree copy:
|
||||
|
||||
```powershell
|
||||
git rev-parse "HEAD:skills/pentest-tools/src-hunter/references/payloader/waf-bypass.md"
|
||||
git log --follow -- skills/pentest-tools/src-hunter/references/payloader/waf-bypass.md
|
||||
```
|
||||
|
||||
## Disposition
|
||||
|
||||
- Keep the payload corpus as explicit, passive research data.
|
||||
- Do not auto-load it during routing or bootstrap.
|
||||
- Block unreviewed hash changes in CI.
|
||||
- Keep antivirus enabled and use Git-object inspection when a working-tree checkout is quarantined.
|
||||
- Re-run this review whenever the payload hash, executable allowlist, external installer sources, or MCP execution boundary changes.
|
||||
@@ -106,6 +106,15 @@
|
||||
"manualInstallHint": "JEB Pro is commercial. Obtain a valid license from PNF Software, install it manually, then refresh the tool index. Optional community MCP bridges must pass the skill-supply-chain review before registration.",
|
||||
"kaliNote": "JEB Pro Linux edition requires a user-provided license and manual installation."
|
||||
},
|
||||
{
|
||||
"name": "binaryninja",
|
||||
"bootstrapKind": "manual",
|
||||
"docsUrl": "https://binary.ninja/",
|
||||
"canAutoInstall": false,
|
||||
"verifyCommand": "binaryninja",
|
||||
"manualInstallHint": "Binary Ninja is commercial software. Obtain a valid Vector 35 license and install it manually. Optional community MCP plugins require supply-chain review and loopback binding.",
|
||||
"kaliNote": "Binary Ninja Linux requires a user-provided license and manual installation."
|
||||
},
|
||||
{
|
||||
"name": "reqable-mcp",
|
||||
"bootstrapKind": "npm-mcp",
|
||||
|
||||
@@ -39,6 +39,7 @@ declare -a TOOL_CATALOG=(
|
||||
"reqable-mcp|pentest-tools|通过 npx 启动 Reqable 桌面客户端 MCP||npx"
|
||||
"xquik-mcp|threat-intelligence|远程公开 X 威胁情报 MCP||"
|
||||
"jeb-pro|apk-reverse|商业 Android/ARM 反编译器(手动许可安装)|--version|jeb,${HOME}/tools/JEB/jeb,${HOME}/JEB/jeb,/opt/jeb/jeb"
|
||||
"binaryninja|binary-ninja-reverse|Binary Ninja 商业逆向平台(手动许可安装)|--version|binaryninja,binaryninja-headless,${HOME}/BinaryNinja/binaryninja,${HOME}/tools/BinaryNinja/binaryninja,/opt/binaryninja/binaryninja"
|
||||
"agent-browser|browser-automation|浏览器自动化(Playwright)|--version|agent-browser"
|
||||
"analyzeHeadless|reverse-engineering|Ghidra 无头分析||analyzeHeadless,${HOME}/tools/ghidra/support/analyzeHeadless,/opt/ghidra/support/analyzeHeadless,/usr/share/ghidra/support/analyzeHeadless"
|
||||
"playwright|browser-automation|Playwright 浏览器引擎|--version|playwright,npx playwright"
|
||||
@@ -108,6 +109,7 @@ declare -A SCRIPT_REFS=(
|
||||
["reqable-mcp"]="pentest-tools/SKILL.md"
|
||||
["xquik-mcp"]="threat-intelligence/SKILL.md"
|
||||
["jeb-pro"]="apk-reverse/SKILL.md"
|
||||
["binaryninja"]="binary-ninja-reverse/SKILL.md"
|
||||
["agent-browser"]="browser-automation/SKILL.md"
|
||||
["playwright"]="browser-automation/SKILL.md"
|
||||
["nmap"]="pentest-tools/SKILL.md"
|
||||
|
||||
@@ -53,7 +53,7 @@ GENERATED_AT=$(date '+%Y-%m-%d %H:%M:%S %z')
|
||||
echo "| 能力 | 工具可用 | MCP 已注册 | 服务在线 | 可自动安装 | 安装方式 |"
|
||||
echo "|------|---------|-----------|---------|-----------|---------|"
|
||||
|
||||
CAPABILITY_NAMES=("jadx" "apktool" "jeb-pro" "frida" "idalib-mcp" "jshookmcp" "reqable-mcp" "xquik-mcp" "anything-analyzer" "idapro" "r2" "adb" "agent-browser" "ghidra-mcp" "seclists" "proxycat" "burpsuite-mcp" "nmap" "sqlmap" "hashcat" "hydra" "gobuster" "ffuf" "msfconsole" "nuclei" "bkcrack")
|
||||
CAPABILITY_NAMES=("jadx" "apktool" "jeb-pro" "binaryninja" "frida" "idalib-mcp" "jshookmcp" "reqable-mcp" "xquik-mcp" "anything-analyzer" "idapro" "r2" "adb" "agent-browser" "ghidra-mcp" "seclists" "proxycat" "burpsuite-mcp" "nmap" "sqlmap" "hashcat" "hydra" "gobuster" "ffuf" "msfconsole" "nuclei" "bkcrack")
|
||||
|
||||
for cap_name in "${CAPABILITY_NAMES[@]}"; do
|
||||
# 检查工具是否可用
|
||||
@@ -64,6 +64,11 @@ GENERATED_AT=$(date '+%Y-%m-%d %H:%M:%S %z')
|
||||
tool_available="✓"
|
||||
fi
|
||||
;;
|
||||
binaryninja)
|
||||
if command -v binaryninja &>/dev/null || command -v binaryninja-headless &>/dev/null || [[ -x "$HOME/BinaryNinja/binaryninja" ]] || [[ -x "/opt/binaryninja/binaryninja" ]]; then
|
||||
tool_available="✓"
|
||||
fi
|
||||
;;
|
||||
reqable-mcp|jshookmcp)
|
||||
if command -v npx &>/dev/null; then tool_available="✓"; fi
|
||||
;;
|
||||
@@ -117,7 +122,7 @@ GENERATED_AT=$(date '+%Y-%m-%d %H:%M:%S %z')
|
||||
xquik-mcp)
|
||||
bootstrap_kind="remote-http-mcp"
|
||||
;;
|
||||
jeb-pro)
|
||||
jeb-pro|binaryninja)
|
||||
bootstrap_kind="manual"
|
||||
can_auto="✗"
|
||||
;;
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
{
|
||||
"name": "reverse-skill",
|
||||
"version": "1.0.1",
|
||||
"description": "Codex adapter for the client-neutral reverse-skill security router.",
|
||||
"author": {
|
||||
"name": "ZhaoXu",
|
||||
"url": "https://github.com/zhaoxuya520"
|
||||
},
|
||||
"homepage": "https://reverse.apivix.com/",
|
||||
"repository": "https://github.com/zhaoxuya520/reverse-skill",
|
||||
"license": "MIT",
|
||||
"keywords": [
|
||||
"cybersecurity",
|
||||
"reverse-engineering",
|
||||
"security-analysis",
|
||||
"skill-router"
|
||||
],
|
||||
"skills": "./skills/",
|
||||
"interface": {
|
||||
"displayName": "Reverse Skill",
|
||||
"shortDescription": "Route authorized security and reverse-engineering work",
|
||||
"longDescription": "Adds a Codex-facing entry point for the client-neutral reverse-skill repository while preserving its scope, routing, and toolchain gates.",
|
||||
"developerName": "ZhaoXu",
|
||||
"category": "Developer Tools",
|
||||
"capabilities": [
|
||||
"Interactive",
|
||||
"Write"
|
||||
],
|
||||
"websiteURL": "https://reverse.apivix.com/",
|
||||
"defaultPrompt": [
|
||||
"Route this authorized security task with reverse-skill.",
|
||||
"Review this binary or source tree defensively.",
|
||||
"Check my security workflow and evidence chain."
|
||||
],
|
||||
"brandColor": "#111827"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
---
|
||||
name: reverse-skill-router
|
||||
description: Use the reverse-skill repository from Codex for authorized reverse engineering, security analysis, CTF, and defensive testing tasks. Requires the reverse-skill repository to be available as the current workspace or an explicitly supplied local path.
|
||||
---
|
||||
|
||||
# Reverse Skill Codex adapter
|
||||
|
||||
This plugin is an optional Codex entry point. The repository remains the canonical, client-neutral implementation.
|
||||
|
||||
When the current workspace is the `reverse-skill` repository:
|
||||
|
||||
1. Read `RULES.md` at the repository root.
|
||||
2. Run the platform-native `skills/scripts/master-route` entry with the user's task to select the PRIMARY skill from `skills/config/routing.json`.
|
||||
3. Before any target action, create and validate `work/<case>/scope.md` with the platform-native `case-init` and `case-guard` scripts.
|
||||
4. Open the selected `skills/<PRIMARY>/SKILL.md` and follow its task-specific instructions.
|
||||
5. Resolve tools only through the generated `skills/tool-index.md`; do not register MCP servers or install tools unless the user requested that action.
|
||||
|
||||
If the repository is not the current workspace and no local repository path was supplied, explain that this adapter does not bundle a second copy of the router. Ask the user to open or clone `https://github.com/zhaoxuya520/reverse-skill` and then continue from its `RULES.md`.
|
||||
|
||||
Do not treat the presence of this plugin, a target name, or a sample path as authorization. Authorization comes from the repository's scope contract.
|
||||
@@ -11,6 +11,7 @@
|
||||
| [apk-reverse](apk-reverse/SKILL.md) | 在 CLI 环境下做 Android APK 逆向时使用。适用于 APK 解包、Java 反编译、smali 修改、重打包、Frida 动态 Hook,以及按需切换到 so/native 分析。优先使用本机已安装的 jadx、apktool、frida、adb、ida-reverse、radare2。 |
|
||||
| [attack-chain](attack-chain/SKILL.md) | Use for authorized multi-stage attack-path planning and orchestration when a task spans reconnaissance, initial access, privilege escalation, lateral movemen... |
|
||||
| [binary-diff](binary-diff/SKILL.md) | 跨版本符号迁移与二进制差分。当你有旧版本的符号/逆向结果,需要快速迁移到新版本时使用。 |
|
||||
| [binary-ninja-reverse](binary-ninja-reverse/SKILL.md) | Use for authorized binary analysis in Binary Ninja, including HLIL/MLIL/LLIL inspection, strings/imports/exports, cross-references, types, patch review, Pyth... |
|
||||
| [browser-automation](browser-automation/SKILL.md) | 统一自动化入口。覆盖浏览器自动化(Playwright)和 Windows 桌面应用自动化(OpenReverse)。 |
|
||||
| [browser-extension-reverse](browser-extension-reverse/SKILL.md) | Use for authorized reverse engineering of browser extensions (Chrome/Firefox) including manifest analysis, background workers, and extension-based credential... |
|
||||
| [case-review](case-review/SKILL.md) | Reviews a reverse-skill case package for scope readiness, Evidence to Finding to Path traceability, work item coverage, timeline references, and optional art... |
|
||||
@@ -59,6 +60,7 @@ skills/api-security/SKILL.md/
|
||||
skills/apk-reverse/SKILL.md/
|
||||
skills/attack-chain/SKILL.md/
|
||||
skills/binary-diff/SKILL.md/
|
||||
skills/binary-ninja-reverse/SKILL.md/
|
||||
skills/browser-automation/SKILL.md/
|
||||
skills/browser-extension-reverse/SKILL.md/
|
||||
skills/case-review/SKILL.md/
|
||||
|
||||
@@ -89,6 +89,7 @@ python3 skills/case-review/scripts/review_case.py work/<case> --verify-hashes --
|
||||
| **R9** | 恶意样本 / YARA / 沙箱 | `malware-analysis/` |
|
||||
| **R21** | 协议 / Protobuf / PCAP 协议 | `protocol-reverse/` |
|
||||
| **R22** | Ghidra / 开源反编译 | `ghidra-reverse/` |
|
||||
| **R45** | Binary Ninja / Binja / HLIL / MLIL / Binary Ninja MCP | `binary-ninja-reverse/` |
|
||||
| **R6** | IDA / 反编译 / 反汇编深挖 | `ida-reverse/` |
|
||||
| **R7** | radare2 / r2 | `radare2/` |
|
||||
| **R8** | 固件 / binwalk / IoT / EMBA | `firmware-pentest/` |
|
||||
|
||||
+2
-1
@@ -61,6 +61,7 @@ description: Routes reverse engineering, exploitation, penetration testing, malw
|
||||
| **授权侦察管线** | `pentest-tools/references/recon-pipeline.md` | scope 门 + 命中≠验证 |
|
||||
| **协议逆向** | `protocol-reverse/` | 自定义二进制协议 / Protobuf / gRPC / PCAP 帧布局 |
|
||||
| **Ghidra 逆向** | `ghidra-reverse/` | 开源反编译、headless、Ghidra MCP(无 IDA 时主入口) |
|
||||
| **Binary Ninja 逆向** | `binary-ninja-reverse/` | HLIL/MLIL/LLIL、Python API,以及可选的社区 MCP/localhost HTTP 集成 |
|
||||
| **云 / 容器 / K8s** | `cloud-k8s/` | IMDS/IAM、容器逃逸面、Kubernetes RBAC |
|
||||
| **Windows / AD** | `windows-ad/` | Kerberos、AD CS、BloodHound、中继与域路径 |
|
||||
| **数字取证** | `digital-forensics/` | 内存/磁盘时间线、PCAP 溯源、IR 保全 |
|
||||
@@ -154,7 +155,7 @@ Kali:
|
||||
bash <package-root>/kali/scripts/bootstrap-reverse.sh 工具名 --start-services
|
||||
```
|
||||
|
||||
支持的能力(以 `scripts/bootstrap-manifest.json` 为准):jadx、apktool、jeb-pro、frida、frida-ps、idalib-mcp、reqable-mcp、jshookmcp、xquik-mcp、anything-analyzer、idapro、r2、rabin2、adb、agent-browser、ghidra-mcp、seclists、proxycat、burpsuite-mcp、nmap、pentestswarm、binwalk、yara、pwntools、bkcrack
|
||||
支持的能力(以 `scripts/bootstrap-manifest.json` 为准):jadx、apktool、jeb-pro、binaryninja、frida、frida-ps、idalib-mcp、reqable-mcp、jshookmcp、xquik-mcp、anything-analyzer、idapro、r2、rabin2、adb、agent-browser、ghidra-mcp、seclists、proxycat、burpsuite-mcp、nmap、pentestswarm、binwalk、yara、pwntools、bkcrack
|
||||
|
||||
> JEB Pro 已登记为**手动许可安装**能力:bootstrap 只输出指引,绝不下载或规避商业许可。Reqable MCP 仅登记固定版本的官方运行时,仍需要用户自行安装 Reqable 桌面客户端。
|
||||
>
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
---
|
||||
name: binary-ninja-reverse
|
||||
description: Use for authorized binary analysis in Binary Ninja, including HLIL/MLIL/LLIL inspection, strings/imports/exports, cross-references, types, patch review, Python API automation, and optional Binary Ninja MCP or localhost HTTP integration.
|
||||
---
|
||||
|
||||
# Binary Ninja reverse engineering
|
||||
|
||||
Use Binary Ninja when the user explicitly selects it, when its ILs materially help data-flow analysis, or when IDA/Ghidra/radare2 results need an independent cross-check.
|
||||
|
||||
## Start safely
|
||||
|
||||
1. Confirm the repository case scope is ready before acting on a target.
|
||||
2. Check `skills/tool-index.md` for `binaryninja`; Binary Ninja is commercial software and must be installed manually with a valid Vector 35 license.
|
||||
3. Work on a copy when applying patches or saving database changes.
|
||||
4. Record imports/exports, entry points, architecture, and file hash before promoting findings.
|
||||
|
||||
## Choose the integration
|
||||
|
||||
- **GUI or Python API:** preferred when Binary Ninja is already open or the user wants direct interactive analysis.
|
||||
- **Community MCP bridge:** use only when explicitly requested and after reviewing the third-party plugin boundary. Keep the Binary Ninja HTTP listener on `127.0.0.1:9009`; do not enable network exposure by default.
|
||||
- **Fallback:** use `ghidra-reverse`, `ida-reverse`, or `radare2` when Binary Ninja is unavailable or its license/API cannot open the target.
|
||||
|
||||
The reviewed community integration is [`fosdickio/binary_ninja_mcp`](https://github.com/fosdickio/binary_ninja_mcp), GPL-3.0, plugin metadata version `1.1.0`, minimum Binary Ninja build `4000`. The repository is not an official Vector 35 component. This skill was checked against commit `8c5134ee46e2bf44f9a4d846bd971c3e39b3e306` on 2026-09-03.
|
||||
|
||||
Install the Binary Ninja side through its Plugin Manager or from the reviewed source. For the MCP stdio bridge, pin the published bridge version rather than using an unbounded package:
|
||||
|
||||
```text
|
||||
npx -y binary-ninja-mcp@1.0.0 --host 127.0.0.1 --port 9009
|
||||
```
|
||||
|
||||
Register that command only in the MCP client the user selected. The bridge is not ready until Binary Ninja is running, a binary is open, and the localhost plugin endpoint responds.
|
||||
|
||||
## Analysis workflow
|
||||
|
||||
1. Enumerate open binaries and select the intended view.
|
||||
2. Capture binary status, entry points, segments, imports, exports, and representative strings.
|
||||
3. Follow call sites and cross-references before interpreting a function in isolation.
|
||||
4. Use HLIL for readable logic, MLIL SSA for data flow, and LLIL/disassembly when lifting loses instruction-level behavior.
|
||||
5. Apply names, comments, and types incrementally; keep the original addresses in evidence.
|
||||
6. Treat byte patches, prototype changes, and saved-file writes as mutations. Perform them only when requested and preserve the original artifact.
|
||||
7. Cross-check high-impact conclusions with a second evidence source or another disassembler.
|
||||
|
||||
Useful MCP capability families include binary/view selection, `list_imports`, `list_exports`, `list_strings`, `decompile_function`, `get_il`, callers/callees, cross-references, types, comments, renames, and byte patching. Discover the live tool list instead of assuming every upstream function is present.
|
||||
|
||||
## Output
|
||||
|
||||
Report concrete addresses, function names, IL level, supporting strings/imports, confidence, and reproduction steps. Keep the Evidence → Finding → Path chain used by the rest of the repository.
|
||||
@@ -0,0 +1,3 @@
|
||||
interface:
|
||||
display_name: "Binary Ninja Reverse"
|
||||
short_description: "Analyze binaries with Binary Ninja and optional MCP"
|
||||
@@ -311,6 +311,13 @@
|
||||
{ "must": "\\bctf\\b|awd|靶场|比赛.?题", "exclude": "pwn|rop|栈溢出|堆溢出|ret2" }
|
||||
]
|
||||
},
|
||||
"R45": {
|
||||
"label": "Binary Ninja reverse",
|
||||
"skill": "binary-ninja-reverse/SKILL.md",
|
||||
"keywords": [
|
||||
{ "must": "binary.?ninja|binaryninja|\\bbinja\\b|binary[_-]ninja[_-]mcp|hlil|mlil", "note": "Binary Ninja GUI, IL, Python API, MCP, or localhost HTTP integration" }
|
||||
]
|
||||
},
|
||||
"R0": {
|
||||
"label": "General reverse-engineering",
|
||||
"skill": "reverse-engineering/SKILL.md",
|
||||
@@ -323,7 +330,7 @@
|
||||
},
|
||||
"priority": [
|
||||
"R4", "R1", "R2", "R3", "R30", "R31", "R33", "R5", "R9", "R21",
|
||||
"R22", "R6", "R7", "R8", "R34", "R28", "R17", "R16", "R18", "R24",
|
||||
"R22", "R45", "R6", "R7", "R8", "R34", "R28", "R17", "R16", "R18", "R24",
|
||||
"R37", "R23", "R35", "R25", "R44", "R36", "R29", "R38", "R32", "R26", "R27",
|
||||
"R10", "R11", "R12", "R13", "R14", "R15", "R19", "R40", "R20", "R39", "R41", "R0"
|
||||
]
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
| **lead** | Lead / 总指挥 | 拆任务、定 scope、阶段门控、汇总报告 | `attack-chain/` 或当前 PRIMARY hub;结束 → `docs-generator/` |
|
||||
| **cie** | 情报收集 | 资产发现、暴露面、关系 | `pentest-tools/`(recon);浏览器 → `browser-automation/`;云面 → `cloud-k8s/` |
|
||||
| **cpe** | 渗透验证 | 扫描、利用验证、影响确认 | `pentest-tools/`;API → `api-security/`;AD → `windows-ad/`;无线 → `wifi-wireless/`;库 → `database-security/`;SSO → `identity-federation/`;OT → `ot-ics/` |
|
||||
| **cre** | 逆向分析 | 二进制/固件/移动/前端逻辑 | `ida-reverse/` `ghidra-reverse/` `radare2/` `apk-reverse/` `mobile-reverse/` `macos-reverse/` `js-reverse/` `browser-extension-reverse/` `dotnet-reverse/` `go-rust-reverse/` `firmware-pentest/` `hardware-security/` `malware-analysis/` `protocol-reverse/` `thick-client/` `reverse-engineering/` |
|
||||
| **cre** | 逆向分析 | 二进制/固件/移动/前端逻辑 | `ida-reverse/` `ghidra-reverse/` `binary-ninja-reverse/` `radare2/` `apk-reverse/` `mobile-reverse/` `macos-reverse/` `js-reverse/` `browser-extension-reverse/` `dotnet-reverse/` `go-rust-reverse/` `firmware-pentest/` `hardware-security/` `malware-analysis/` `protocol-reverse/` `thick-client/` `reverse-engineering/` |
|
||||
| **cae** | 代码审计 | 源码/依赖/供应链 | `code-audit/` + `supply-chain-security/` |
|
||||
| **cbe** | 蓝队/取证 | 狩猎、检测、IR 伪影 | `threat-hunting/` `digital-forensics/` |
|
||||
| **cce** | 密码学 | 算法/协议/密钥误用 | `reverse-engineering` 模式文档 |
|
||||
|
||||
@@ -14,6 +14,7 @@ level: 2
|
||||
5. `NEXT`: 缺工具时调用 bootstrap,不要猜路径
|
||||
6. `ACT`: 进入工作流。默认只读 playbook 骨架;`payloader/`、`waf-bypass.md` 仅在 scope 已 granted 且用户明确要 payload 时打开
|
||||
7. `MUST NOT` 把「2887 H1 报告」当成本仓已跟踪目录(`h1-reports/` 不在树里)
|
||||
8. `MUST NOT` 因 payload corpus 触发杀毒告警而关闭防护;优先核对 Git blob/hash 与 `docs/SECURITY-REVIEW-2026-09-03.md`
|
||||
|
||||
# SRC Hunter — 实战漏洞挖掘工作流
|
||||
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
# Payload 知识库(结构化)
|
||||
|
||||
> **安全提示:** 本目录是被动研究资料,不由 router/bootstrap 自动执行。内容包含 WebShell、注入与规避特征,可能触发 Defender 等杀毒软件。不要关闭防护;请核对仓库来源、提交和 [安全复审报告](../../../../../docs/SECURITY-REVIEW-2026-09-03.md),仅在已授权 scope 且明确需要 payload 时读取。
|
||||
|
||||
- Web 攻击 payload: **177** 条 / 23 类
|
||||
- 内网渗透 payload: **128** 条 / 11 类
|
||||
- 工具命令速查: **114** 条 / 14 类
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
| Wi-Fi / 无线 | `wifi-wireless/` | |
|
||||
| OT / ICS | `ot-ics/` | 被动优先;写寄存器默认禁止 |
|
||||
| macOS | `macos-reverse/` | iOS 仍走 mobile-reverse |
|
||||
| Binary Ninja | `binary-ninja-reverse/` | 商业 GUI/Python API;社区 MCP 仅显式启用且默认回环绑定 |
|
||||
| 厚客户端 | `thick-client/` | |
|
||||
| Go / Rust 二进制 | `go-rust-reverse/` | |
|
||||
| 硬件调试口 | `hardware-security/` | 交接 firmware-pentest |
|
||||
|
||||
@@ -49,6 +49,7 @@ Route tasks to the most appropriate skill module by target type, user intent, an
|
||||
| Public-source threat intelligence / OSINT | `threat-intelligence/` | X/Twitter posts remain leads until independently corroborated |
|
||||
| Blue team / threat hunt | `threat-hunting/` | sample IOC → `malware-analysis/` |
|
||||
| Ghidra (no IDA) | `ghidra-reverse/` | `ida-reverse/` if IDA MCP available |
|
||||
| Binary Ninja / Binja | `binary-ninja-reverse/` — HLIL/MLIL/LLIL + Python API | Community Binary Ninja MCP/localhost HTTP adapter when explicitly enabled |
|
||||
|
||||
| OLLVM-obfuscated binary (控制流平坦化/虚假控制流/MBA) | `reverse-engineering/references/ollvm-deobfuscation.md` — 完整脱密工作流 | obpo-plugin / d810-ng (IDA) / ollvm-unflattener (Miasm) / ollvm-breaker (Binary Ninja) / angr / deollvm (ARM64)
|
||||
| Cryptography / encryption algorithms | `reverse-engineering/patterns*.md` — crypto patterns | `js-reverse/` (if frontend crypto) |
|
||||
@@ -177,6 +178,7 @@ Route tasks to the most appropriate skill module by target type, user intent, an
|
||||
| "BurpSuite / web proxy / intercept" | `pentest-tools/SKILL.md` — web proxy |
|
||||
| "protocol reverse / Protobuf / gRPC / custom protocol" | `protocol-reverse/SKILL.md` |
|
||||
| "Ghidra / analyzeHeadless / no IDA" | `ghidra-reverse/SKILL.md` |
|
||||
| "Binary Ninja / Binja / HLIL / MLIL / binary-ninja-mcp" | `binary-ninja-reverse/SKILL.md` |
|
||||
| "Kubernetes / K8s / container escape / cloud IAM" | `cloud-k8s/SKILL.md` |
|
||||
| "Active Directory / Kerberoast / Certipy / BloodHound" | `windows-ad/SKILL.md` |
|
||||
| "forensics / Volatility / memory dump / IR timeline" | `digital-forensics/SKILL.md` |
|
||||
@@ -222,6 +224,7 @@ Do NOT force the user to repeatedly confirm "this is CTF/local." Carry the CTF/l
|
||||
| Frida | `reverse-engineering/tools-dynamic.md` |
|
||||
| GDB / GEF / pwndbg / rr | `reverse-engineering/tools.md` |
|
||||
| Ghidra (headless) | `reverse-engineering/tools.md` + Ghidra MCP |
|
||||
| Binary Ninja / binary-ninja-mcp | `binary-ninja-reverse/` — commercial GUI/API + explicit community MCP bridge on loopback |
|
||||
| Python 3 standard library | `case-review/`: read-only case evidence graph review |
|
||||
| angr / Qiling / Unicorn | `reverse-engineering/tools-dynamic.md` |
|
||||
| D-810 / d810-ng | `reverse-engineering/references/ollvm-deobfuscation.md` — IDA Pro 反混淆插件,OLLVM/Tigress/Hodur/Approov + Z3 SMT |
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
| JavaScript / Web 前端 | `js-reverse/` — 5 阶段工作流 | anything-analyzer MCP 的浏览器工具,或 jshookmcp 的浏览器/CDP/Hook 能力 |
|
||||
| HTTP 抓包 / 浏览器采样 / 请求重放 | anything-analyzer MCP(23816) | Reqable MCP、`js-reverse/`、jshookmcp 或 `competition-web-runtime/` |
|
||||
| 固件 / IoT | `firmware-pentest/` — OWASP FSTM 全链路:提取→仿真→fuzz→利用 | `reverse-engineering/platforms.md` — 仅静态 RE / `reverse-engineering/tools.md` — Ghidra headless |
|
||||
| Binary Ninja / Binja | `binary-ninja-reverse/` — HLIL/MLIL/LLIL + Python API | 显式启用社区 MCP/本机 HTTP 适配器 |
|
||||
| WASM / Python 字节码 / .NET | `reverse-engineering/languages.md` | 按具体语言查对应章节 |
|
||||
| macOS / iOS | `reverse-engineering/platforms.md` — Mach-O/ObjC/Swift | — |
|
||||
| 内存转储 / PCAP | `reverse-engineering/platforms.md` | `reverse-engineering/patterns*.md` |
|
||||
@@ -161,6 +162,7 @@
|
||||
| "Wireshark/抓包分析/PCAP" | `digital-forensics/` 或 `protocol-reverse/` |
|
||||
| "协议逆向/Protobuf/自定义协议" | `protocol-reverse/SKILL.md` |
|
||||
| "Ghidra/无 IDA" | `ghidra-reverse/SKILL.md` |
|
||||
| "Binary Ninja/Binja/HLIL/MLIL/Binary Ninja MCP" | `binary-ninja-reverse/SKILL.md` |
|
||||
| "K8s/容器逃逸/云安全" | `cloud-k8s/SKILL.md` |
|
||||
| "域渗透/BloodHound/Certipy/Kerberoast" | `windows-ad/SKILL.md` |
|
||||
| "取证/Volatility/内存转储" | `digital-forensics/SKILL.md` |
|
||||
@@ -218,6 +220,7 @@
|
||||
| Frida | `reverse-engineering/tools-dynamic.md` |
|
||||
| GDB / rr(通用调试) | `reverse-engineering/tools.md` |
|
||||
| Ghidra (headless) | `reverse-engineering/tools.md` + Ghidra MCP(免费 IDA 替代,可通过 bootstrap 自动注册) |
|
||||
| Binary Ninja / binary-ninja-mcp | `binary-ninja-reverse/` — 商业 GUI/API + 显式启用的社区 MCP 回环桥 |
|
||||
| Python 3 标准库 | `case-review/`: 只读 case Evidence 图审查 |
|
||||
| angr / Qiling / Unicorn | `reverse-engineering/tools-dynamic.md` |
|
||||
| BinDiff / Diaphora | `reverse-engineering/tools-advanced.md` |
|
||||
|
||||
@@ -76,6 +76,14 @@
|
||||
"IDA 打开文件后 MCP 自动监听 127.0.0.1:13337"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "binaryninja",
|
||||
"bootstrapKind": "manual",
|
||||
"docsUrl": "https://binary.ninja/",
|
||||
"canAutoInstall": false,
|
||||
"verifyCommand": "binaryninja",
|
||||
"manualInstallHint": "Binary Ninja is commercial software. Obtain a valid Vector 35 license and install it manually. Optional community MCP plugins must pass the skill-supply-chain review and remain bound to loopback by default."
|
||||
},
|
||||
{
|
||||
"name": "reqable-mcp",
|
||||
"bootstrapKind": "npm-mcp",
|
||||
|
||||
@@ -154,6 +154,20 @@ function Get-ReverseToolCatalog {
|
||||
[pscustomobject]@{ Type = 'path'; Value = (Join-Path $userProfile 'Tools\IDA Pro 9.4\App\IDA Pro\ida.exe') }
|
||||
)
|
||||
}
|
||||
[pscustomobject]@{
|
||||
Name = 'binaryninja'
|
||||
Skill = 'binary-ninja-reverse'
|
||||
Purpose = 'Binary Ninja 商业逆向平台(GUI/Python API)'
|
||||
FixedVersion = 'manual-license'
|
||||
VersionArgs = @('--version')
|
||||
Fallbacks = @(
|
||||
[pscustomobject]@{ Type = 'command'; Value = 'binaryninja' },
|
||||
[pscustomobject]@{ Type = 'command'; Value = 'binaryninja-headless' },
|
||||
[pscustomobject]@{ Type = 'path'; Value = 'C:\Program Files\Vector35\BinaryNinja\binaryninja.exe' },
|
||||
[pscustomobject]@{ Type = 'path'; Value = (Join-ReverseOptionalPath -Path $localAppData -ChildPath 'Vector35\BinaryNinja\binaryninja.exe') },
|
||||
[pscustomobject]@{ Type = 'path'; Value = (Join-Path $userProfile 'Tools\BinaryNinja\binaryninja.exe') }
|
||||
)
|
||||
}
|
||||
[pscustomobject]@{
|
||||
Name = 'frida'
|
||||
Skill = 'apk-reverse'
|
||||
|
||||
@@ -129,6 +129,7 @@ TOOLS=(
|
||||
"hashcat|pentest-tools|Password recovery|hashcat|hashcat --version|"
|
||||
"nuclei|pentest-tools|Template-based vulnerability scanner|nuclei|nuclei -version|"
|
||||
"binwalk|firmware-pentest|Firmware extraction and analysis|binwalk|binwalk --version|"
|
||||
"binaryninja|binary-ninja-reverse|Binary Ninja commercial reverse-engineering platform|binaryninja,binaryninja-headless|binaryninja --version|/Applications/Binary Ninja.app/Contents/MacOS/binaryninja;$HOME/BinaryNinja/binaryninja;/opt/binaryninja/binaryninja"
|
||||
"seclists|pentest-tools|Security wordlists|none|none|$HOME/tools/SecLists;/usr/share/seclists"
|
||||
"jshookmcp|js-reverse|JS/CDP/Hook MCP capability (requires registration + npx runtime)|none|none|"
|
||||
"reqable-mcp|pentest-tools|Reqable MCP capability (requires registration + npx runtime)|none|none|"
|
||||
|
||||
@@ -28,7 +28,7 @@ foreach ($name in @('ConvertTo-TomlLiteral', 'Remove-CodexMcpServerBlocks', 'Set
|
||||
if ($null -eq $functionAst) {
|
||||
throw "Function not found: $name"
|
||||
}
|
||||
Invoke-Expression $functionAst.Extent.Text
|
||||
. ([scriptblock]::Create($functionAst.Extent.Text))
|
||||
}
|
||||
|
||||
function Assert-True {
|
||||
|
||||
@@ -0,0 +1,136 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Fail closed on repository executable/reference boundary regressions.
|
||||
|
||||
The check reads Git index blobs, so antivirus quarantine of a working-tree
|
||||
research payload cannot silently remove it from review coverage.
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import hashlib
|
||||
import re
|
||||
import subprocess
|
||||
import sys
|
||||
from pathlib import PurePosixPath
|
||||
|
||||
|
||||
PAYLOAD_PATH = "skills/pentest-tools/src-hunter/references/payloader/waf-bypass.md"
|
||||
PAYLOAD_SHA256 = "0273517455962bb9908264f82e4708b31d541c91c2ec715e8032d6c1376728b5"
|
||||
ALLOWED_BINARY_HASHES = {
|
||||
"burp-mcp-full/gradle/wrapper/gradle-wrapper.jar":
|
||||
"2db75c40782f5e8ba1fc278a5574bab070adccb2d21ca5a6e5ed840888448046",
|
||||
}
|
||||
EXECUTABLE_SUFFIXES = {
|
||||
".ps1", ".sh", ".py", ".js", ".mjs", ".cjs", ".java", ".bat", ".cmd"
|
||||
}
|
||||
BINARY_SUFFIXES = {
|
||||
".exe", ".dll", ".so", ".dylib", ".sys", ".jar", ".zip", ".7z",
|
||||
".rar", ".bin", ".apk", ".ipa", ".wasm", ".class", ".pyc"
|
||||
}
|
||||
SCAN_EXCLUDES = {"skills/scripts/verify-repository-security.py"}
|
||||
EXPECTED_PATTERN_HITS = {
|
||||
("kali/scripts/lib/tool-discovery.sh", "dev-tcp-port-probe"),
|
||||
("skills/scripts/lib/ToolDiscovery.ps1", "tcp-client-health-probe"),
|
||||
}
|
||||
PATTERNS = {
|
||||
"dynamic-powershell-eval": re.compile(r"Invoke" r"-Expression|\bIEX\b", re.I),
|
||||
"encoded-loader": re.compile(r"FromBase64" r"String|Download" r"String", re.I),
|
||||
"pipe-to-shell": re.compile(r"(?:curl|wget)[^\n]*\|\s*(?:ba)?sh\b", re.I),
|
||||
"root-recursive-delete": re.compile(r"\brm\s+-rf\s+/\s*(?:$|[;&|])", re.M),
|
||||
"database-drop": re.compile(r"\bDROP\s+(?:DATABASE|TABLE)\b", re.I),
|
||||
"tcp-client-health-probe": re.compile(r"System\.Net\.Sockets\.TCPClient", re.I),
|
||||
"dev-tcp-port-probe": re.compile(r"/dev/tcp/"),
|
||||
}
|
||||
ACTION_USE = re.compile(r"^\s*-?\s*uses:\s*([^\s#]+)", re.M)
|
||||
FULL_SHA = re.compile(r"^[0-9a-f]{40}$")
|
||||
|
||||
|
||||
def git(*args: str) -> bytes:
|
||||
return subprocess.run(
|
||||
["git", *args], capture_output=True, check=True
|
||||
).stdout
|
||||
|
||||
|
||||
def tracked_entries() -> dict[str, str]:
|
||||
raw = git("ls-files", "-s", "-z").decode("utf-8")
|
||||
result: dict[str, str] = {}
|
||||
for record in raw.split("\0"):
|
||||
if not record:
|
||||
continue
|
||||
meta, path = record.split("\t", 1)
|
||||
result[path] = meta.split()[0]
|
||||
return result
|
||||
|
||||
|
||||
def blob(path: str) -> bytes:
|
||||
return git("show", f":{path}")
|
||||
|
||||
|
||||
def main() -> int:
|
||||
entries = tracked_entries()
|
||||
errors: list[str] = []
|
||||
|
||||
symlinks = sorted(path for path, mode in entries.items() if mode == "120000")
|
||||
if symlinks:
|
||||
errors.extend(f"tracked symlink requires review: {path}" for path in symlinks)
|
||||
|
||||
binary_paths = sorted(
|
||||
path for path in entries if PurePosixPath(path).suffix.lower() in BINARY_SUFFIXES
|
||||
)
|
||||
for path in binary_paths:
|
||||
expected = ALLOWED_BINARY_HASHES.get(path)
|
||||
if expected is None:
|
||||
errors.append(f"unreviewed tracked binary-like file: {path}")
|
||||
continue
|
||||
actual = hashlib.sha256(blob(path)).hexdigest()
|
||||
if actual != expected:
|
||||
errors.append(f"binary hash changed: {path} expected={expected} actual={actual}")
|
||||
|
||||
if PAYLOAD_PATH not in entries:
|
||||
errors.append(f"reviewed payload corpus missing from index: {PAYLOAD_PATH}")
|
||||
else:
|
||||
actual_payload = hashlib.sha256(blob(PAYLOAD_PATH)).hexdigest()
|
||||
if actual_payload != PAYLOAD_SHA256:
|
||||
errors.append(
|
||||
f"payload corpus changed; repeat security review: expected={PAYLOAD_SHA256} "
|
||||
f"actual={actual_payload}"
|
||||
)
|
||||
|
||||
for path in sorted(entries):
|
||||
suffix = PurePosixPath(path).suffix.lower()
|
||||
if suffix not in EXECUTABLE_SUFFIXES or path in SCAN_EXCLUDES:
|
||||
continue
|
||||
text = blob(path).decode("utf-8-sig", errors="replace")
|
||||
if PAYLOAD_PATH in text or "src-hunter/references/payloader" in text:
|
||||
errors.append(f"executable source references passive payload corpus: {path}")
|
||||
for label, pattern in PATTERNS.items():
|
||||
if not pattern.search(text):
|
||||
continue
|
||||
if (path, label) not in EXPECTED_PATTERN_HITS:
|
||||
errors.append(f"unexpected executable pattern {label}: {path}")
|
||||
|
||||
for path in sorted(p for p in entries if p.startswith(".github/workflows/") and p.endswith((".yml", ".yaml"))):
|
||||
text = blob(path).decode("utf-8-sig")
|
||||
for use in ACTION_USE.findall(text):
|
||||
if use.startswith("./"):
|
||||
continue
|
||||
if "@" not in use or not FULL_SHA.fullmatch(use.rsplit("@", 1)[1]):
|
||||
errors.append(f"GitHub Action is not pinned to a full commit SHA: {path}: {use}")
|
||||
|
||||
if errors:
|
||||
print(f"FAIL verify-repository-security: {len(errors)} issue(s)")
|
||||
for error in errors:
|
||||
print(f" {error}")
|
||||
return 1
|
||||
|
||||
print(
|
||||
"OK verify-repository-security: "
|
||||
f"tracked={len(entries)} executable_sources="
|
||||
f"{sum(PurePosixPath(p).suffix.lower() in EXECUTABLE_SUFFIXES for p in entries)} "
|
||||
f"binary_like={len(binary_paths)} symlinks=0"
|
||||
)
|
||||
return 0
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
sys.exit(main())
|
||||
@@ -866,6 +866,16 @@
|
||||
"expect": "R44",
|
||||
"quick": false
|
||||
},
|
||||
{
|
||||
"hint": "analyze this binary with Binary Ninja MCP and HLIL",
|
||||
"expect": "R45",
|
||||
"quick": true
|
||||
},
|
||||
{
|
||||
"hint": "使用 Binja 查看 MLIL 和函数交叉引用",
|
||||
"expect": "R45",
|
||||
"quick": false
|
||||
},
|
||||
{
|
||||
"hint": "Twitter marketing sentiment for our product",
|
||||
"expect": "R0",
|
||||
|
||||
Reference in New Issue
Block a user