okeefeco/pyeye-mcp

GitHub: okeefeco/pyeye-mcp

PyEye 是一个可扩展的 Python 代码语义分析 MCP 服务器,为 AI 助手提供符号导航、依赖分析和多项目代码理解能力。

Stars: 0 | Forks: 1

# PyEye 👁️ ## PyEye Server [![CI](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/180e9ab287094120.svg)](https://github.com/okeefeco/pyeye-mcp/actions/workflows/ci.yml) [![codecov](https://codecov.io/gh/okeefeco/pyeye-mcp/graph/badge.svg?token=XE5T93O8EC)](https://codecov.io/gh/okeefeco/pyeye-mcp) [![Python 3.10+](https://img.shields.io/badge/python-3.10%2B-blue.svg)](https://www.python.org/downloads/) [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black) [![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff) [![Pre-commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit)](https://github.com/pre-commit/pre-commit) 一个可扩展的 MCP (Model Context Protocol) 服务器,为 Claude 等 AI 助手提供智能的 Python 代码分析、导航和理解能力。 ## 特性 - 🔍 **语义代码导航**:使用 Jedi 查找符号、跳转到定义、查找引用 - 📊 **模块与包分析**:列出包/模块,分析依赖关系,检测循环导入 - 🏗️ **多项目支持**:同时分析多个项目和依赖项 - 📦 **Namespace Packages**:处理分布在多个仓库中的包 - 📝 **独立脚本**:将 notebook、脚本和示例与正式包一起分析 - 🔄 **自动更新**:通过智能缓存失效自动检测并反映文件更改 - ⚙️ **配置系统**:通过文件、环境变量或自动发现进行灵活配置 - 🔌 **可扩展插件系统**:针对特定框架的分析器(Pydantic, Django, Flask) - 🚀 **快速与缓存**:具备 LRU 驱逐机制和性能优化的智能缓存 - 🎯 **类型感知**:全面理解 Python 类型提示和注解 - 📈 **性能监控**:内置指标跟踪,提供 p50/p95/p99 延迟 - 🛡️ **输入验证**:安全的参数验证和路径检查 - 🤖 **开发自动化**:发布自动化、内部指标测试和 worktree 安全保障 ## 安装 PyEye 可以通过三种方式安装:作为 Claude Code 插件(零配置)、安装到项目的 venv 中,或全局安装。 ### 选项 0:Claude Code 插件(零配置) 当 PyEye 作为 Claude Code 插件安装时,依赖项会在首次会话启动时自动安装到用户专属的 venv 中 —— 无需手动执行 `pip install`。 - **首次会话启动**:`SessionStart` hook 会对插件检出运行 `uv sync --no-dev --frozen`,venv 构建于 `${CLAUDE_PLUGIN_DATA}/.venv`(通常为 `~/.claude/plugins/data//.venv`)。 - **后续会话**:该 hook 会将插件检出中的 `uv.lock` 与 `${CLAUDE_PLUGIN_DATA}` 中上次安装的副本进行比较,如果 lockfile 未更改,则静默无操作。 - **要求**:`uv` 必须位于您的 `PATH` 中。请参阅 [uv 安装指南](https://docs.astral.sh/uv/getting-started/installation/)。 安装 hook 和 MCP 服务器调用均使用 `uv run`,因此无需针对操作系统进行特定配置,即可在 Linux、macOS 和 Windows 上运行。 ### 选项 1:项目特定安装(推荐) 直接安装到您的 Python 项目的虚拟环境中: ``` # 激活项目的 virtual environment source /path/to/your/project/venv/bin/activate # 从 PyPI 安装 pip install pyeye-mcp # 或从源码安装 git clone https://github.com/okeefeco/pyeye-mcp.git pip install -e ./pyeye-mcp ``` 然后在您的项目根目录中创建一个 `.mcp.json` 文件: ``` { "mcpServers": { "pyeye": { "type": "stdio", "command": "python", "args": ["-m", "pyeye.mcp"], "env": {} } } } ``` 这样,MCP 服务器将使用您项目的环境,并能够访问项目的所有依赖项。 ### 选项 2:全局安装 用于分析多个项目或配合全局 Python 使用: ``` # 使用 pipx 全局安装(推荐用于隔离) pipx install pyeye-mcp # 或使用 pip 安装 pip install --user pyeye-mcp # 或从源码安装 git clone https://github.com/okeefeco/pyeye-mcp.git cd pyeye-mcp pip install --user . ``` #### 配合 Claude Code 使用(全局) ``` # 全局添加 MCP server(在所有项目中可用) claude mcp add pyeye -s user -- python -m pyeye.mcp # 验证它是否已连接 claude mcp list ``` ### 配合 Claude Desktop 使用 添加到您的 Claude Desktop 配置中(macOS 上为 `~/Library/Application Support/Claude/claude_desktop_config.json`): ``` { "mcpServers": { "pyeye": { "command": "python", "args": ["-m", "pyeye.mcp"], "env": {} } } } ``` 注意:如有需要,请使用 Python 的完整路径(例如 `/usr/local/bin/python3` 或 `C:\\Python311\\python.exe`)。 ### 配合 GitHub Copilot 使用 (VS Code) 自 2025 年起,GitHub Copilot 在 VS Code、JetBrains、Eclipse 和 Xcode 中已全面支持 MCP。请按照以下步骤将此 PyEye 服务器与 GitHub Copilot 配合使用: #### 前置条件 - **GitHub Copilot Business 或 Enterprise 订阅**(支持 MCP 所必需) - **VS Code 1.102 或更高版本**(MCP 支持已正式发布) - **组织 MCP 策略**已由您的管理员启用 #### 第 1 步:在您的组织中启用 MCP 您的 GitHub Copilot 管理员需要启用 MCP 服务器策略: 1. 在 GitHub 上前往您的组织设置 2. 导航到 **Copilot** → **Policies** 3. 启用 **"MCP servers in Copilot"** 策略 4. 保存更改 #### 第 2 步:安装 MCP 服务器 在您的项目中或全局安装 PyEye 服务器: ``` # 选项 A:在项目的 virtual environment 中安装(推荐) pip install pyeye-mcp # 选项 B:使用 pipx 全局安装 pipx install pyeye-mcp # 选项 C:从源码安装 git clone https://github.com/okeefeco/pyeye-mcp.git pip install -e ./pyeye-mcp ``` #### 第 3 步:配置 VS Code 将 MCP 服务器配置添加到您的 VS Code 设置中: **用户设置**(适用于所有项目): ``` // File: ~/.config/Code/User/settings.json (Linux/Mac) // or %APPDATA%\Code\User\settings.json (Windows) { "github.copilot.chat.mcpServers": { "pyeye": { "command": "python", "args": ["-m", "pyeye.mcp"], "env": {} } } } ``` **工作区设置**(特定于项目): ``` // File: .vscode/settings.json in your project root { "github.copilot.chat.mcpServers": { "pyeye": { "command": "${workspaceFolder}/.venv/bin/python", "args": ["-m", "pyeye.mcp"], "env": { "PYTHONPATH": "${workspaceFolder}" } } } } ``` #### 第 4 步:验证连接 1. 在您的 Python 项目中打开 VS Code 2. 打开 GitHub Copilot Chat 面板 3. 输入:`@mcp list` 查看可用的 MCP 服务器 4. 您应该能在列表中看到 `pyeye` 5. 使用以下命令测试:`@mcp pyeye find_symbol MyClass` #### 故障排除 **MCP 不可用:** - 确保您使用的是 Copilot Business/Enterprise(而非 Free/Pro) - 检查您的组织管理员是否已启用 MCP 策略 - 将 VS Code 更新至 1.102 或更高版本 **服务器未连接:** - 验证配置中的 Python 路径是否正确 - 检查是否已安装 `pyeye`:`python -m pyeye.mcp --help` - 在 VS Code 输出面板 → GitHub Copilot Logs 中查找错误 **导入错误:** - 如果使用虚拟环境,请确保路径指向 venv 中的 Python - 如有必要,请将 `PYTHONPATH` 添加到 env 配置中 #### 其他 IDE **JetBrains IDE**(IntelliJ, PyCharm 等): - MCP 支持已正式发布 - 在 Settings → Tools → GitHub Copilot → MCP Servers 中配置 **Visual Studio**: - MCP 支持处于预览阶段 - 在 Tools → Options → GitHub Copilot → MCP Servers 中配置 **Eclipse 和 Xcode**: - MCP 支持已正式发布 - 有关配置,请参阅 IDE 相关文档 ## 配置 可以配置服务器以分析其他位置的包。在您的项目中创建一个 `.pyeye.json` 文件: ``` { "packages": [ "../my-shared-library", "~/repos/company-utils", "/absolute/path/to/package" ], "namespaces": { "mycompany": [ "~/repos/mycompany-auth", "~/repos/mycompany-api" ] } } ``` ### 配置方法 配置按以下顺序加载(后者会覆盖前者): 1. **全局配置**:`~/.config/pyeye/config.json` 或 `~/.pyeye.json` - 用户默认配置 2. **项目配置**:项目根目录中的 `.pyeye.json` 或 `pyproject.toml` 中的 `[tool.pyeye]` 3. **覆盖文件**:`.pyeye.override.json` - 本地开发覆盖(被 git 忽略) 4. **自动发现**:如果未配置任何包,则自动检测源码布局和同级包 ### 使用覆盖文件 覆盖文件非常适合用于不应提交到版本控制的本地开发配置: ``` // .pyeye.override.json (git-ignored) { "packages": [ "../my-local-dev-package", "~/dev/experimental" ], "namespaces": { "company.feature": ["/home/user/feature-branch"] } } ``` ### 性能设置 所有对性能至关重要的设置均可通过环境变量进行配置,以便针对您的特定工作负载进行调优: | 环境变量 | 默认值 | 描述 | 有效范围 | |---------------------|---------|-------------|-------------| | `PYEYE_MAX_PROJECTS` | 10 | 内存中最大的项目数 | 1-1000 | | `PYEYE_CACHE_TTL` | 300 | 缓存生存时间(以秒为单位) | 0-86400 (24h) | | `PYEYE_WATCHER_DEBOUNCE` | 0.5 | 文件监视器防抖延迟(以秒为单位) | 0.0-10.0 | | `PYEYE_MAX_FILE_SIZE` | 1048576 | 要分析的最大文件大小(字节) | 1KB-100MB | | `PYEYE_MAX_WORKERS` | 4 | 最大并发分析工作线程数 | 1-32 | | `PYEYE_ANALYSIS_TIMEOUT` | 30.0 | 分析超时时间(以秒为单位) | 1.0-300.0 | | `PYEYE_ENABLE_MEMORY_PROFILING` | false | 启用内存分析 | true/false | | `PYEYE_ENABLE_PERFORMANCE_METRICS` | false | 启用性能指标 | true/false | | **连接池** | | **优化多项目工作流** | | | `PYEYE_ENABLE_CONNECTION_POOLING` | true | 为多个项目启用连接池 | true/false | | `PYEYE_POOL_MAX_CONNECTIONS` | 10 | 最大池化项目连接数 | 1-100 | | `PYEYE_POOL_TTL` | 3600 | 连接生存时间(以秒为单位) | 60-86400 | #### 性能调优示例 **具有稳定文件的大型代码库:** ``` export PYEYE_MAX_PROJECTS=50 # Handle more projects export PYEYE_CACHE_TTL=1800 # 30 minute cache export PYEYE_WATCHER_DEBOUNCE=2.0 # Less frequent updates ``` **具有频繁更改的活跃开发:** ``` export PYEYE_MAX_PROJECTS=5 # Fewer projects, faster switching export PYEYE_CACHE_TTL=60 # 1 minute cache export PYEYE_WATCHER_DEBOUNCE=0.1 # Near real-time updates ``` **内存受限环境:** ``` export PYEYE_MAX_PROJECTS=3 # Minimal project cache export PYEYE_MAX_FILE_SIZE=524288 # 512KB file limit export PYEYE_MAX_WORKERS=2 # Fewer workers ``` 此文件会被 git 自动忽略,并优先于所有其他配置源生效。 ### 自动检测源码布局 PyEye 会自动从 `pyproject.toml` 的构建后端元数据中检测源码布局,支持使用 `src/` 目录模式的项目。这适用于多个构建后端: **Setuptools:** ``` [tool.setuptools.packages.find] where = ["src"] ``` **Poetry:** ``` [[tool.poetry.packages]] include = "mypackage" from = "src" ``` **Hatch:** ``` [tool.hatch.build.targets.wheel] sources = ["src"] ``` **PDM:** ``` [tool.pdm.build] package-dir = "src" ``` 如果在 `pyproject.toml` 中未找到配置,PyEye 还将检查是否存在包含 Python 包的 `src/` 目录,并自动将其添加到包路径中。 **注意:** 显式的 `[tool.pyeye]` 配置始终优先于自动检测的布局。 ## 工作流资源 pyeye 将工作流指南作为 MCP 资源提供,以帮助 AI 代理和用户发现如何有效地将工具用于常见的多步骤任务。 ### 发现工作流 列出可用的工作流: ``` "List pyeye workflow resources" ``` 或使用 Claude Code 的 MCP 工具: ``` ListMcpResourcesTool(server="pyeye") ``` ### 使用工作流 **按需(试用):** ``` "Use pyeye find-references workflow" "Use pyeye refactoring workflow" "Use pyeye code-understanding workflow" "Use pyeye dependency-analysis workflow" "Use pyeye code-review-standards workflow" "Use pyeye code-review-security workflow" "Use pyeye code-review-pr workflow" ``` **永久(采纳):** ``` "Add pyeye find-references workflow to my CLAUDE.md" ``` AI 将获取该工作流,将其添加到您的上下文文件中,并在未来的会话中自动遵循它。 ### 可用工作流 1. **find-references** - 查找所有的类/函数引用,包括包以及 notebook/脚本 - 解决 `find_references` 仅适用于包的限制(issue #236) - 结合 `get_type_info`、`find_references` 和 `Grep` 实现完整覆盖 2. **refactoring** - 包含影响分析的安全重构 - 在修改代码之前分析子类、引用和依赖项 - 包含变更计划和验证步骤 - 通过全面分析防止破坏性更改 3. **code-understanding** - 理解不熟悉的代码结构 - 从“这是什么?”到“它是如何工作的?”进行系统性探索 - 涵盖符号定位、检查、层次结构、执行流程和使用模式 - 从基础到深度集成知识的渐进式理解 4. **dependency-analysis** - 分析模块依赖关系和架构 - 映射导入关系并识别循环依赖 - 计算耦合指标并评估变更影响 - 理解架构模式和模块关系 5. **code-review-standards** - Python 代码审查最佳实践 (2025) - 行业标准:PEP 8, PEP 257, PEP 484,以及现代 Python 特性 - 增强的 MCP 分析:类型安全、反模式、架构审查 - 将自动化检查与语义理解相结合 6. **code-review-security** - OWASP 安全代码审查 - 安全检查清单:输入验证、注入防护、认证模式 - 使用 MCP 工具进行数据流分析(在代码中追踪用户输入) - 特定框架的安全性(Flask/Django 插件集成) 7. **code-review-pr** - 完整的 Pull Request 审查工作流 - 结合自动化检查、语义分析和人工审查 - 分步流程:CI 验证 → 影响分析 → 标准 → 安全 - 建设性的反馈指南和时间预算 ### 示例使用流程 **发现 (README):** 用户了解到工作流的存在 ``` User: "How do I find all references to a class?" AI: "There's a find-references workflow for that. Let me show you..." ``` **试用(按需):** 用户尝试工作流 ``` User: "Use pyeye find-references workflow for this class" AI: [fetches workflow from MCP Resources] AI: [executes: get_type_info → find_references → Grep] AI: "Found 15 references: 12 in packages, 3 in notebooks" ``` **采纳(自助服务):** 用户将其添加到上下文中 **自动使用:** 未来的会话自动使用工作流 ``` User: "Find all uses of this class" AI: [sees workflow in context, follows steps automatically] AI: [returns complete results without prompting] ``` ### 优势 - **发现最佳实践** - 学习最优的工具组合 - **避免试错** - 工作流编码了已发现的模式 - **处理工具限制** - 包含权宜之计(例如 issue #236) - **自助式采纳** - 根据需要将工作流添加到您的上下文中 - **始终保持最新** - 工作流与 MCP 服务器共同维护 ### 技术细节 工作流通过 MCP 资源协议公开: - **URI scheme**:`workflows://[workflow-name]` - **格式**:Markdown(人类和 AI 可读) - **访问方式**:通过 `ListMcpResourcesTool` 和 `ReadMcpResourceTool` - **集成**:可以通过编程方式添加到用户上下文文件中 ## 核心工具 ### 基本导航 - **`find_symbol`** - 查找类、函数或变量定义,并带有重导出跟踪 - 现在包含 `import_paths` 字段,显示符号所有可用的导入路径 - 自动检测通过 `__init__.py` 文件的重导出 - 首先列出较短/首选的导入路径(例如,`from models import User` 优先于 `from models.user import User`) - **`goto_definition`** - 跳转到定义符号的位置 - **`find_references`** - 查找所有使用符号的地方 - **`get_type_info`** - 获取类型提示和 docstring - **`find_imports`** - 跟踪整个项目的模块导入 - **`get_call_hierarchy`** - 分析函数调用关系 - **`find_subclasses`** - 查找所有继承自给定基类的类 - 支持直接和间接继承 - 适用于内置类(Exception, str 等) - 可以显示完整的继承层次结构链 - 正确处理多重继承 ### 多项目工具 - **`configure_packages`** - 设置额外的包位置 - **`find_symbol_multi`** - 跨多个项目进行搜索 - **`configure_namespace_package`** - 设置分布式 Namespace Packages - **`find_in_namespace`** - 在 Namespace Packages 内搜索 ### 项目结构与分析 - **`list_project_structure`** - 查看 Python 项目文件组织结构 - **`list_packages`** - 列出所有具有结构的 Python 包 - **`list_modules`** - 列出模块的导出、类、函数和指标 - **`analyze_dependencies`** - 分析模块导入并检测循环依赖 - **`get_module_info`** - 获取包含指标和依赖项的详细模块信息 ### 特定框架工具(自动激活) #### Django(检测到 Django 时) - **`find_django_models`** - 查找所有 Django 模型 - **`find_django_views`** - 查找所有视图 - **`find_django_urls`** - 查找 URL 模式 - **`find_django_templates`** - 查找模板 - **`find_django_migrations`** - 查找数据库迁移文件 #### Pydantic(检测到 Pydantic 时) - **`find_pydantic_models`** - 发现所有 BaseModel 类 - **`get_model_schema`** - 提取完整的模型 schema - **`find_validators`** - 定位所有验证方法 - **`find_field_validators`** - 查找特定字段的验证器 - **`find_model_config`** - 提取模型配置 - **`trace_model_inheritance`** - 映射模型继承层次结构 - **`find_computed_fields`** - 查找 computed_field 和 @property 字段 #### Flask(检测到 Flask 时) - **`find_flask_routes`** - 发现所有带有方法和 endpoint 的路由装饰器 - **`find_flask_blueprints`** - 定位 Blueprint 定义和注册 - **`find_flask_views`** - 查找视图函数和 MethodView 类 - **`find_flask_templates`** - 定位 Jinja2 模板和 render_template 调用 - **`find_flask_extensions`** - 识别 Flask 扩展(SQLAlchemy, Login, CORS 等) - **`find_flask_config`** - 查找配置文件和 app.config 的使用 - **`find_error_handlers`** - 定位 @app.errorhandler 装饰器 - **`find_cli_commands`** - 查找 Flask CLI 命令 (@app.cli.command) ## 高级功能 ### 多项目支持 分析您的主项目以及本地依赖项: ``` # 配置以分析多个 packages configure_packages( packages=["../my-lib", "~/repos/shared-utils"], namespaces={"company": ["~/repos/company-*"]} ) ``` ### Namespace Packages 处理分布在多个仓库中的包: ``` # repo A 中的 company.auth,repo B 中的 company.api configure_namespace_package( namespace="company", repo_paths=["~/repos/company-auth", "~/repos/company-api"] ) ``` ### 文件更改时自动更新 服务器使用文件监视功能,在代码更改时自动更新: - 实时检测修改 - 使已更改文件的缓存失效 - 为每个项目维护单独的监视器 ## 架构 ``` PyEye ├── Core Server (FastMCP) │ └── 17 MCP tools registered ├── Project Manager │ ├── Multi-project support (LRU cache, max 10) │ ├── Connection pooling (optional optimization) │ ├── Namespace resolver │ └── Configuration loader (multiple sources) ├── Analysis Engine │ └── Jedi (semantic analysis & type inference) ├── Caching & Performance │ ├── File watchers (watchdog with debouncing) │ ├── Granular cache (5min TTL with smart invalidation) │ ├── Metrics collection (p50/p95/p99 latencies) │ └── Performance monitoring & reporting ├── Validation & Security │ ├── Input validation (MCP tool parameters) │ ├── Path security checks │ └── Safe file operations ├── Plugin System │ ├── Base plugin class (AnalyzerPlugin) │ ├── Pydantic plugin (7 specialized tools) │ ├── Django plugin (5 specialized tools) │ └── Flask plugin (8 specialized tools) ├── Utility Systems │ ├── Dependency tracking & circular detection │ ├── Import analysis & re-export resolution │ ├── Scope management (main/all/namespace scoping) │ ├── Async utilities (concurrent operations) │ └── Cross-platform path handling └── Development & Automation ├── Release automation agent ├── Dogfooding metrics tracking └── Worktree safety management ``` ## 插件开发 为您的项目模式创建自定义插件: ``` from pyeye.plugins.base import AnalyzerPlugin class MyProjectPlugin(AnalyzerPlugin): def name(self) -> str: return "MyProject" def detect(self) -> bool: # Return True if this plugin should activate return (self.project_path / "my_framework.conf").exists() def find_patterns(self, pattern_name: str): # Find your custom patterns pass ``` ## 性能监控详情 服务器包含全面的性能监控,以帮助识别瓶颈并为大规模部署优化性能。 ### 多项目工作流的连接池 默认情况下启用了连接池,以优化处理多个项目时的性能。您可以自定义池化行为: ``` # 自定义 connection pooling(默认已启用) export PYEYE_POOL_MAX_CONNECTIONS=20 # Increase pool size for many projects export PYEYE_POOL_TTL=7200 # Increase TTL to 2 hours # 或按需禁用 pooling export PYEYE_ENABLE_CONNECTION_POOLING=false # 启动 server uv run mcp dev src/pyeye/server.py ``` 连接池提供了显著的性能提升: - 减少频繁访问项目的**初始化时间** - 跨多个分析操作**共享连接** - 基于连接的 TTL 自动驱逐空闲连接 - 具有可配置限制的**内存高效**池化 ### 跟踪的指标 - **操作延迟**:所有 MCP 工具的 p50、p95、p99 百分位数 - **缓存性能**:命中率、未命中率、驱逐次数 - **连接池统计信息**:池大小、命中、未命中、驱逐、重用率 - **内存使用情况**:RSS、VMS、使用百分比 - **错误率**:跟踪每次操作的失败情况 - **吞吐量**:每秒操作数 ### 性能基准 CI 中强制执行以下性能基准: | 操作 | p50 (ms) | p95 (ms) | p99 (ms) | |-----------|----------|----------|----------| | symbol_search | 50 | 100 | 200 | | goto_definition | 30 | 75 | 150 | | find_references | 100 | 250 | 500 | | cache_lookup | 0.1 | 0.5 | 1.0 | ## 开发 ``` # 安装开发依赖 uv add --dev pytest black ruff mypy # 运行测试 uv run pytest # 格式化代码 uv run black src/ uv run ruff check src/ # 测试 server uv run mcp dev src/pyeye/server.py ``` ## 文档 - [安装指南](#installation) - [配置指南](#configuration) - [故障排除指南](docs/TROUBLESHOOTING.md) - 常见问题与解决方案 - [API 参考](#core-tools) ## 贡献 欢迎贡献!请随时提交 Pull Request。 ## 许可证 MIT 许可证 - 有关详细信息,请参阅 LICENSE 文件 ## 致谢 基于以下项目构建: - [Jedi](https://github.com/davidhalter/jedi) - Python 静态分析和类型推断 - [FastMCP](https://github.com/jlowin/fastmcp) - MCP 服务器框架 - [Watchdog](https://github.com/gorakhargosh/watchdog) - 文件系统监控
标签:MCP, Python, SOC Prime, 云安全监控, 代码分析, 代码智能, 凭证管理, 开发工具, 无后门, 逆向工具, 静态分析