# MoePal（萌娘助手）网盘接口逆向分析报告

> 目标 APK：`http://dl.802213.xyz/down.php/033350479b8f123bbea0a4b0224e0110.apk`
> 分析方式：apktool 解码资源 + jadx 反编译 Java 层 + libapp.so / libgojni.so 字符串提取（静态分析，未发起任何实际请求）

## 一、应用概述与架构

该 APK 是 **MoePal（萌娘助手）**，一个多网盘聚合下载工具，包名 `com.moecloud.helper`，编译 SDK 36。核心定位是"解析网盘分享链接 → 获取直链 → 高速下载"，并内置视频播放能力。

**技术架构：Flutter 前端 + Go 下载引擎 + Dex2C 原生保护 三层**

| 层 | 组件 | 作用 |
|---|---|---|
| UI / 业务逻辑 | `libapp.so`（Dart AOT） | 网盘 API 调用、登录流程、文件列表、下载任务管理均在此层，接口 URL 与认证参数全部硬编码于 Dart 代码 |
| 下载引擎 | `libgojni.so`（Go，35MB） | 基于 **Gopeed** 开源下载引擎，支持 HTTP 多线程、BitTorrent、WebRTC、QUIC，通过 Flutter MethodChannel `gopeed.com/libgopeed` 桥接 |
| 原生保护 | `libyj-v3-pt-326.so` + `yj.v3.pt` 包 | **Dex2C 加固**：将 Java/Kotlin 方法编译为 C 原生代码，MainActivity 大量方法为 `native` 声明 |
| 媒体播放 | `libmpv.so`、`libmodpdfium.so` 等 | 内置 mpv 视频播放器与 PDF 渲染，支持视频在线播放与画中画（PiP） |

**关键识别信息：**

- 应用名：MoePal（中文"萌娘助手"），前台下载服务通知文案为"萌娘助手 / 下载服务运行中"
- 下载目录：`/storage/emulated/0/Download/MengNiang`，视频缓存目录 `/MengNiang/video_cache`
- 广播协议：`com.MengNiang.panbaidu.PAUSE_ALL_DOWNLOADS` / `RESUME_ALL_DOWNLOADS`（暂停/恢复全部下载）
- 权限：申请 `MANAGE_EXTERNAL_STORAGE`（全盘文件管理）、`REQUEST_INSTALL_PACKAGES`（静默安装 APK）、`SYSTEM_ALERT_WINDOW`（悬浮窗）等高危权限，并开启 `usesCleartextTraffic="true"` 允许明文 HTTP

## 二、网盘支持矩阵

应用内置 10 个网盘平台的接口实现：

| 平台 | 登录方式 | 核心域名 | 下载接口 |
|---|---|---|---|
| 阿里云盘 | WebView OAuth + JS 抓取 token | `auth.aliyundrive.com` | `api.aliyundrive.com/v2/file/download` |
| 百度网盘 | WebView + bdstoken | `pan.baidu.com` | filemetas / locatedownload / mediainfo 多路由 |
| 天翼云盘 | 密码 + 验证码 + 设备验证 | `cloud.189.cn` | `api/open/file/getFileDownloadUrl.action` |
| 迅雷云盘 | 账号 / 短信 / token | `api-pan.xunlei.com` | `drive/v1/tasks`（建任务） |
| 夸克网盘 | 账号 + 验证码 + 反爬签名 | `drive-pc.quark.cn` | `1/clouddrive/file/download` |
| 移动云盘 | WebView（caiyun.139.com） | `yun.139.com` | `hcy/file/getDownloadUrl` |
| 腾讯微云 | QQ/微信 openid + wyctoken | `share.weiyun.com` | WeiyunShare 系列接口 |
| 蓝奏云 | Cookie（mlogin.php） | `pc.woozooo.com` | 分享页解析直链 |
| 123 云盘 | 扫码登录 / 密码登录 | `yun.123pan.cn` | `api/file/download_info` |
| UC 网盘 | TV Token / 账号 | `pc-api.uc.cn` | `1/clouddrive/file/download` |

## 三、各网盘接口详情

### 1. 阿里云盘（Aliyun Drive / Alipan）

