news 2026/7/2 11:46:49

MobSF证书管理实战:HTTPS中间人测试与移动安全审计

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
MobSF证书管理实战:HTTPS中间人测试与移动安全审计

1. 项目概述:为什么MobSF的证书管理是移动安全测试的基石

在移动应用安全测试的日常工作中,我们常常会遇到一个核心场景:如何有效、安全地测试一个启用了HTTPS通信的应用?无论是金融App的API调用,还是社交应用的加密数据传输,HTTPS早已成为移动开发的标配。然而,对于安全测试人员来说,这堵“加密的墙”既是保护用户数据的屏障,也成了我们进行深度安全审计的障碍。直接绕过证书验证进行测试,不仅会破坏应用的正常逻辑,更可能遗漏因证书配置不当引发的严重安全漏洞,比如中间人攻击风险、证书固定绕过等。这正是Mobile Security Framework,也就是我们常说的MobSF,其内置的证书管理机制大显身手的地方。

MobSF作为一个开源的、一体化的移动应用(Android/iOS)自动化安全测试框架,其强大之处不仅在于静态和动态分析。它提供了一套完整的、面向安全测试场景的HTTPS中间人代理与证书管理解决方案。这套机制允许测试人员在受控环境下,透明地解密和分析应用的HTTPS流量,而无需修改应用源码或使用不安全的全局代理设置。理解并正确配置MobSF的证书管理,是解锁深度动态分析、API安全测试和敏感数据泄露检测的关键。今天,我就结合自己多次在红队演练和渗透测试中的实战经验,来拆解MobSF证书管理机制的核心原理、配置细节以及那些官方文档里不会写的“踩坑”实录。

2. MobSF证书管理机制的核心设计思路拆解

2.1 安全测试视角下的HTTPS中间人原理

要理解MobSF的证书管理,首先得抛开传统的“配置一个Charles/Fiddler证书”的简单思路。在安全测试中,我们的目标不是简单地“抓到包”,而是在不破坏应用原有安全模型的前提下,实现流量的可观测与分析。MobSF采用的是一种动态的、按需的中间人攻击技术。

其核心流程可以概括为:MobSF在本地启动一个HTTPS代理服务器(通常是运行在0.0.0.0:1337或类似端口)。当我们将移动设备的Wi-Fi代理指向这个地址后,所有经由设备发出的HTTPS请求都会首先到达MobSF代理。此时,对于每一个目标域名(例如api.example.com),MobSF会动态地生成一个与之对应的、由MobSF自建的私有根证书签发的“伪”服务器证书。这个证书的Subject Alternative Name会包含目标域名,使得移动设备上的应用认为它正在与真实的服务器通信。由于这个“伪”证书是由一个设备尚未信任的根证书签发的,所以我们需要先将MobSF的根证书安装并信任到测试设备的系统或用户证书存储区。一旦完成信任,整个通信链路就变成了:设备信任MobSF根证书 -> MobSF用根证书签发伪证书与设备通信 -> MobSF同时与真实服务器建立标准HTTPS连接 -> MobSF作为中间人,可以明文查看、修改、记录双向流量。

注意:这里的关键区别在于,MobSF的证书是动态按域名生成的,而不是使用一个固定的证书。这避免了某些应用实施的证书固定技术,因为固定的证书指纹会与MobSF动态生成的证书不匹配,从而导致连接失败。MobSF需要提供机制来处理或绕过这种固定。

2.2 MobSF证书管理架构的三层设计

MobSF的证书管理并非一个单一功能,而是一个包含三层逻辑的架构:

  1. 根证书管理层:这是信任的源头。MobSF在首次运行相关动态分析功能时,会在其配置目录(如~/.MobSF/certs/)生成一对自签名的根证书密钥对(CA证书和私钥)。这个根证书是长期存在的,是整个中间人体系的基石。其安全性和唯一性至关重要。

  2. 动态签发层:这是MobSF的核心引擎。当代理拦截到一个指向https://target.com的请求时,签发层会使用上述根证书私钥,即时为target.com这个域名签发一个服务器证书。这个过程模拟了正规CA的行为,但速度极快,在内存中完成。为了提升性能,MobSF通常会实现一个证书缓存机制,对同一域名签发的证书在一定时间内复用。

  3. 设备集成与信任层:这是与测试设备交互的部分。MobSF需要提供便捷的方式,让测试人员将其根证书安装到Android或iOS设备上。对于Android,这通常意味着将CA证书导出为.crt.pem文件,然后通过设备设置手动安装,或借助ADB命令推送至系统证书区(需要Root权限)。对于iOS,则需要将证书文件通过邮件、网页服务器或配置描述文件的方式发送到设备上安装,并在“设置-通用-关于本机-证书信任设置”中完全启用信任。

