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

为了避免全局环境中的依赖冲突,强烈建议使用 Python 虚拟环境来管理项目依赖。以下是详细的安装步骤:
# 对于 Windows
python -m venv myenv
myenv\Scripts\activate
# 对于 Linux/MacOS
python -m venv myenv
source myenv/bin/activate
(myenv)),然后安装项目依赖:pip install -r requirements.txt
MobSF-MCP 目录:npm install -g mobsf-mcp
📝 注意事项:
- 推荐使用 Python 3.11
- 每次开始新的工作会话时,请记得激活虚拟环境
该脚本需要提前放置在 JEB 工具的脚本文件夹中。
文件 > 脚本 > 脚本选择器。MCP.py。[MCP] 插件已加载
[MCP] 插件正在运行
[MCP] 服务器已在 http://localhost:16161 启动
JADX-MCP 根目录下运行:
./gradlew build
plugin/build/libs/JADX-MCP-Plugin.jar
jadx-gui 安装的 lib 文件夹中:
cp plugin/build/libs/JADX-MCP-Plugin.jar <path-to-jadx-gui>/lib/
要在 Windows 上安装 APKTool,可以使用 Chocolatey(一个流行的 Windows 包管理器):
以管理员身份打开 PowerShell。
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'))
choco install apktool
安装后,你可以直接从命令行使用 apktool。更多详情和高级用法,请参阅 官方 APKTool 文档。
首先确保已安装 MobSF。
如果希望扩展功能并添加新 API,请在项目的 MobSF-MCP 根目录下运行以下命令:
npm run build
构建完成后,你将在构建文件夹中找到生成的 index.js 和 mobsf.js 文件。
以管理员身份打开 PowerShell。
$env:MOBSF_URL="http://localhost:8000";
$env:MOBSF_API_KEY="your_api_key_here";
npx mobsf-mcp
要为这个套件设置 FlowDroid:
从 官方发布页面 下载 FlowDroid 的 soot-infoflow-cmd-2.13.0-jar-with-dependencies.jar 命令行 JAR。
在 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 扩展,需在 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。
架构基于 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 的四个主要组件(活动、服务、接收器、提供者)及其属性。 |
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_signature 和 class_signature 使用 Java 风格的内部地址,例如 Lcom/abc/Foo;->bar(I[JLjava/Lang/String;)V 用于方法,Lcom/abc/Foo; 用于类。架构基于 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 是反编译代码中显示的方法名。limit 和 offset 用于分页列出类。query:搜索关键词,用于搜索类名或方法名。return_type:方法的返回类型,用于按返回类型搜索方法。field_name:字段名,用于获取字段的详细信息。架构基于 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_dir,source_dirs(源目录列表)。 |
list_smali_directories(project_dir) | 列出项目中的所有 smali 目录。参数:project_dir。 |
list_smali_files(project_dir, smali_dir, package_prefix) | 列出特定目录中的 smali 文件。参数:project_dir,smali_dir(默认:smali),package_prefix(可选过滤器)。 |
get_smali_file(project_dir, class_name) | 获取特定 smali 文件的内容。参数:project_dir,class_name(完全限定类名)。 |
modify_smali_file(project_dir, class_name, new_content, create_backup) | 修改 smali 文件内容。参数:project_dir,class_name,new_content,create_backup(默认:True)。 |
list_resources(project_dir, resource_type) | 列出项目中的资源。参数:project_dir,resource_type(可选,例如 layout,drawable)。 |
get_resource_file(project_dir, resource_type, resource_name) | 获取资源文件内容。参数:project_dir,resource_type,resource_name。 |
modify_resource_file(project_dir, resource_type, resource_name, new_content, create_backup) | 修改资源文件内容。参数:project_dir,resource_type,resource_name,new_content,create_backup(默认:True)。 |
search_in_files(project_dir, search_pattern, file_extensions, max_results) | 在项目文件中搜索。参数:project_dir,search_pattern,file_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"])✨ 主要 API 函数:
| API | 描述 |
|---|---|
uploadFile(file) | 将移动应用程序文件(APK、IPA 或 APPX)上传到 MobSF 进行安全分析。 |
getScanLogs(hash) | 获取先前分析过的移动应用程序的详细扫描日志。 |
getJsonReport(hash) | 生成并获取全面的安全分析报告 |