**登录流程：WebView OAuth**（不走原生 OAuth SDK）

```
打开 OAuth 授权页 → 用户扫码/密码登录 → 注入 JS 遍历 localStorage → 提取 token 回传 Dart
```

- OAuth 授权地址（硬编码 client_id）：
  `https://auth.aliyundrive.com/v2/oauth/authorize?login_type=custom&response_type=code&redirect_uri=https%3A%2F%2Fwww.aliyundrive.com%2Fsign%2Fcallback&client_id=25dzX3vbYqktVxyX&state=...`
- client_id 为官方 Web 端公开值 `25dzX3vbYqktVxyX`，登录完成后通过 `auth.aliyundrive.com/v2/account/token` 换取 access_token / refresh_token
- JS 注入脚本遍历 `window.localStorage` 与 `window.sessionStorage`，优先读取键名 `token`、`loginToken`、`aliyundrive_token`、`alipan_token`、`accountToken`、`account_token`，递归提取 `user_id` / `refresh_token` / `access_token` 后序列化回传

**文件获取与下载接口：**

| 功能 | 接口 |
|---|---|
| 文件列表 | `api.aliyundrive.com/adrive/v3/file/list` |
| 用户信息 | `user.aliyundrive.com/v2/user/get`、`adrive/v1/user/getUserCapacityInfo` |
| **下载直链** | `api.aliyundrive.com/v2/file/download`（携带 Authorization Bearer token） |
| 分享创建 | `adrive/v2/share_link/create` |
| 分享解析 | `adrive/v2/share_link/get_share_token` |
| 批量操作 | `adrive/v4/batch`、`adrive/v2/batch` |
| 回收站 | `adrive/v2/recyclebin/trash` |
| 异步任务 | `adrive/v2/async_task/get` |

### 2. 百度网盘（Baidu）

**登录流程：WebView + bdstoken**

- 通过 `passport.baidu.com` WebView 登录，登录后调用模板接口获取 **bdstoken**（防 CSRF 令牌），后续所有写操作与下载解析均需携带
- bdstoken 获取接口（app_id=250528）：
  `https://pan.baidu.com/api/gettemplatevariable?clienttype=0&app_id=250528&web=1&fields=["bdstoken"]`
- 同时内置 `cuid` 设备标识生成逻辑，UA 为百度网盘客户端特征串

**文件获取接口：**

| 功能 | 接口 |
|---|---|
| 文件列表 | `yun.baidu.com/api/list`（BaiduApi.getFileList） |
| 文件管理 | `pan.baidu.com/api/filemanager`、`yun.baidu.com/api/filemanager` |
| 容量配额 | `yun.baidu.com/api/quota` |
| 分享创建/转移 | `pan.baidu.com/share/set`、`share/transfer`、`share/verify`、`rest/2.0/xpan/share` |
| 上传提交 | `pan.baidu.com/api/create?a=commit&channel=chunlei&web=1&app_id=250528&clienttype=0` |

**下载直链解析（核心，4 条路由）：**

`BaiduApi.getDownloadUrl` 按顺序尝试多条路由，并自动**过滤限速主机**：

```
路由1 filemetas → 路由2 locatedownload → 路由3 mediainfo → 路由4 原始视频 dlink
```

- **路由 1：filemetas 获取 dlink** — `https://pan.baidu.com/api/filemetas`，按 fsid 批量查询，返回 `dlink` 直链；若 dlink 为空或指向限速主机则进入下一路由
- **路由 2：locatedownload 定位下载（绕过限速）** — `http://d.pcs.baidu.com/rest/2.0/pcs/file?method=locatedownload&dtype=1&eck=1&ehps=1&err_ver=1.0&es=1&esl=1&freeisp=0&network_type=WIFI&path=...`，携带 `bdstoken` 与 `access_token`，返回多个候选下载主机，应用从中挑选非限速节点（跳过 `d2-ant.baidu.com` 等限速域名）
- **路由 3：mediainfo（视频播放）** — `https://pan.baidu.com/api/mediainfo`，返回转码流地址
- **路由 4：原始视频 dlink**

> ⚠️ **自建后端代理**：应用内置自有后端 `https://mn.moepal.top/baidu/api/baidu_api.php`，用于在本地解析失败时转发百度网盘请求，属于应用运营方的服务端代理。