这种三层设计确保了灵活性:你可以更换自己的根证书(比如使用你自己公司内部受控的CA),也可以调整动态签发的策略(如证书有效期、密钥算法),同时设备信任过程虽然手动但清晰可控。

3. 核心细节解析:证书生成、安装与代理配置实操要点

3.1 MobSF根证书的生成与生命周期管理

默认情况下,MobSF在启动动态分析器时,会自动检查并生成所需的证书文件。但了解其幕后细节,有助于我们进行高级定制和故障排查。

证书位置与格式: 在典型的Linux部署中,MobSF的证书默认存储在$HOME/.MobSF/certs/目录下。你会找到类似以下文件:

  • ca.crt: 根证书(公钥),这就是需要安装到移动设备上的文件。
  • ca.key: 根证书的私钥,必须绝对保密,不应离开MobSF服务器。
  • ca.srl: 序列号文件,用于确保签发的每个证书有唯一序列号。

自定义根证书: 如果你所在的组织有严格的安全规定,不允许使用软件自动生成的自签名证书,你可以替换MobSF的默认证书。

  1. 使用OpenSSL生成你自己的CA证书和私钥:
    openssl genrsa -out my_ca.key 2048 openssl req -x509 -new -nodes -key my_ca.key -sha256 -days 3650 -out my_ca.crt
    在生成过程中,Common Name可以设置为如“MobSF Test CA”之类的标识。
  2. 将生成的my_ca.crtmy_ca.key分别重命名或替换掉MobSF证书目录下的ca.crtca.key务必确保权限正确ca.key应设置为仅所有者可读(chmod 600 ca.key)。

实操心得:在团队协作环境中,建议统一使用一个共享的、受控的CA证书。这样所有测试人员的设备只需要安装一次该证书,就能在所有MobSF实例上使用,避免了重复安装的麻烦。同时,这个共享CA的私钥应被妥善保管在安全的密钥库中。

3.2 移动设备证书安装的“魔鬼细节”

安装证书这一步看似简单,却是问题高发区。不同的Android版本和厂商定制系统,行为差异很大。

Android设备安装指南

  1. 获取证书文件:从MobSF Web界面的“动态分析”相关页面,或直接从服务器证书目录下载ca.crt文件。
  2. 用户证书安装(无需Root)
    • .crt文件传输到手机存储。
    • 进入“设置” -> “安全” -> “加密与凭据” -> “安装证书” -> “CA证书”。
    • 系统会警告,点击“仍然安装”,选择文件并为其命名(如“MobSF Test CA”)。
    • 安装完成后,在“用户凭据”或“信任的凭据” -> “用户”页签下可以看到它。
    • 关键点:从Android 7.0开始,默认情况下,用户安装的CA证书对部分应用(尤其是targetSdkVersion >= 24且未显式配置信任用户证书的应用)是无效的。这就是为什么很多App即使安装了证书也抓不到包的原因。
  3. 系统证书安装(需要Root)
    • 这是最可靠的方法。将ca.crt文件通过ADB推送到手机。
    • 需要将证书转换为PEM格式(如果还不是的话),然后重命名为特定的哈希值,并放入系统证书目录。
    # 将crt转换为pem (通常crt就是pem格式,可跳过) openssl x509 -inform DER -in ca.crt -out ca.pem # 如果是DER格式才需要 # 计算证书哈希 openssl x509 -inform PEM -subject_hash_old -in ca.pem | head -1 # 假设输出是`abc12345` cp ca.pem /sdcard/abc12345.0 # 通过ADB shell在Root下操作 adb shell su mount -o rw,remount /system cp /sdcard/abc12345.0 /system/etc/security/cacerts/ chmod 644 /system/etc/security/cacerts/abc12345.0
    • 重启设备后,该证书将在“系统信任的凭据”中生效,对所有应用可见。

