182 lines
4.8 KiB
Markdown
182 lines
4.8 KiB
Markdown
# 桥豆麻衣酱 App 近似源码提取说明
|
||
|
||
## 结论
|
||
|
||
已从安装包 `/Applications/桥豆麻衣酱.app` 的可执行文件中成功提取出前端静态资源。
|
||
|
||
这不是开发者原始仓库源码,而是:
|
||
|
||
- Tauri 桌面壳里的前端打包产物
|
||
- 可直接检索的 JS/CSS/worker/wasm 资源
|
||
- 足够用于做接口、权限、业务逻辑、模型支持范围的审计
|
||
|
||
当前共提取出 `29` 个资源,清单见:
|
||
|
||
- `manifest.json`
|
||
|
||
## 目录
|
||
|
||
- `app.arm64`
|
||
- 从通用 Mach-O 中切出来的 arm64 可执行文件
|
||
- `extract_tauri_assets.js`
|
||
- 本次用于提取内嵌资源的脚本
|
||
- `manifest.json`
|
||
- 每个资源的偏移、压缩大小、解压大小、输出路径
|
||
- `extracted/assets/`
|
||
- 解压出的前端资源
|
||
|
||
## 最重要的文件
|
||
|
||
- `extracted/assets/index-m-NWkaV-.js`
|
||
- 主前端 bundle,约 `4.0 MB`
|
||
- React + Vite 风格打包产物
|
||
- 绝大多数业务逻辑都在这里
|
||
- `extracted/assets/index-CgHmA0qR.css`
|
||
- 主样式文件,约 `182 KB`
|
||
- `extracted/assets/thumbnailWorker-Iu1AjlwR.js`
|
||
- 缩略图 worker,负责图片缩放和 JPEG 缩略图生成
|
||
- `extracted/assets/ort.bundle.min-OfoG_cy9.mjs`
|
||
- ONNX Runtime Web bundle
|
||
- `extracted/assets/ort.webgpu.bundle.min-CEayb2S6.mjs`
|
||
- ONNX Runtime WebGPU bundle
|
||
- `extracted/assets/ort-wasm-simd-threaded.jsep-D5Jk56-t.wasm`
|
||
- ONNX Runtime wasm 二进制,约 `23.9 MB`
|
||
|
||
## 从 bundle 中确认到的内容
|
||
|
||
### 1. 这确实是 Tauri 桌面应用
|
||
|
||
在主 bundle 中能直接看到 Tauri 调用痕迹和桌面特有命令,比如:
|
||
|
||
- `download_file_bypass_cors`
|
||
- `proxy_fetch`
|
||
- `start_local_server`
|
||
|
||
可在主文件里直接搜这些关键字。
|
||
|
||
### 2. 它不是纯聊天壳,而是带图像/视频工作流能力
|
||
|
||
主 bundle 中能搜到很多工作流节点和媒体能力相关关键词,例如:
|
||
|
||
- `gen-image`
|
||
- `gen-video`
|
||
- `storyboard-node`
|
||
- `inpaint-crop`
|
||
- `motion-control`
|
||
- `custom-agent`
|
||
- `local-save`
|
||
|
||
这说明它有比较完整的图像、视频、分镜、局部重绘、本地保存等功能。
|
||
|
||
### 3. 默认端点和多供应商能力都在前端 bundle 里
|
||
|
||
主 bundle 中可见默认端点配置:
|
||
|
||
- `https://ai.comfly.chat`
|
||
- `https://ai.t8star.cn`
|
||
- `https://api.midjourney.com`
|
||
|
||
还可以看到对多个供应商和模型系的支持痕迹,例如:
|
||
|
||
- `openai`
|
||
- `gemini`
|
||
- `deepseek`
|
||
- `doubao`
|
||
- `jimeng`
|
||
- `kling`
|
||
- `vidu`
|
||
- `zhipu`
|
||
- `moonshot`
|
||
- `qwen`
|
||
- `minimax`
|
||
- `midjourney`
|
||
- `suno`
|
||
|
||
### 4. 图片审核地址的默认值写在前端状态初始化里
|
||
|
||
主 bundle 内能直接看到默认审核地址:
|
||
|
||
- `http://118.196.112.236:3428/api/moderation/image`
|
||
|
||
同时它还读取这几个本地存储键:
|
||
|
||
- `qiaodoumayi_seedance_moderation_url`
|
||
- `qiaodoumayi_seedance_moderation_user_id`
|
||
- `qiaodoumayi_seedance_moderation_key_hex`
|
||
|
||
这说明图片审核地址并不是仅服务端下发,也可能由本地配置覆盖。
|
||
|
||
### 5. 本地保存能力通过本地服务和文件落地配合实现
|
||
|
||
主 bundle 中可见:
|
||
|
||
- `start_local_server`
|
||
- `qiaodoumayi_download_directory`
|
||
|
||
这说明它支持启动本地接收器/本地服务,再结合用户设置的下载目录做文件保存。
|
||
|
||
## 建议优先看的位置
|
||
|
||
### 主 bundle
|
||
|
||
文件:
|
||
|
||
- `extracted/assets/index-m-NWkaV-.js`
|
||
|
||
建议优先搜索这些词:
|
||
|
||
- `qiaodoumayi_`
|
||
- `seedance`
|
||
- `moderation`
|
||
- `download_file_bypass_cors`
|
||
- `proxy_fetch`
|
||
- `start_local_server`
|
||
- `runninghub`
|
||
- `api.openai.com`
|
||
- `generativelanguage.googleapis.com`
|
||
- `dashscope.aliyuncs.com`
|
||
|
||
### 缩略图 worker
|
||
|
||
文件:
|
||
|
||
- `extracted/assets/thumbnailWorker-Iu1AjlwR.js`
|
||
|
||
这个文件很短,适合先看,能快速确认:
|
||
|
||
- 它会 `fetch` 图片
|
||
- 用 `createImageBitmap` 和 `OffscreenCanvas` 做缩放
|
||
- 最终转成 JPEG data URL 返回给主线程
|
||
|
||
## 已确认的几个关键定位点
|
||
|
||
以下行号来自提取后的 bundle,可作为检索起点:
|
||
|
||
- `index-m-NWkaV-.js:924`
|
||
- `qiaodoumayi_seedance_moderation_url`
|
||
- `index-m-NWkaV-.js:1673`
|
||
- `download_file_bypass_cors`
|
||
- `index-m-NWkaV-.js:2068`
|
||
- `start_local_server`
|
||
|
||
注意:
|
||
|
||
- 这是打包文件,很多行非常长
|
||
- 行号只能作为“进入附近区域”的参考,不等于原始源码位置
|
||
|
||
## 局限
|
||
|
||
- 没找到 sourcemap
|
||
- 没恢复出原始 React/TypeScript 目录结构
|
||
- 变量名、模块边界、注释都已经过打包压缩处理
|
||
- 目前恢复的是“近似源码”,不是开发者仓库
|
||
|
||
## 怎么继续深挖
|
||
|
||
如果要继续做更细的审计,下一步建议按下面顺序:
|
||
|
||
1. 以 `index-m-NWkaV-.js` 为主,按 `qiaodoumayi_`、`seedance`、`proxy`、`download` 搜配置和命令入口
|
||
2. 把出现的外连域名、接口路径、Tauri 命令整理成一张表
|
||
3. 继续从本地存储和日志交叉验证哪些配置在这台机器上真正被启用
|
||
4. 对最敏感的几条链路单独追踪:图片审核、本地代理、本地保存、文件下载绕过 CORS
|