Loading... # ResDownloader 跨平台资源下载器技术分析 # 一、概述 ## 1. 简介 ### A. 是什么 ResDownloader(爱享素材下载器)是一款基于 Go + Wails 框架开发的跨平台资源下载工具。通过代理抓包技术实现网络资源的嗅探与下载,支持多种主流平台的内容获取。 ### B. 为什么值得关注 - 降低技术门槛:将专业的抓包技术封装为图形化工具,普通用户即可使用 - 跨平台支持:一套代码同时支持 Windows、macOS、Linux 三大平台 - 开源活跃:GitHub 13.6k star,1.7k fork,持续维护更新 - 技术栈典型:展示了 Go + Wails + Vue 技术组合的桌面应用开发实践 ### C. 能做什么 - 下载微信视频号、小程序中的视频和图片资源 - 抓取抖音、快手、小红书等平台的媒体内容 - 获取 m3u8 视频流、直播流资源 - 下载酷狗音乐、QQ音乐等音频资源 - 通过代理方式获取受限网络下的资源 ## 2. 项目数据 ### A. 仓库统计 - GitHub Stars:13.6k - Forks:1.7k - Contributors:4 人 - Commits:170 次 - 开源协议:Apache-2.0 ### B. 版本信息 - 最新版本:3.1.3(2024 年 12 月 30 日发布) - Win7 兼容版本:2.3.0(Electron 旧版) ## 3. 技术栈 ### A. 后端 - Go 43.6%:核心逻辑与网络处理 ### B. 前端 - Vue 39.6%:用户界面 - TypeScript 5.6%:类型安全 - JavaScript 3.3%:交互逻辑 - CSS 1.2%:样式 - HTML 0.2%:结构 ### C. 构建与打包 - NSIS 6.5%:Windows 安装包制作 # 二、架构设计 ## 1. 整体架构 ResDownloader 采用经典的桌面应用分层架构,通过本地代理实现网络流量拦截与资源提取。 ```mermaid graph TB User[用户] --> UI[前端界面<br/>Vue + TypeScript] UI --> IPC[IPC 通信<br/>Wails Runtime] IPC --> Backend[Go 后端<br/>核心逻辑] Backend --> Proxy[本地代理服务器<br/>127.0.0.1:8899] Proxy --> Filter[资源筛选器] TargetApp[目标应用<br/>微信/抖音/浏览器] --> Proxy Internet[互联网] --> Proxy Filter --> Storage[文件存储] Filter --> UI ```  ## 2. 核心组件 ### A. 本地代理服务器 职责:拦截系统网络流量 技术实现: - 监听地址:127.0.0.1:8899 - 协议支持:HTTP / HTTPS - 证书处理:自动安装并信任根证书以支持 HTTPS 解密 ### B. 资源筛选器 职责:从网络流量中识别并提取目标资源 筛选逻辑: - URL 匹配规则:根据域名和路径模式识别目标平台 - 内容类型过滤:video/*、audio/*、image/* - 文件大小过滤:过滤过小的资源文件 ### C. 下载管理器 职责:管理资源下载任务 功能特性: - 多线程下载:提高下载速度 - 断点续传:支持大文件下载 - 进度显示:实时反馈下载状态 # 三、工作原理 ## 1. 抓包原理 ResDownloader 的核心原理是通过中间人代理(MITM)方式拦截网络流量。 ```mermaid sequenceDiagram participant App as 目标应用 participant Proxy as 本地代理<br/>127.0.0.1:8899 participant Filter as 资源筛选器 participant Server as 目标服务器 App->>Proxy: 1. 发起 HTTP 请求 Proxy->>Server: 2. 转发请求 Server-->>Proxy: 3. 返回响应(含资源 URL) Proxy->>Filter: 4. 分析响应内容 Filter->>Filter: 5. 匹配资源规则 Filter-->>Proxy: 6. 返回提取的资源列表 Proxy-->>App: 7. 返回正常响应 Proxy->>UI: 8. 显示资源列表 ```  ## 2. HTTPS 处理 HTTPS 流量需要解密才能查看内容,ResDownloader 通过以下方式实现: 证书安装流程: 1. 软件首次启动时生成自签名根证书 2. 自动安装到系统受信任证书存储区 3. 为每个 HTTPS 域名动态生成证书 4. 浏览器/应用验证证书通过(因信任根证书) Windows 证书安装位置: - 当前用户:证书-当前用户 → 受信任的根证书颁发机构 - 本地系统:证书-本地计算机 → 受信任的根证书颁发机构 ## 3. 平台适配 不同平台的资源获取策略: | 平台 | 技术难点 | 解决方案 | |------|---------|---------| | 微信视频号 | 内嵌浏览器、加密传输 | Hook 网络请求、解密视频流 | | 抖音 | API 接口频繁变化 | 动态更新匹配规则 | | 快手 | 签名验证机制 | 提取真实播放地址 | | 小红书 | 图片懒加载 | 监听网络请求、预加载处理 | | m3u8 视频 | 分片下载、加密 | 合并 TS 分片、解密处理 | # 四、技术实现 ## 1. Wails 框架应用 Wails 是一个跨平台桌面应用开发框架,允许使用 Web 技术构建前端,Go 编写后端。 ### A. 项目结构 ``` res-downloader/ ├── frontend/ # Vue 前端项目 │ ├── src/ │ │ ├── components/ │ │ ├── views/ │ │ └── App.vue │ └── package.json ├── core/ # Go 后端核心 │ ├── proxy/ # 代理服务器 │ ├── filter/ # 资源筛选 │ └── download/ # 下载管理 ├── build/ # 构建配置 │ └── installer/ # 安装包制作 ├── main.go # 应用入口 └── wails.json # Wails 配置 ``` ### B. IPC 通信 前后端通过 Wails Runtime 提供的绑定机制通信: Go 后端暴露方法: ```go // main.go package main import ( "github.com/wailsapp/wails/v2" ) type App struct { ctx *wails.Runtime } // 启动代理服务 func (a *App) StartProxy(port int) error { // 代理启动逻辑 return nil } // 获取资源列表 func (a *App) GetResources() []Resource { // 返回资源列表 return resources } ``` 前端调用: ```typescript import { StartProxy, GetResources } from '../wailsjs/go/main/App' // 启动代理 await StartProxy(8899) // 获取资源 const resources = await GetResources() ``` ## 2. 代理服务器实现 Go 标准库 net/http 实现基础代理功能: ```go type ProxyServer struct { port int certMgr *CertificateManager filter *ResourceFilter } func (p *ProxyServer) ServeHTTP(w http.ResponseWriter, r *http.Request) { // 1. 记录请求 logRequest(r) // 2. 转发请求到目标服务器 resp, err := http.DefaultTransport.RoundTrip(r) if err != nil { http.Error(w, err.Error(), 502) return } defer resp.Body.Close() // 3. 复制响应头 copyHeader(w.Header(), resp.Header) // 4. 筛选资源 if p.filter.ShouldCapture(r, resp) { resource := p.filter.ExtractResource(r, resp) p.filter.AddResource(resource) } // 5. 返回响应给客户端 w.WriteHeader(resp.StatusCode) io.Copy(w, resp.Body) } ``` ## 3. 资源筛选器 根据 URL 和响应类型判断是否为目标资源: ```go type ResourceFilter struct { rules []MatchRule } type MatchRule struct { Domain string // 域名匹配 PathRegex string // 路径正则 MimeTypes []string // MIME 类型 } func (f *ResourceFilter) ShouldCapture(req *http.Request, resp *http.Response) bool { url := req.URL.String() contentType := resp.Header.Get("Content-Type") for _, rule := range f.rules { // 域名匹配 if !strings.Contains(url, rule.Domain) { continue } // 路径匹配 matched, _ := regexp.MatchString(rule.PathRegex, url) if !matched { continue } // MIME 类型匹配 for _, mt := range rule.MimeTypes { if strings.Contains(contentType, mt) { return true } } } return false } ``` # 五、部署与使用 ## 1. 系统要求 Windows: - Windows 10/11(最新版) - Windows 7(仅 2.3.0 Electron 版本) macOS: - macOS 10.15+ Linux: -主流发行版(Ubuntu、Fedora、Debian 等) ## 2. 安装步骤 ### A. 从 GitHub 下载 1. 访问 https://github.com/putyy/res-downloader/releases 2. 下载对应平台的安装包 3. 运行安装程序 ### B. 从蓝奏云下载 1. 访问 https://wwjv.lanzoum.com/b04wgtfyb 2. 解压密码:9vs5 3. 运行安装程序 ## 3. 使用流程 ```mermaid graph LR A[安装软件] --> B[启动代理<br/>127.0.0.1:8899] B --> C[配置系统代理] C --> D[打开目标应用<br/>微信/抖音等] D --> E[浏览内容] E --> F[软件自动捕获资源] F --> G[选择下载] ```  # 六、常见问题 ## 1. 证书安装失败 ### A. 现象 无法拦截 HTTPS 流量 ### B. 解决方案 - 以管理员身份运行软件 - 手动安装证书到 受信任的根证书颁发机构 - 检查杀毒软件是否阻止证书安装 ## 2. 资源无法捕获 ### A. 检查项 - 确认系统代理已设置为 127.0.0.1:8899 - 确认目标应用使用系统代理(而非自定义代理) - 检查目标平台是否更新了加密方式 ### B. 解决方案 - 重启目标应用 - 更新 ResDownloader 到最新版本 - 查看GitHub Issues 是否有同类问题 ## 3. 下载速度慢 ### A. 推荐工具 - Neat Download Manager:多线程下载 - Motrix:开源下载管理器 ### B. m3u8 专用工具 - 在线预览:https://m3u8play.com/ - 视频下载:https://m3u8-down.gowas.cn/ ## 4. 关闭软件后无法上网 ### A. 原因 系统代理未自动关闭 ### B. 解决方案 - Windows:设置 → 网络和 Internet → 代理 → 关闭 - macOS:系统设置 → 网络 → 高级 → 代理 → 取消勾选 - Linux:系统设置 → 网络 → 代理 → 关闭 # 七、技术亮点 ## 1. 降低技术门槛 传统抓包工具如 Fiddler、Charles 需要用户具备一定网络知识,ResDownloader 通过以下方式降低门槛: - 自动化配置:自动安装证书、配置代理 - 智能筛选:自动识别目标资源,过滤无关流量 - 图形化操作:直观的资源列表和下载管理 ## 2. 跨平台实现 使用 Wails 框架实现真正的跨平台: 优势对比: - Electron:体积大(100MB+)、内存占用高 - Tauri:生态相对较新,学习曲线陡峭 - Wails:体积小(10MB 左右)、性能好、Go 生态丰富 ## 3. 持续维护 - 版本更新频繁(最新版 3.1.3) - 及时响应平台变化(抖音、快手等接口更新) - 活跃的社区支持(GitHub Issues 回复及时) # 八、相关资源 ## 1. 项目链接 - GitHub 仓库:https://github.com/putyy/res-downloader - 在线文档:https://res.putyy.com/ - Mini 版:https://github.com/putyy/resd-mini - 旧版(支持 Win7):https://github.com/putyy/res-downloader/tree/old ## 2. 交流渠道 - GitHub Issues:https://github.com/putyy/res-downloader/issues - 爱享论坛:https://s.gowas.cn/d/4089 - 微信群:搜索二维码或加微信 AmorousWorld(备注 github) ## 3. 参考工具 - Wails 框架:https://github.com/wailsapp/wails - Fiddler:https://www.telerik.com/fiddler - Charles:https://www.charlesproxy.com/ *** ## 免责声明 本技术分析仅供学习与研究用途。ResDownloader 软件本身声明仅供学习与研究使用,禁止用于任何商业或违法用途。使用此类工具时,请遵守相关平台的服务条款和版权法律法规,尊重原作者的知识产权。 最后修改:2026 年 01 月 22 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