iOS设备安装指南

  1. ca.crt文件通过邮件附件、AirDrop或内部网页服务器(如用Python启动一个简单HTTP服务)发送到iOS设备。
  2. 在设备上点击证书文件,系统会提示“已下载描述文件”,进入“设置-通用-设备管理”(或“VPN与设备管理”),找到对应的描述文件点击安装。
  3. 最关键的一步:安装完成后,进入“设置-通用-关于本机-证书信任设置”,找到刚刚安装的根证书,打开其完全信任的开关。缺少这一步,iOS系统级应用和严格遵循ATS的App将不会信任该证书。

3.3 MobSF动态分析代理的配置与启动

MobSF的动态分析通常与一个内置的或集成的代理工具绑定,比如它的“动态分析器”会启动一个基于Python的代理服务。

配置与启动流程

  1. 确保环境就绪:MobSF的Docker镜像或本地安装通常已包含所有依赖。如果是手动部署,需确认mitmproxy等库已安装。
  2. 启动MobSF动态分析:上传一个APK或IPA文件后,在MobSF的Web界面选择“动态分析”。MobSF后端会启动一个代理服务实例,并绑定到一个特定端口(如1337)。
  3. 获取代理地址:MobSF界面会明确显示代理服务器的IP和端口,格式为http://<MobSF_Server_IP>:1337注意,这里显示的是HTTP地址,但它同时处理HTTP和HTTPS流量。
  4. 设备网络配置:在移动设备的Wi-Fi设置中,修改当前网络的代理配置,选择“手动”,主机名填入MobSF服务器的IP地址,端口填入指定的端口(如1337)。不要设置认证,除非MobSF特别配置了。
  5. 安装MobSF证书:在设备浏览器中访问http://<MobSF_Server_IP>:1337(注意是HTTP),MobSF代理通常会提供一个便捷的页面,让你直接下载其根证书。点击链接下载并安装,遵循上述安装步骤。