### 3. 天翼云盘（189 / 中国电信）

**登录流程：密码 + 验证码 + 设备验证**（最复杂，完整复刻电信统一账号体系 open.e.189.cn）

调试日志前缀：`[TianyiLoginDebug]` / `[TianyiPasswordLoginDebug]` / `[TianyiDeviceVerifyDebug]`

```
获取登录页 → needcaptcha 判断 → 图形验证码 → loginSubmit 提交 → 二次验证(SMS) → 设备验证 autoLogin
```

| 环节 | 接口 |
|---|---|
| 登录页 / 配置 | `open.e.189.cn/api/logbox/oauth2/appConf.do`、`encryptConf.do` |
| 是否需要验证码 | `open.e.189.cn/api/logbox/oauth2/needcaptcha.do` |
| 图片验证码 | `open.e.189.cn/api/logbox/oauth2/getPicCaptcha.do?captchaToken=`、`picCaptcha.do`、`getCaptcha.do` |
| 验证码校验 | `open.e.189.cn/api/logbox/oauth2/validateCode.do?captchaToken=` |
| **密码登录提交** | `open.e.189.cn/api/logbox/oauth2/loginSubmit.do`、`unifyAccountLogin.do` |
| 短信二次验证 | `open.e.189.cn/api/logbox/oauth2/sendSmsCodeForSecondAuth.do`、`submitForSecondAuth.do` |
| 设备验证 | autoLogin / autoLogin2（设备指纹 + 短信） |
| WAP 登录入口 | `open.e.189.cn/api/logbox/separate/wap/login.html?appId=cloud&clientType=20100&paras=...&sign=...`（内置预签名参数） |

登录成功后通过 `api.cloud.189.cn/getSessionForPC.action` 建立会话，并用 `open/oauth2/getAccessTokenBySsKey.action` 以 SsKey 换取 access_token。

**文件获取与下载接口：**

| 功能 | 接口 |
|---|---|
| 文件列表 | `cloud.189.cn/api/open/file/listFiles.action` |
| 文件详情 | `cloud.189.cn/api/open/file/getFile.action` |
| **下载直链** | `cloud.189.cn/api/open/file/getFileDownloadUrl.action`（另有 `api.cloud.189.cn` 域名版本） |
| 用户信息 | `cloud.189.cn/api/open/user/getUserInfoForPortal.action`、`m.cloud.189.cn/v2/getUserBriefInfo.action` |
| 分享解析 | `api/open/share/getShareInfoByCodeV2.action`、`listShareDir.action`、`checkAccessCode.action` |
| 批量任务 | `api/open/batch/createBatchTask.action`、`checkBatchTask.action` |

分享链接识别正则：`https?://cloud\.189\.cn/web/share\?code=([A-Za-z0-9]+)` 与 `https?://cloud\.189\.cn/t/([A-Za-z0-9]+)`

### 4. 迅雷云盘 / PikPak

**登录流程：账号 / 短信 / Token**（走官方移动端登录体系，UA 伪装为迅雷下载客户端）

| 功能 | 接口 |
|---|---|
| 密码登录 | `xluser-ssl.xunlei.com/xluser.core.login/v3/login` |
| 短信验证码 | `xluser-ssl.xunlei.com/xluser.core.login/v3/sendsms`、`/v3/smslogin` |
| Token 换取 | `xluser-ssl.xunlei.com/v1/auth/signin/token`、`/v1/auth/token` |
| 验证码初始化 | `xluser-ssl.xunlei.com/v1/shield/captcha/init`、`user.mypikpak.com/v1/shield/captcha/init` |

伪装 UA（appid/40）：`ANDROID-com.xunlei.downloadprovider/8.31.0.9726 netWorkType/5G appid/40 deviceName/Xiaomi_... OSVersion/12 protocolVersion/301 platformVersion/10 sdkVersion/512000 Oauth2Client/0.9 (Linux ...) (JAVA 0)`

PikPak 版本：`appname/com.pikcloud.pikpak`、`ANDROID-com.pikcloud.pikpak/1.47.1`；OAuth 回调协议 `xlaccsdk01://xunlei.com/callback?state=harbor`

