v0版本完成:新增 4 篇详细文档(README 精简内容的落点)
README 为了防冗余做了精简,被移出的详细内容写成文档放这里:
- 功能票使用说明.md 买票/用票的完整原理、报文依据、playCredit 公式、实测记录
- 账号转生说明.md reincarnate 完整流程、分批规则(避开 2 首)、
续关登录依据、登出 type=1 依据、playlog 合成、迁移范围
- 常见坑与注意事项.md 二维码 / 账号状态 / 功能票 / 副作用 / 日志 / 网络 /
不入库清单 + .gitignore 行尾注释的坑
- netdelivery说明.md DLI 协议、amdaemon.exe 字符串出处、用法与实测结论
This commit is contained in:
@@ -0,0 +1,103 @@
|
||||
# netdelivery.py 说明(ALL.Net DLI)
|
||||
|
||||
> 本文是 [`README.md`](https://git.fragrance.moe/Txiaochen/wahappy) 里
|
||||
> netdelivery 部分的**详细版**(含运行原理)。
|
||||
|
||||
---
|
||||
|
||||
## 一、DLI 是什么
|
||||
|
||||
**DLI = Download Instruction(配信指示書)。**
|
||||
|
||||
机台做完 ALL.Net 认证后,AMDaemon 会再问一次「我该下什么包」:
|
||||
|
||||
```
|
||||
POST http://at.sys-allnet.cn/net/delivery/instruction
|
||||
body = title_id=SDGB&title_ver=<版本>&client_id=<Keychip 短值>
|
||||
|
||||
→ result=1&uri=<patch 指示書 URL>|<option 指示書 URL>
|
||||
```
|
||||
|
||||
指示書本身是个 INI(日文注释),真正要下的包写在 `INSTALLn=` 里:
|
||||
|
||||
```ini
|
||||
[COMMON] INSTALL1=https://.../SDGB_1.56.00_..._1_1.55.01.app
|
||||
[OPTIONAL] INSTALL1=https://.../SDGB_A031_..._0.opt
|
||||
INSTALL2=https://.../SDGB_A005_..._0.opt
|
||||
```
|
||||
|
||||
> ★ 只有 `INSTALLn=` 才是**要下载的包**;
|
||||
> `EXISTn=` 是「本机应该已经有的文件」,只是文件名,不是下载项。
|
||||
|
||||
---
|
||||
|
||||
## 二、协议出处
|
||||
|
||||
全部来自 `source/amdaemon.exe` 的字符串(数字是文件内偏移):
|
||||
|
||||
| 字符串 | 偏移 |
|
||||
|---|---|
|
||||
| `http://at.sys-all.cn/net/initialize` | `@0x788170` |
|
||||
| `http://at.sys-all.cn/net/delivery/instruction` | `@0x788198` |
|
||||
| `title_id=%s&title_ver=%s&client_id=%s` | `@0x7882b8` |
|
||||
| `ALWE_NETDELIVER_PHASE_GET_DLINST_INFO` | `@0x63bde0` |
|
||||
| `ALWE_NETDELIVER_PHASE_APP_IMAGE_INFO` | `@0x63be08` |
|
||||
| `ALWE_NETDELIVER_PHASE_OPT_IMAGE_INFO` | `@0x63be30` |
|
||||
| `"Net deliver param - dli uri : %s."` | `@0x63c3f8` |
|
||||
| `ALE_ABEX_STAT_DLINSTR_OK` / `_ERR_DLINSTR_NG` | `@0x638600` |
|
||||
| `alAbEx_lite Ver 4.00.01` | `@0x784a31` |
|
||||
|
||||
协议是 ALL.Net **alAbEx v4**:AES-128-CBC 信封,明文是 `key=value&...`。
|
||||
|
||||
```
|
||||
请求 = AES-CBC( 16 字节全 0 前缀 || 明文, IV = 全 0 )
|
||||
响应 = 16 字节 IV || 密文
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 三、用法
|
||||
|
||||
```bash
|
||||
python netdelivery.py # 用 config.py 里的机台查,然后**多选下载**
|
||||
python netdelivery.py A63E01ABCDE # 指定 Keychip
|
||||
python netdelivery.py --list # 只列清单 + 直链,不下载
|
||||
python netdelivery.py --all # 全下(不交互)
|
||||
python netdelivery.py --only 1,3 # 只下第 1、3 项(不交互)
|
||||
python netdelivery.py --ver 1.55 # 指定上报版本(默认 config.MAI_ENCODING)
|
||||
python netdelivery.py --out D:\SDGB2026\update
|
||||
python netdelivery.py --insecure # 关掉 TLS 校验(CDN 证书有问题时用)
|
||||
```
|
||||
|
||||
交互选择支持:逗号/空格分隔、区间(`1-3`)、`a`=全选、`n`=全不选、`q`=退出。
|
||||
|
||||
下载带**断点续传**(`.part` 临时文件 + `Range`,下完改名)与进度/速率显示。
|
||||
|
||||
---
|
||||
|
||||
## 四、实测结论(2026-10-06)
|
||||
|
||||
| 结论 | 证据 |
|
||||
|---|---|
|
||||
| `title_ver` 决定拿哪份指示書 | `1.55` → patch 1.56 + opt A005;`1.56` → 仅 opt A031;`≤1.54` → `uri=null` |
|
||||
| `client_id` **必须**是 11 位短值 | 发 15 位完整 Keychip → `result=-3`;发小写 → `result=-2` |
|
||||
| 包可以断点续传 | 返回 `206` + `Content-Range` |
|
||||
| 已下架的历史包会回 **504** | 这是华立 CDN 的状态,**不是脚本的问题** |
|
||||
|
||||
实测清单(`--ver 1.56`):
|
||||
|
||||
```
|
||||
序号 类型 大小 来源段/键 文件名
|
||||
[ 1] opt 7.25 MB COMMON/INSTALL1 SDGB_A031_20260909101347_0.opt
|
||||
[ 2] opt 3.00 MB OPTIONAL/INSTALL1 SDGB_A005_20260610180958_0.opt
|
||||
```
|
||||
|
||||
下载并校验字节数完全一致:`SDGB_A031...opt` = 7602176、`SDGB_A005...opt` = 3145728。
|
||||
|
||||
---
|
||||
|
||||
## 五、注意
|
||||
|
||||
- 默认下载到 `download/`(已加入 `.gitignore`,`.app` 动辄上 GB)。
|
||||
- 需要同目录下的 `authv1.py` 提供 ALL.Net 协议层。
|
||||
- 这是**只读**操作,不写任何账号数据。
|
||||
Reference in New Issue
Block a user