返回市场
APK安全卫士MCP套件

APK安全卫士MCP套件

作者:cc-apk134 星标更新:2025-07-02

项目介绍

技术文档摘要

🚦 APK 安全卫士 MCP 套件

平台


📝 项目介绍

该项目旨在提供一个一站式的自动化解决方案,用于 Android APK 的安全分析和漏洞检测。通过整合主流的反编译、静态分析、动态分析等工具(如 JEB、JADX、APKTOOL、FlowDroid、MobSF 等),并将其统一到 MCP(模型上下文协议)标准 API 接口中,大大提高了安全分析的自动化程度和效率。适用于安全研究人员、渗透测试人员、开发者及其他有 APK 安全需求的用户。


🎬 效果展示

效果演示

⚙️ 配置说明

🧩 安装依赖

为了避免全局环境中的依赖冲突,强烈建议使用 Python 虚拟环境来管理项目依赖。以下是详细的安装步骤:

  1. 创建一个新的虚拟环境:
# 对于 Windows
python -m venv myenv
myenv\Scripts\activate

# 对于 Linux/MacOS
python -m venv myenv
source myenv/bin/activate
  1. 确认虚拟环境已激活(命令提示符中应显示 (myenv)),然后安装项目依赖:
pip install -r requirements.txt
  1. 如果需要使用 MobSF 相关 API,请单独安装 Node.js 依赖项,导航至 MobSF-MCP 目录:
npm install -g mobsf-mcp

📝 注意事项

  • 推荐使用 Python 3.11
  • 每次开始新的工作会话时,请记得激活虚拟环境

📦 插件或脚本安装推荐

JEB MCP 脚本

脚本需提前放置在 JEB 工具的脚本文件夹中。

  1. 打开 JEB 并导航至 文件 > 脚本 > 脚本选择器
  2. 从脚本列表中选择并运行 MCP.py
  3. 如果脚本成功加载并运行,您应在 JEB 输出控制台看到以下消息:
[MCP] 插件已加载
[MCP] 插件正在运行
[MCP] 服务器已在 http://localhost:16161 启动

JADX MCP 插件

  • 构建和运行插件需要 Java 17
  • JADX-MCP 根目录下运行:
    ./gradlew build
    
  • 构建完成后,插件 JAR 将生成于:
    plugin/build/libs/JADX-MCP-Plugin.jar
    
  • 或者,您可以直接使用预构建的 JAR 包: 下载 JADX-MCP-Plugin.jar
  • 将 JAR 文件复制到您的 jadx-gui 安装的 lib 文件夹中:
    cp plugin/build/libs/JADX-MCP-Plugin.jar <path-to-jadx-gui>/lib/
    

APKTOOL

要在 Windows 上安装 APKTool,可以使用 Chocolatey(一个流行的 Windows 包管理器):

以管理员身份打开 PowerShell。

  1. 运行以下命令安装 Chocolatey:
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor  3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
  1. 安装 Chocolatey 后,安装 APKTool:
choco install apktool

安装后,您可以直接从命令行使用 apktool。更多详细信息和高级用法,请参阅 官方 APKTool 文档


MobSF MCP

首先确保已安装 MobSF

如果希望扩展功能并添加新 API,请在项目根目录下的 MobSF-MCP 目录中运行以下命令:

npm run build

构建完成后,您将在构建文件夹中找到生成的 index.jsmobsf.js 文件。

以管理员身份打开 PowerShell。

  • 在命令行中设置所需的环境变量:
    $env:MOBSF_URL="http://localhost:8000"; 
    $env:MOBSF_API_KEY="your_api_key_here"; 
    
  • 使用以下命令启动 MobSF MCP 服务器:
    npx mobsf-mcp
    

FlowDroid

要为该套件设置 FlowDroid:

  1. 官方发布页面 下载 FlowDroid 的 soot-infoflow-cmd-2.13.0-jar-with-dependencies.jar 命令行 JAR。

  2. FlowDroid-MCP 目录中找到 .env 文件。使用文本编辑器打开它,并配置 FlowDroid JAR 的路径。例如:

FLOWDROID_WORKSPACE=../flowdroid_workspace
FLOWDROID_JAR_PATH=/home/user/tools/flowdroid/flowdroid.jar
JAVA_HOME=/usr/lib/jvm/java-11-openjdk

flowdroid_mcp.py 脚本中,FlowDroid 依赖于几个关键环境变量来运行。在运行脚本之前,请确保这些变量已正确配置。

# 第 15-18 行
FLOWDROID_WORKSPACE = os.getenv("FLOWDROID_WORKSPACE", "flowdroid_workspace")
FLOWDROID_JAR_PATH = os.getenv("FLOWDROID_JAR_PATH", "FlowDroid.jar")
JAVA_HOME = os.getenv("JAVA_HOME")