**文件获取与下载接口：**

| 功能 | 接口 |
|---|---|
| 文件列表 | `api-pan.xunlei.com/drive/v1/files`、`drive/v1/resource/list` |
| 账号信息 | `api-pan.xunlei.com/drive/v1/about` |
| **下载（建任务）** | `api-pan.xunlei.com/drive/v1/tasks` |
| 批量操作 | `drive/v1/files:batchGet`、`:batchDelete`、`:batchMove` |
| 分享 | `drive/v1/share`、`share/detail`、`share/restore`；PikPak 另有 `api-drive.mypikpak.com/drive/v1/share/file_info` |
| 字幕 | `api-shoulei-ssl.xunlei.com/oracle/subtitle` |

分享链接识别正则：`https?://pan\.xunlei\.com/s/([A-Za-z0-9_-]+)`

### 5. 夸克网盘（Quark / 光雅盘）

**登录流程：账号 + 验证码 + 反爬签名**（使用 `guangyapan.com` 夸克盘官方域名账号体系）

| 功能 | 接口 |
|---|---|
| 密码登录 | `account.guangyapan.com/v1/auth/signin` |
| Token 换取 | `account.guangyapan.com/v1/auth/token` |
| 验证码 | `account.guangyapan.com/v1/shield/captcha/init`、`/v1/auth/verification`、`/v1/auth/verification/verify` |
| 用户信息 | `account.guangyapan.com/v1/user/me`、`pan.quark.cn/account/info?fr=pc&platform=pc` |

伪装 UA（夸克 PC 客户端）：`Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) quark-cloud-drive/2.5.20 Chrome/100.0.4896.160 Electron/18.3.5.12-a038f7b798 Safari/537.36 Channel/pckk_other_ch`；另有 `QuarkPC/6.0.8.649` UA；请求头包含 `x-mini-wua`（夸克风控签名）

**文件获取与下载接口（双下载路由）：**

| 功能 | 接口 |
|---|---|
| 文件列表 | `drive-pc.quark.cn/1/clouddrive/file?pr=ucpro&fr=pc&uc_param_str=...`、`/1/clouddrive/member` |
| **下载直链** | `drive-pc.quark.cn/1/clouddrive/file/download?pr=ucpro&fr=pc&sys=win32&ve=3.23.2` |
| 分享 | `drive-pc.quark.cn/1/clouddrive/share`、`share/sharepage/detail`、`share/sharepage/token`、`share/sharepage/save`、`share/password` |
| 任务 | `drive-pc.quark.cn/1/clouddrive/task` |
| 社交传输 | `drive-social-api.quark.cn/1/clouddrive/chat/conv/file/acquire_dl_token` |
| 文件操作 | `file/delete`、`file/move`、`file/rename`、`file/sort` |

- **双下载路由**（quark_download_route）：路由 1 直接调用 `file/download` 获取直链；路由 2 **fast-transfer sendToPC**（快传至电脑）——通过 `drive-social-api.quark.cn` 的 `acquire_dl_token` 换取下载凭证。线程数可分别配置（`gopeed_threads_drive_quark_route_1/2`）

> **夸克资源中心**（guangyapan.com API）：`api.guangyapan.com/nd.bizuserres.s/v1/...`：`get_res_download_url`（资源下载）、`get_share_download_url`（分享下载）、`get_file_list`、`get_share_page_files_list`、`get_share_access_token`、`get_res_center_token`、`get_task_status`、`restore_share` 等，用于解析夸克分享链接

### 6. 中国移动云盘（139）

**登录流程：WebView（caiyun.139.com）**

| 功能 | 接口 |
|---|---|
| 个人盘信息 | `user-njs.yun.139.com/user/disk/getPersonalDiskInfo` |
| 路由策略 | `user-njs.yun.139.com/user/route/qryRoutePolicy` |
| 文件列表 | `personal-kd-njs.yun.139.com/hcy/file/list` |
| **下载直链** | `personal-kd-njs.yun.139.com/hcy/file/getDownloadUrl` |
| 批量/回收站 | `hcy/file/batchMove`、`hcy/recyclebin/batchTrash`、`hcy/task/get` |
| 外链分享 | `share-kd-njs.yun.139.com/yun-share/.../IOutLink/getOutLinkInfoV6`、`dlFromOutLinkV3`、`createOuterLinkBatchOprTask` |
| 外链解析 | `yun.139.com/orchestration/personalCloud-rebuild/outlink/v1.0/getOutLink` |