配置验证: 完成以上步骤后,在设备上访问一个普通的HTTPS网站(如https://example.com)。如果一切正常,你可能会在MobSF的动态分析界面或代理日志中看到相关的请求记录。如果遇到“网络连接错误”或“证书无效”警告,说明证书安装或信任步骤有问题,需要回溯检查。

4. 实操过程:从零搭建MobSF HTTPS测试环境

4.1 环境准备与MobSF部署

假设我们在一台Ubuntu 22.04的云服务器或本地虚拟机(IP:192.168.1.100)上部署MobSF。这里以Docker部署为例,最为简洁。

# 1. 拉取最新的MobSF Docker镜像 docker pull opensecurity/mobile-security-framework-mobsf:latest # 2. 运行MobSF容器,将Web端口和动态分析端口都映射出来 docker run -it --rm -p 8000:8000 -p 1337:1337 \ --name mobsf \ -v $HOME/.MobSF:/home/mobsf/.MobSF \ opensecurity/mobile-security-framework-mobsf:latest
  • -p 8000:8000: 映射Web管理界面端口。
  • -p 1337:1337:至关重要,映射动态分析代理端口。MobSF容器内的代理默认运行在1337端口。
  • -v ...: 将主机目录挂载到容器的MobSF配置目录,这样证书等配置可以持久化保存。

运行后,在浏览器访问http://192.168.1.100:8000即可看到MobSF的Web界面。

4.2 执行首次动态分析并获取证书

  1. 在MobSF Web界面,上传一个待测试的APK文件(例如一个自己编写的Demo App)。
  2. 完成静态分析后,点击顶部的“动态分析”按钮。
  3. MobSF会启动一个Android模拟器(如果配置了)或等待你连接真实设备,并同时启动代理服务。此时请留意日志或界面提示,确认代理服务已成功在1337端口启动
  4. 在动态分析界面,MobSF通常会显示一行重要信息:“请将设备代理设置为:192.168.1.100:1337”。同时,界面会提供一个类似http://192.168.1.100:1337/cert.crt的链接用于下载证书。记下这个IP和端口。

4.3 配置测试设备与证书安装

以一台Android 12物理手机为例,与MobSF服务器在同一局域网

  1. 连接网络:确保手机连接到和MobSF服务器(192.168.1.100)同一局域网的Wi-Fi。
  2. 设置代理
    • 长按已连接的Wi-Fi网络 -> 修改网络 -> 高级选项。
    • 代理选择“手动”。
    • 代理主机名:192.168.1.100
    • 代理端口:1337
    • 保存。
  3. 下载并安装证书
    • 在手机浏览器中,访问http://192.168.1.100:1337。页面可能会自动跳转或显示一个简单的页面,提供证书下载链接。
    • 点击下载cert.crt或类似文件。
    • 下载完成后,系统会弹出安装证书的提示。按照系统向导,为证书命名(如“MobSF CA”),并完成安装。
    • 进入“设置” -> “安全” -> “更多安全设置” -> “加密与凭据” -> “信任的凭据” -> “用户”。确认“MobSF CA”证书已存在。
  4. 安装测试应用:如果MobSF没有自动安装,你需要手动将测试APK安装到手机上。

4.4 触发HTTPS流量与结果验证

  1. 在手机上打开已安装的测试应用,进行一些会产生网络请求的操作(如登录、刷新列表)。
  2. 回到MobSF的Web界面,在“动态分析”页面,你应该能看到一个“实时日志”或“流量捕获”的窗口开始滚动显示HTTP/HTTPS请求。
  3. 重点关注HTTPS请求。如果配置成功,你应该能看到:
    • 请求的完整URL(明文)。
    • 请求头和请求体(明文,可能包含表单数据、JSON等)。
    • 响应头和响应体(明文)。
    • 如果请求/响应是JSON或XML,MobSF可能会尝试进行格式化展示,便于阅读。
  4. 你可以点击具体的请求,查看其详细内容,并利用MobSF的其他功能进行安全测试,如检查是否存在敏感信息(密码、token)明文传输、API接口是否存在未授权访问漏洞等。

5. 常见问题与排查技巧实录

在实际操作中,你几乎一定会遇到各种证书和代理问题。下面是我总结的常见问题速查表。

问题现象可能原因排查步骤与解决方案
设备无法访问任何网络1. 代理IP或端口填写错误。
2. MobSF代理服务未成功启动。
3. 防火墙阻止了1337端口。
1. 检查设备代理设置,确认IP和端口与MobSF界面显示一致。
2. 在MobSF服务器上执行netstat -tlnp | grep 1337,查看端口是否被监听。
3. 检查服务器防火墙(如ufw)是否放行了1337端口:sudo ufw allow 1337
HTTPS网站/app提示“网络错误”或“连接失败”1. MobSF根证书未安装或未正确安装到设备。
2. 应用使用了证书固定。
1.确认证书安装:访问http://mitm.it(如果MobSF代理基于mitmproxy),或MobSF提供的证书下载页,重新下载安装。
2.确认证书信任:对于Android 7+,尝试将证书安装为系统证书(需Root)。对于iOS,务必在“证书信任设置”中启用完全信任。
3.检查证书固定:如果只有特定App失败,很可能是证书固定。需要配合Frida等工具进行Hook绕过,或使用已破解的App版本。
MobSF界面看不到任何流量1. 设备代理设置未生效或已关闭。
2. 测试App未产生网络请求,或请求走了非HTTP协议(如WebSocket、纯TCP)。
3. MobSF动态分析会话未正确启动或已超时。
1. 在设备上打开浏览器,访问一个HTTP网站(如http://neverssl.com),看MobSF界面是否有请求记录。这是最有效的测试方法。
2. 确认测试App的功能确实会触发网络请求。
3. 重启MobSF的动态分析会话,重新配置代理。
证书安装时提示“无法安装”或“文件格式错误”1. 证书文件损坏或格式不正确。
2. Android旧版本对证书格式有要求。
1. 从MobSF重新下载证书文件。
2. 尝试将.crt文件重命名为.pem后缀再安装。
3. 使用OpenSSL将证书转换为DER格式:openssl x509 -in ca.crt -outform DER -out ca.der,然后安装.der文件。
iOS设备安装证书后,仍不信任未在“证书信任设置”中启用完全信任。这是iOS的强制安全策略。必须进入“设置”->“通用”->“关于本机”->“证书信任设置”,找到对应的根证书,打开信任开关。
部分HTTPS请求内容仍是乱码/加密1. 应用使用了额外的加密层(如自定义SSL Pinning + 对Body二次加密)。
2. 使用了HTTP/2或HTTP/3,且代理支持不完善。
3. 请求是图片、视频等二进制流,MobSF未以文本形式展示。
1. 这是更高级的对抗。需要结合静态分析,定位应用自身的加解密逻辑,使用Frida进行动态解密。
2. 检查MobSF版本,更新到最新版以获得更好的协议支持。
3. 在MobSF的流量详情中,查看响应头Content-Type,确认是否为application/octet-stream等二进制类型。

独家避坑技巧

  1. 使用模拟器进行初步测试:在真机上反复安装/卸载系统证书非常麻烦。建议先在Android模拟器(如Android Studio AVD)上完成整个配置流程的验证。模拟器可以轻松获取Root权限,方便安装系统证书,且可以随时重置。
  2. 分应用配置代理:在Android上,可以使用第三方App(如“ProxyDroid”或“Postern”)实现按应用配置代理,避免全局代理影响设备上其他App的正常使用。这对于测试社交、支付类App尤其有用。
  3. 善用MobSF的“启动参数”:在动态分析设置中,MobSF有时允许你为测试应用注入额外的启动参数或Frida脚本。对于存在证书固定的App,可以预先准备好Frida脚本,在这里指定,让MobSF在启动App时自动执行Hook,绕过固定检测。
  4. 关注容器时间同步:如果你的MobSF运行在Docker容器中,务必确保容器时间与宿主机、以及你的测试设备时间基本同步。证书的有效期校验对时间非常敏感,大的时间偏差会导致证书被视为“无效”或“已过期”。
  5. 备份你的CA私钥:一旦你在一大批测试设备上安装了某个MobSF实例的CA证书,这个CA就成了信任链的关键。定期备份~/.MobSF/certs/目录,特别是ca.key文件。如果丢失,所有已安装该证书的设备都需要重新安装新证书,工作量巨大。

6. 高级配置:自定义证书与集成外部代理

对于企业级或更复杂的测试场景,你可能需要超越MobSF的默认配置。

6.1 集成Burp Suite作为上游代理

有时,你可能更习惯使用Burp Suite的丰富功能进行手动测试。可以将MobSF配置为将流量转发给Burp。

  1. 启动并配置Burp Suite:在Burp中,确保代理监听在127.0.0.1:8080(或其他端口)。
  2. 配置MobSF使用上游代理:这通常需要修改MobSF的配置文件或环境变量。对于Docker部署,可以在运行容器时设置环境变量。
    docker run -it --rm -p 8000:8000 -p 1337:1337 \ -e UPSTREAM_PROXY=http://host.docker.internal:8080 \ --add-host=host.docker.internal:host-gateway \ --name mobsf \ opensecurity/mobile-security-framework-mobsf:latest
    host.docker.internal是Docker中指向宿主机的特殊域名。这样,MobSF拦截的流量会先经过自己的证书解密,然后再转发给宿主机的Burp Suite(端口8080),最后由Burp转发到互联网。你需要在移动设备上安装MobSF的CA证书,而在Burp中可以看到解密后的明文流量。

6.2 处理顽固的证书固定应用

越来越多的应用采用了证书固定技术。MobSF本身可能无法直接绕过。这时需要“组合拳”:

  1. 静态分析定位固定代码:使用MobSF的静态分析或Jadx-GUI反编译APK,搜索关键词如CertificatePinnerPinningTrustManagerX509TrustManagercheckServerTrusted等,找到固定的域名和证书指纹。
  2. 使用Frida脚本动态Hook:编写Frida脚本,在运行时Hook上述关键方法,使其直接返回成功或修改校验逻辑。MobSF的动态分析功能支持注入Frida脚本。
    // 一个简单的示例,绕过OkHttp的CertificatePinner Java.perform(function() { var CertificatePinner = Java.use('okhttp3.CertificatePinner'); CertificatePinner.check.overload('java.lang.String', 'java.util.List').implementation = function(hostname, pins) { console.log('[+] Bypassing pinning for: ' + hostname); // 什么都不做,直接绕过检查 }; });
  3. 修改应用重新打包:对于更复杂的情况,可能需要直接修改Smali代码或使用Xposed模块,但这超出了MobSF本身的范围,属于更高级的逆向工程。

7. 安全实践与风险防范

最后,必须强调安全测试中的安全。MobSF的证书管理机制是一把双刃剑。

  1. 测试环境隔离:绝对不要在个人日常使用的手机或生产环境中安装测试用的CA证书。应使用专用的测试设备或模拟器。
  2. 保护CA私钥ca.key文件一旦泄露,攻击者可以用它签发任意域名的伪造证书,对安装了该CA证书的设备构成严重威胁。确保其存储位置安全,权限最小化。
  3. 测试后清理:完成测试后,务必从测试设备中移除安装的MobSF CA证书,并关闭代理设置。避免测试证书被无意中用于其他不安全的网络环境。
  4. 法律与授权:仅在拥有明确书面授权的范围内,对目标应用进行安全测试。未经授权的中间人攻击可能违反法律和公司政策。

我个人在实际项目中,会为每一个新的测试任务创建一个独立的MobSF Docker容器实例,任务结束后就销毁容器和对应的证书。对于长期使用的测试机,我会刷入一个干净的Android系统镜像,并永久性地将我们内部统一的测试CA证书安装为系统证书,这样就能一劳永逸地为所有测试任务提供一个稳定的基础环境。这套流程虽然前期设置稍显繁琐,但一旦跑通,后续的移动应用HTTPS安全测试效率会得到质的提升。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/2 11:44:05

STM32L151ZD与TPS65263的嵌入式电源管理设计

1. 项目背景与核心需求解析在嵌入式系统设计中&#xff0c;电源管理模块往往是最容易被忽视却又至关重要的部分。随着物联网设备的普及和边缘计算的兴起&#xff0c;对电源系统的要求已经从简单的"供电"演变为需要满足多重电压轨、高效率转换和智能管理的复杂需求。S…

作者头像 李华
网站建设 2026/7/2 11:35:55

2026年,如何挑选最适合你的品牌设计公司?

“品牌设计公司千千万&#xff0c;如何才能找到最合拍的那一个&#xff1f;”在品牌竞争日益激烈的2026年&#xff0c;这个问题困扰着无数企业主。一家合适的品牌设计公司&#xff0c;不仅能为你的品牌打造独特的视觉形象&#xff0c;更能助力品牌在市场中脱颖而出&#xff0c;…

作者头像 李华
网站建设 2026/7/2 11:33:39

大型机电维修需要团队协作吗?大型机电维修周期多长?

大型机电维修需要团队协作吗&#xff1f;大型机电维修周期多长&#xff1f;在工程领域&#xff0c;大型机电设备扮演着举足轻重的角色&#xff0c;其正常运行关乎整个生产流程的稳定性。对于大型机电维修而言&#xff0c;两个关键问题常被提及&#xff1a;是否需要团队协作&…

作者头像 李华
网站建设 2026/7/2 11:33:20

服务器面板配置加密实战:基于AES与RSA的混合加密方案详解

1. 项目概述&#xff1a;为什么我们需要为面板配置上锁&#xff1f;在服务器运维领域&#xff0c;面板工具极大地简化了我们的工作流程。mdserver-web 作为一款功能强大的 Linux 面板&#xff0c;集成了网站部署、数据库管理、防火墙配置等众多功能&#xff0c;让我们可以通过直…

作者头像 李华
网站建设 2026/7/2 11:33:05

AMD Ryzen深度调试工具:释放处理器隐藏性能的终极方案

AMD Ryzen深度调试工具&#xff1a;释放处理器隐藏性能的终极方案 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://gi…

作者头像 李华
网站建设 2026/7/2 11:32:12

WeMod破解终极指南:免费解锁专业版功能的完整教程

WeMod破解终极指南&#xff1a;免费解锁专业版功能的完整教程 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/gh_mirrors/we/Wand-Enhancer 还在为WeMod专业版的高昂订阅费而烦恼吗&a…

作者头像 李华