一.JADX MCP介绍
JADX MCP 是一个mcp工具,用于连接 AI 助手与 JADX-GUI(Android APK 反编译工具)。它让 AI 助手能够直接访问和分析 Android 应用的代码结构。
核心功能:
- 代码浏览:获取类源代码、方法实现、字段定义
- 智能搜索:按类名、方法名、关键词搜索
- 资源访问:读取 AndroidManifest.xml、strings.xml 等资源
- 代码重构:支持重命名类、方法、字段
- 调试支持:查看调用栈、线程、变量
应用场景:
- APK 逆向分析:快速定位关键逻辑
- 安全审计:检查权限、敏感操作
- 代码学习:理解应用架构与实现
- 自动化分析:批量提取信息
技术优势:
- 实时交互:与 JADX-GUI 实时同步
- 结构化数据:返回可解析的代码结构
- 多语言支持:Java、Smali 等
- 高效查询:支持分页与过滤
JADX MCP 将 JADX-GUI 的能力以 API 形式暴露,使 AI 助手能更高效地分析 Android 应用,提升逆向与安全研究的效率。
二.插件环境配置
1.安装配置JADX GUI
先安装JADX GUI,这里如果本地已安装可以省略该操作,这里也提供下安装JADX的地址:github.com/skylot/jadx…
下载jadx-gui-1.5.3-win.zip文件,下载完成之后,本地解压,然后双击运行jadx-gui-1.5.3.exe既可以使用
2.下载JADX-AI插件
现需要下载插件的服务端的部署代码,github地址 :github.com/zinja-coder…,需要下载两个文件:
- jadx-ai-mcp-.jar(JADX插件)
- jadx-mcp-server-.zip(MCP服务端源码/脚本工程压缩包)
下载完成之后将文件放到本地的目录下,解压jadx-mcp-server-v4.1.0.zip文件,可以得到,这里建议将jadx-ai-mcp-.jar(JADX插件)放到jadx-mcp-server同级目录下,参考:
3.配置JADX-AI插件
准备好后可以开始本地安装jadx-ai-mcp插件了,这里直接通过GUI界面操作,打开本地的jadx-gui程序进入插件选择manage plugin,安装插件选择本地待安装的jadx-ai-mcp-4.1.0.jar插件地址,然后打开直接安装
安装成功之后可以看到jadx-ai-mcp插件信息。
4.配置JADX MCP服务
安装完成插件后,开始安装mcp服务,这里需要使用到管理工具uv,uv的安装方式。如果本地有安装可以跳过,输入命令:pip install uv , 如果pip无法执行需要安装Python环境,这个可以找下相关教程安装本地Python环境,这里不再赘述了。
安装完uv之后,可以进入到工程激活创建虚拟环境,输入命令:uv venv
激活环境之后安装依赖包到当前虚拟环境,使用命令:uv pip install httpx fastmcp
经此操作之后,jadx-ai-mcp拆件配套的jadx-mcp-server运行环境就准备好了,后续可以在该环境中启动开发服务和插件联动。
三.使用JADX-AI工具反编译apk
1.使用Cursor集成MCP
这里使用Cursor配置jadx-ai-mcp工具,进行apk的逆向工程分析,其他的agent工具可以参考mcp配置方式进行配置使用。配置参考:
"jadx-mcp-server": {
"command": "uv",
"args": [
"--directory",
"E:\jadx-mcp-server-v4.1.0\jadx-mcp-server",
"run",
"jadx_mcp_server.py"
],
"disabled": false
}
配置成功后可以看到cursor mcp加载成功
2.Cursor实战演示
这里我们使用了一个微信的apk,在jadx GUI打开之后,成功反编译了微信的源码
打开插件信息可以看到 jadx ai mcp server的服务状态是running,表示服务已经启动运行
然后我们在Cursor里面输入提问:帮我看看这个apk类的核心逻辑(当然这个问题比较笼统),实际看到AI已经正确理解并连接上了工程代码
经过漫长的思考过程,因为微信的工程比较大,这里最终得出了分析结论:
微信APK核心逻辑总结
- 应用架构
Application层
com.tencent.p086mm.app.Application
继承自 TinkerApplication(热修复框架)
管理应用初始化
限制在 attachBaseContext() 期间调用 getBaseContext()
主界面层
com.tencent.p086mm.p319ui.LauncherUI
主启动Activity,单例模式
负责启动聊天界面
关键方法:startChatting() 启动聊天
聊天界面层
com.tencent.p086mm.p319ui.chatting.ChattingUI
聊天Activity,管理 ChattingUIFragment
在 onResume() 中根据聊天类型(单聊/群聊/企业/服务号等)初始化对应组件
com.tencent.p086mm.p319ui.chatting.ChattingUIFragment
核心聊天Fragment
管理聊天列表视图(MMChattingListView)
使用适配器(C59641j)显示消息
支持多种聊天类型:
单聊(SingleChat)
群聊(GroupChat)
企业单聊(EnterpriseSingle)
企业群聊(EnterpriseGroup)
服务号(ServiceChat)
通知消息(ServiceNotification)
微信运动(WeRun)
- 数据模型
com.tencent.p086mm.storage.C59115i4
联系人/用户信息类
判断用户类型(普通用户、群聊、服务号等)
识别特殊账号(如 @chatroom、@app、@gamelife 等)
- 核心功能模块
消息处理
消息列表管理:MMChattingListView + C59641j 适配器
消息加载:多种加载器(ChattingDataPresenterFactory)
消息滚动:自动滚动到底部、分页加载
生命周期管理
doAttach():Fragment附加到Activity
doResume():恢复时恢复消息监听、更新UI
doPause():暂停时停止消息监听、保存状态
onEnterBegin():进入聊天界面时初始化
onExitBegin():退出聊天界面时清理
UI组件系统
使用组件化架构(UIComponent)
各功能模块通过接口注入(如 InterfaceC79261f、InterfaceC79289o0 等)
- 关键设计模式
单例模式:LauncherUI.getInstance()
工厂模式:ChattingDataPresenterFactory 创建不同加载器
观察者模式:事件监听(IListener)处理音乐播放、错误等
组件化:通过接口注入实现模块解耦
- 特殊功能识别
从 C59115i4 的静态方法可见支持:
群聊:@chatroom、@im.chatroom
小程序:@app、@appbrand
游戏:@gamelife、@gamelifesess
服务号:officialaccounts、gh_*
特殊账号:文件传输助手、微信团队、QQ邮箱等
- 技术特点
热修复:集成 Tinker
多进程:支持多个进程(:tools、:sandbox、:push 等)
MVVM:部分使用 MVVM 架构(MvvmChatList)
性能优化:消息列表懒加载、分页加载、视图复用
这是一个模块化、组件化的即时通讯应用架构,支持多种聊天场景和功能扩展。
这个答案初步总结了微信的核查逻辑还是太笼统,问题具体的问题:关于微信UI绘制这部分density的处理机制,经过一段思考可以得到一些初步的分析
实际看这里关density的处理,微信针对竞品有做特殊适配,可以在一些三方显示问题上,判断竞品复现的差异点,对于分析三方无类问题有一定的源码支撑。继续追问:自定义density:通过C90603e管理,这类的管理机制介绍下,怎么支持固定density的处理,AI分析得出如下结论
- 启用时:返回 f267625c(固定 density)
- 未启用时:返回 f267627e(系统原始值)
系统级注入:通过反射修改 Bitmap 和 DisplayMetrics 的静态字段,通过 Resources 包装类让所有 UI 组件使用固定 density。也就解释了微信为何不随字体大小切换变化,自己维持一套字体的自定义机制。
当然为了避免繁琐的下载apk的过程,我们可以找到一台测试机器,使用mobile-mcp工具操作测试机器,
直接通过该mcp工具拉取机器上的apk文件进行反编译分析,参考
apk拉取到本地目录后,直接通过jadx 打开这个apk文件,再进入Cursor执行命令开始分析反编译的apk源码
注意:这里因为是使用jadx 进行反编译,AI工具(Cursor等)负责理解分析反编译代码,所以每次需要分析一个apk前,需要使用jadx GUI打开apk反编译之后再使用AI工具(Cursor等)进行分析。
四.工具总结
以上实战演示,只是初步的分析了三方APP的部分机制,而在实际分析过程中,可以在jadx里右键复制该类的名称和路径,以确保AI能够准确地找到并分析你希望深入研究的具体类。
1.JADX AI代码分析能力
类级别操作:
- get_class_source:获取完整类源代码
- get_all_classes:分页获取所有类(支持大项目)
- search_classes_by_keyword:关键词搜索类
- get_methods_of_class:列出类的所有方法
- get_fields_of_class:列出类的所有字段
方法级别操作:
- get_method_by_name:获取特定方法实现
- search_method_by_name:跨类搜索方法
- get_smali_of_class:获取Smali代码
实际价值:
- 快速定位目标类和方法
- 理解代码结构与调用关系
- 支持混淆代码的逆向分析
清单文件:
- get_android_manifest:获取完整 AndroidManifest.xml
- get_main_activity_class:定位主Activity
- get_main_application_classes_names:获取Application类
资源文件:
- get_strings:获取 strings.xml(支持分页)
- get_resource_file:获取任意资源文件
- get_all_resource_file_names:列出所有资源文件
实际价值:
- 快速了解应用结构与权限
- 提取字符串资源用于分析
- 定位入口点与关键组件
重命名功能:
- rename_class:重命名类
- rename_method:重命名方法
- rename_field:重命名字段
调试功能:
- debug_get_stack_frames:获取调用栈
- debug_get_threads:获取线程信息
- debug_get_variables:获取变量值
实际价值:
- 改善代码可读性
- 动态调试分析执行流程
- 理解运行时状态
上下文感知:
- get_current_class:获取当前打开的类
- get_selected_text:获取当前选中的文本
实际价值:
- 基于当前上下文提供分析
- 支持交互式代码探索
2.实用价值分析
传统方式 vs JADX AI:
| 操作 | 传统方式 | JADX AI | 效率提升 |
|---|---|---|---|
| 查找类 | 手动浏览包结构 | 关键词搜索 | 10x+ |
| 分析调用链 | 手动追踪 | 方法搜索+调用栈 | 5x+ |
| 提取资源 | 解压APK+解析 | 直接API调用 | 3x+ |
| 理解架构 | 反复跳转查看 | 结构化查询 | 5x+ |
实际案例:
- 本次分析微信APK:从AndroidManifest → Application → LauncherUI → ChattingUI,快速定位核心逻辑
- 分析density机制:通过关键词搜索找到C90603e类,快速理解管理机制
智能问答能力:
- 直接询问类功能,AI基于代码回答
- 分析设计模式和架构
- 解释复杂逻辑流程
实际案例:
用户:"解析下sm0.C132804n0类的核心策略"
→ AI分析类代码,总结出6大核心策略和设计模式
快速定位风险点:
- 搜索敏感API调用(网络、文件、权限)
- 分析加密实现
- 检查数据存储方式
实际价值:
- 快速识别潜在安全风险
- 分析恶意行为模式
- 验证合规性
代码学习:
- 学习大型应用的架构设计
- 研究特定功能的实现方式
- 理解Android系统机制
实际案例:
- 学习微信的density管理机制
- 理解Tinker热修复框架集成
- 分析组件化架构设计
3.应用场景
安全研究
场景:分析恶意APK
流程:
1. get_android_manifest → 查看权限和组件
2. search_classes_by_keyword("encrypt") → 找加密逻辑
3. get_method_by_name → 分析加密实现
4. debug_get_variables → 动态调试密钥
竞品分析
场景:分析竞品UI实现
流程:
1. search_classes_by_keyword("UI") → 找UI类
2. get_class_source → 查看实现细节
3. get_resource_file → 提取布局文件
4. 分析设计模式和最佳实践
漏洞挖掘
场景:寻找SQL注入漏洞
流程:
1. search_method_by_name("query") → 找数据库操作
2. get_method_by_name → 分析SQL拼接逻辑
3. 识别潜在的注入点
功能逆向
场景:理解某个功能的实现
流程:
1. 从UI入口开始追踪
2. get_methods_of_class → 查看方法列表
3. get_method_by_name → 分析关键方法
4. 构建完整的调用链
4.实际使用体验
优势:
- 自然语言交互,降低使用门槛
- 上下文理解,提供精准分析
- 快速定位,大幅提升效率
- 结构化输出,便于后续处理
局限性:
- 依赖JADX-GUI运行
- 需要网络连接(AI服务)
- 对混淆代码的理解有限
- 大项目查询可能较慢
5.最佳实践建议
渐进式分析
第一步:get_android_manifest → 了解整体结构
第二步:get_main_activity_class → 找到入口
第三步:search_classes_by_keyword → 定位关键类
第四步:get_class_source → 深入分析
关键词策略
- 使用功能相关关键词(如"chat"、"payment")
- 使用技术关键词(如"encrypt"、"network")
- 使用类名模式(如"Manager"、" Helper")
组合查询
- 先搜索再深入:search_classes_by_keyword → get_class_source
- 方法追踪:search_method_by_name → get_method_by_name
- 资源关联:get_strings → search_classes_by_keyword