### 7. 腾讯微云（Weiyun）

**登录与认证：QQ/微信 OAuth**，认证参数包括 `wyctoken`、`wy_appid`、`open_appid`、`weiyun_qq_openid`、`weiyun_wx_openid`，客户端标识 `weiyunQdiskClient`

- 内置 `WeiyunShareBatchDownload`（批量下载）、`WeiyunSharePartSaveData`、`WeiyunShareDirList`（目录列表）、`WeiyunShareView`、`WeiyunShareAddV2` 等分享解析逻辑
- 分享域名 `share.weiyun.com`，支持免登录解析（`weiyunShareNoLogin`）

### 8. 蓝奏云（Lanzou）

**登录与解析：Cookie 会话**（`lanzou_cookies` 保持登录态）

| 功能 | 接口 |
|---|---|
| 登录 | `up.woozooo.com/mlogin.php`、`pc.woozooo.com/mydisk.php` |
| 上传 | `pc.woozooo.com/doupload.php`、`up.woozooo.com/` |
| 分享解析 | `pan.lanzoui.com`、`developer.lanzoug.com`（LanzouShare） |

分享域名识别正则：`(^|\.)(?:lanzou[a-z0-9-]*|lan[zs]o[ux])\.(?:com|net|org|cn)$`，覆盖 lanzou/lanzous/lanzoux 等历史域名

### 9. 123 云盘（123pan）

**登录流程：扫码登录（QR 轮询）**，调试日志前缀 `[Pan123LoginDebug]`

```
qrGenerate 生成二维码 → uniId 就绪 → qrPolling 轮询状态 → 扫码确认 → saveAuth / reloadAuth
```

| 功能 | 接口 |
|---|---|
| 二维码生成 | `login.123pan.com/api/user/qr-code/generate` |
| 密码登录 | `user.123pan.cn/api/user/sign_in` |
| 用户信息 | `yun.123pan.cn/a/api/user/info`、`/b/api/user/info` |
| 文件列表 | `yun.123pan.cn/b/api/file/info` |
| **下载信息** | `yun.123pan.cn/api/file/download_info` |
| 分享创建 | `yun.123pan.cn/b/api/share/create` |
| 文件操作 | `b/api/file/mod_pid`、`rename`、`trash`、`upload_request` |

分享链接识别正则：`/(?:s|123pan)/([A-Za-z0-9_-]+)`，支持 `share.123pan.cn` / `share.123pan.com` 域名

### 10. UC 网盘

**认证与接口：TV Token 体系**，请求头 `x-clouddrive-st` 携带会话令牌

| 功能 | 接口 |
|---|---|
| TV Token 获取 | `api.extscreen.com/ucdrive/token`（UC TV Access Token） |
| 文件列表 | `pc-api.uc.cn/1/clouddrive/file`、`/1/clouddrive/member` |
| **下载直链** | `pc-api.uc.cn/1/clouddrive/file/download` |
| 分享 | `pc-api.uc.cn/1/clouddrive/share`、`share/sharepage/v2/detail`、`share/sharepage/save`、`share/password?pr=UCBrowser&fr=pc` |
| 任务 | `pc-api.uc.cn/1/clouddrive/task?pr=UCBrowser&fr=pc` |
| 文件操作 | `file/delete`、`file/move?pr=UCBrowser&fr=pc`、`file/rename`、`file/sort` |

token 字段：`tv_query_token`、`tv_refresh_token`、`tv_access_token_expires_at`、`access_end_point_token`、`uc_tv_token_required`

## 四、下载引擎与数据存储

所有网盘的下载直链最终统一交给 **Gopeed** 下载引擎执行，任务状态通过 SQLite 持久化。

**Gopeed 引擎：**