# 第 134-144 行
command = [
    "java",
    "-jar",
    FLOWDROID_JAR_PATH,  # 确保路径正确
    "-a", apk_path,
    "-o", output_dir,
    "-p", "Android\\Sdk\\platforms",  # 必须指定平台目录
    "-s", "FlowDroid-MCP\\script\\SourcesAndSinks.txt",  # 必须指定源/汇文件
]

📝 注意事项

  • 替换所有路径为您实际的系统路径
  • 确保正确指定了 Android SDK 平台目录

🖥️ VSCode Cline 扩展配置

为了在 VSCode 中使用此项目的 cline 扩展,请在您的 cline 配置文件中添加以下配置:

{
  "mcpServers": {
    "Jadx MCP Server": {
      "disabled": false,
      "timeout": 60,
      "command": "myenv\\Scripts\\python.exe",
      "args": [
        "JADX-MCP\\fastmcp_adapter.py"
      ],
      "transportType": "stdio"
    },
    "JEB MCP Server": {
      "disabled": false,
      "timeout": 1800,
      "command": "myenv\\Scripts\\python.exe",
      "args": [
        "JEB-MCP\\server.py"
      ],
      "transportType": "stdio"
    },
    "FlowDroid MCP Server": {
      "disabled": false,
      "timeout": 60,
      "command": "myenv\\Scripts\\python.exe",
      "args": [
        "FlowDroid-MCP\\script\\flowdroid_mcp.py"
      ],
      "transportType": "stdio"
    },
    "MobSF MCP Server": {
      "disabled": false,
      "timeout": 60,
      "command": "Nodejs\\node.exe",
      "args": [
        "MobSF-MCP\\build\\index.js"
      ],
      "env": {
        "MOBSF_URL": "http://localhost:8000",
        "MOBSF_API_KEY": "your_api_key_here"
      },
      "transportType": "stdio"
    },
    "APKTOOL MCP Server": {
      "disabled": false,
      "timeout": 60,
      "command": "myenv\\Scripts\\python.exe",
      "args": [
        "APKTOOL-MCP\\apktool_mcp_server.py"
      ],
      "transportType": "stdio"
    }
  }
}

📝 注意事项: 请根据您的实际文件路径和配置进行调整(根据您的系统进行调整)。 确保在配置中填写您的实际 MOBSF_API_KEY

🛠️ API

JEB MCP

架构基于 https://github.com/flankerhqd/jebmcp

✨ 主要 API 函数:

API描述
ping()检查 JEB MCP 服务器是否存活。
get_manifest(filepath)从 APK 获取 AndroidManifest.xml 内容。
get_apk_permissions(filepath)提取 APK 的 AndroidManifest.xml 中声明的所有权限。
get_apk_components(filepath)提取 APK 中的四大主要 Android 组件(活动、服务、接收器、提供者)及其属性。
get_method_decompiled_code(filepath, method_signature)根据其完全限定签名获取特定方法的反编译代码。
get_class_decompiled_code(filepath, class_signature)根据其完全限定签名获取特定类的反编译代码。
get_method_callers(filepath, method_signature)列出给定方法的所有调用者。
get_method_overrides(filepath, method_signature)列出给定方法的所有重写。
get_apk_info(filepath)获取基本 APK 信息,如包名、版本和主活动。
get_intent_filters(filepath)提取活动、服务和接收器的所有意图过滤器(动作、类别、数据)。
get_exported_components(filepath)列出所有导出组件(显式或隐式)及其属性。
list_broadcast_receivers(filepath)列出所有广播接收器及其意图过滤器。