- 桥接通道：`gopeed.com/libgopeed`（Flutter MethodChannel），原生库 `libgojni.so` 为 Go 编译的 Gopeed 核心，内置 `anacrolix/torrent`（BT）、`quic-go`（QUIC）、WebRTC、HTTP 多线程等协议栈
- 可配置项：`gopeed_max_running`（最大并发数）、`gopeed_threads_drive_use_global_`（是否使用全局线程数）、`gopeed_threads_drive_quark_route_1/2`（夸克各路由线程数）、`gopeedVersion`
- 下载目录：默认 `/storage/emulated/0/Download/MengNiang`，视频缓存 `/MengNiang/video_cache`

**下载记录数据库（SQLite）** — 表 `download_links` 结构：

| 列 | 类型 | 说明 |
|---|---|---|
| id | TEXT PK | 任务 ID |
| fileName | TEXT | 文件名 |
| fileSize | INTEGER | 文件大小 |
| url | TEXT | 下载直链 |
| headers | TEXT | 请求头（可能含 Cookie/Token） |
| thumbnailUrl | TEXT | 缩略图 |
| sourceFileId | TEXT | 源文件 ID |
| source | TEXT | 来源（分享链接等） |
| driveType | TEXT | 网盘类型 |
| createdAt | INTEGER | 创建时间 |

前台服务"下载服务运行中"常驻通知，支持全局暂停/恢复（广播 `PAUSE_ALL_DOWNLOADS` / `RESUME_ALL_DOWNLOADS`）。

## 五、安全与防护发现

**应用自身防护：**

| 防护项 | 实现 |
|---|---|
| Dex2C 加固 | `yj.v3.pt` 包 + `libyj-v3-pt-326.so`，Java 方法编译为 C 原生代码 |
| 反调试 | `checkDebuggerEnvironment`（检测调试器） |
| 反模拟器 | `checkEmulatorEnvironment`（检测模拟器环境） |
| 反 Hook | `checkHookFramework`（检测 Xposed/Frida 等） |
| 反 Root | `checkRootEnvironment`（检测 Root 环境） |
| 反代理/反 VPN | `checkProxyEnvironment`、`checkVPNConnection`（阻止抓包） |
| 可疑应用检测 | `checkSuspiciousApps`（检测已安装的可疑工具） |

**风险点：**

1. **明文流量与敏感凭据**：开启 `usesCleartextTraffic="true"`，百度 locatedownload 使用 `http://` 明文；`download_links` 表 headers 字段可能持久化携带 Cookie/Token 的请求头
2. **自建后端代理**：内置 `mn.moepal.top/baidu/api/baidu_api.php` 代理百度接口，用户百度凭据可能经第三方服务器中转
3. **高危权限**：申请 `MANAGE_EXTERNAL_STORAGE`、`REQUEST_INSTALL_PACKAGES`（静默安装）、`SYSTEM_ALERT_WINDOW`（悬浮窗）等高危权限
4. **硬编码认证参数**：阿里 OAuth client_id `25dzX3vbYqktVxyX`、百度 app_id `250528`、迅雷 appid `40`、189 appId `cloud` 及预签名 paras/sign 均硬编码于 Dart 代码中，可被直接提取复用

## 六、总结

该应用是一个功能完整的**多网盘聚合下载器**，其接口实现具有以下特征：

- **登录方式分三类**：WebView 官方页登录（阿里、百度、移动、微云，通过 JS 注入抓取 token）、原生 API 登录（天翼、迅雷、夸克、123，含验证码/短信/扫码）、Cookie 会话（蓝奏云）
- **下载直链解析是核心能力**：百度采用多路由降级（filemetas → locatedownload → mediainfo）并过滤限速节点；夸克提供直链与"快传至电脑"双路由；其余平台均调用官方下载接口换取直链
- **统一交给 Gopeed 引擎下载**：支持多线程、断点续传、BT/QUIC，任务与直链（含 headers）持久化于 SQLite
- **防护与风险并存**：Dex2C 加固 + 多重环境检测提升逆向门槛，但明文流量、自建代理、高危权限与硬编码凭据构成实际风险

> 本报告基于 APK 静态反编译（apktool + jadx + 字符串提取）得出，未对任何平台发起实际请求；接口细节以官方最新版本为准。