参数说明:

  • filepath 应为 APK 文件的绝对路径。
  • method_signatureclass_signature 使用 Java 风格的内部地址,例如方法 Lcom/abc/Foo;->bar(I[JLjava/Lang/String;)V,类 Lcom/abc/Foo;

JADX MCP

架构基于 https://github.com/mobilehackinglab/jadx-mcp-plugin

✨ 主要 API 函数:

API描述
list_all_classes(limit, offset)返回 APK 中所有类名的分页列表。参数:limit(最大结果数,默认 250),offset(起始索引,默认 0)。
search_class_by_name(query)搜索包含给定关键词的类名(不区分大小写)。参数:query(字符串)。
get_class_source(class_name)返回给定类的完整反编译源代码。参数:class_name(完全限定类名,例如 com.example.MyClass)。
search_method_by_name(method_name)搜索与提供的名称匹配的所有方法。返回类和方法对作为字符串。参数:method_name(字符串)。
get_methods_of_class(class_name)返回指定类中声明的所有方法名。参数:class_name(完全限定类名)。
get_fields_of_class(class_name)返回指定类中声明的所有字段名。参数:class_name(完全限定类名)。
get_method_code(class_name, method_name)返回类中特定方法的源代码块。参数:class_name(完全限定类名),method_name(字符串)。
get_method_signature(class_name, method_name)返回方法的完整签名,包括返回类型和参数。参数:class_name(完全限定类名),method_name(字符串)。
get_field_details(class_name, field_name)返回字段的详细信息,包括其类型和修饰符。参数:class_name(完全限定类名),field_name(字符串)。
search_method_by_return_type(return_type)按返回类型搜索方法。参数:return_type(字符串)。
get_class_hierarchy(class_name)返回类的继承层次结构,包括其父类和接口。参数:class_name(完全限定类名)。
get_method_calls(class_name, method_name)返回特定方法内调用的所有方法。参数:class_name(完全限定类名),method_name(字符串)。
get_class_references(class_name)返回代码库中特定类的所有引用。参数:class_name(完全限定类名)。
get_method_annotations(class_name, method_name)返回应用于特定方法的所有注解。参数:class_name(完全限定类名),method_name(字符串)。
get_tools_resource()返回插件中所有可用工具及其描述的列表。

参数说明:

  • class_name 应为完全限定类名,例如 com.example.MyClass
  • method_name 是反编译代码中显示的方法名。
  • limitoffset 用于在列出类时进行分页。
  • query:搜索关键词,用于搜索包含关键词的类名或方法名。
  • return_type:方法的返回类型,用于按返回类型搜索方法。
  • field_name:字段名,用于获取字段的详细信息。

APKTool MCP

架构基于 https://github.com/zinja-coder/apktool-mcp-server (Apache 2.0 许可证)

✨ 主要 API 函数:

API描述
decode_apk(apk_path, force, no_res, no_src)反编译 APK 文件,提取资源和 smali 代码。参数:apk_path(APK 文件路径),force(强制覆盖),no_res(跳过资源),no_src(跳过源码)。
build_apk(project_dir, output_apk, debug, force_all)从解码项目重建 APK。参数:project_dir(项目路径),output_apk(输出路径),debug(包含调试信息),force_all(强制重新构建所有内容)。
clean_project(project_dir, backup)清理项目目录以准备重新构建。参数:project_dir(项目路径),backup(清理前创建备份)。
get_manifest(project_dir)从解码项目获取 AndroidManifest.xml 内容。参数:project_dir(项目路径)。
find_leak_manifest(project_dir)在清单中查找没有权限限制的导出组件。参数:project_dir
find_leak_components_source(project_dir, source_dirs)查找没有权限的导出组件并定位其源代码。参数:project_dirsource_dirs(源目录列表)。
list_smali_directories(project_dir)列出项目中的所有 smali 目录。参数:project_dir
list_smali_files(project_dir, smali_dir, package_prefix)列出特定目录中的 smali 文件。参数:project_dirsmali_dir(默认:"smali"),package_prefix(可选过滤器)。
get_smali_file(project_dir, class_name)获取特定 smali 文件的内容。参数:project_dirclass_name(完全限定类名)。
modify_smali_file(project_dir, class_name, new_content, create_backup)修改 smali 文件内容。参数:project_dirclass_namenew_contentcreate_backup(默认:True)。
list_resources(project_dir, resource_type)列出项目中的资源。参数:project_dirresource_type(可选,例如 "layout","drawable")。
get_resource_file(project_dir, resource_type, resource_name)获取资源文件内容。参数:project_dirresource_typeresource_name
modify_resource_file(project_dir, resource_type, resource_name, new_content, create_backup)修改资源文件内容。参数:project_dirresource_typeresource_namenew_contentcreate_backup(默认:True)。
search_in_files(project_dir, search_pattern, file_extensions, max_results)在项目文件中搜索。参数:project_dirsearch_patternfile_extensions(默认:[".smali",".xml"]),max_results(默认:100)。
get_apktool_yml(project_dir)获取解码项目中的 apktool.yml 信息。参数:project_dir

参数说明:

  • project_dir:APKTool 项目目录的路径
  • apk_path:APK 文件的路径
  • class_name:完全限定类名(例如 "com.example.MyClass")
  • resource_type:资源目录名(例如 "layout","drawable","values")
  • create_backup:在修改前是否创建备份(默认:True)
  • file_extensions:要搜索的文件扩展名列表(默认:[".smali",".xml"])

MobSF MCP

✨ 主要 API 函数:

API描述
uploadFile(file)将移动应用程序文件(APK、IPA 或 APPX)上传到 MobSF 进行安全分析。
getScanLogs(hash)获取先前分析过的移动应用程序的详细扫描日志。
`getJson