Skip to content

Commit

Permalink
docs: update user docs
Browse files Browse the repository at this point in the history
  • Loading branch information
isHarryh committed Aug 30, 2024
1 parent 8116aad commit 96a8327
Show file tree
Hide file tree
Showing 4 changed files with 97 additions and 38 deletions.
2 changes: 2 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
"arknights",
"arkunpacker",
"audioclips",
"bson",
"chararts",
"charpack",
"curdestdir",
Expand All @@ -32,6 +33,7 @@
"numpy",
"pathid",
"putalpha",
"pycryptodome",
"quickaccess",
"rootdir",
"rtype",
Expand Down
89 changes: 53 additions & 36 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,23 @@

-----

## v3.2
#### 新增
1. ★ 新增了对使用 AES-CBC 加密的文件进行解码的功能,该功能已经与 FlatBuffers 解码功能合并成为“解码文本资源”功能。

#### 修复
1. 修复了对早期版本 AB 文件进行解包时可能出现的某种 `AttributeError` 错误。

#### 优化
1. ☆ 优化了各类代码逻辑,修复了各类代码样式问题。
2. 优化了日志系统的性能表现。

#### 依赖
1. ★ 引入了 PyLint 作为代码检查系统。
2. ☆ 将 ArkFBSPy 库升级到游戏版本 2.3.21。
4. 将 bson 和 pycryptodome 添加到了依赖项中。


## v3.1
#### 新增
1. ★ 新增了可以通过命令行的方式直接启动程序并执行任务的功能。
Expand Down Expand Up @@ -147,19 +164,19 @@

#### 测试数据
该版本在作者的电脑上测试结果如下:
> 电脑配置
> -- Windows 10 (64位)
> -- CPU 2.00GHz, RAM 8.00GB
> 明日方舟版本
> -- Android v1.9.01
> 测试内容
> -- “一键执行”整个Android文件夹
> 电脑配置
> -- Windows 10 (64位)
> -- CPU 2.00GHz, RAM 8.00GB
> 明日方舟版本
> -- Android v1.9.01
> 测试内容
> -- “一键执行”整个Android文件夹
> -- 线程模式:8线程
> -- 源文件夹:5.19GB(6.8K个文件)
> 测试结果
> -- 用时:1.5h
> -- 资源解包文件夹:13.5GB(61K个文件)
> -- 图片合并文件夹:2.04GB(5.8K个文件)
> -- 源文件夹:5.19GB(6.8K个文件)
> 测试结果
> -- 用时:1.5h
> -- 资源解包文件夹:13.5GB(61K个文件)
> -- 图片合并文件夹:2.04GB(5.8K个文件)
-----

Expand All @@ -173,18 +190,18 @@

#### 测试数据
该版本在作者的电脑上测试结果如下:
> 电脑配置
> -- Windows 10 (64位)
> -- CPU 2.00GHz, RAM 8.00GB
> 明日方舟版本
> -- Android v1.8.81
> 测试内容
> -- “一键执行”整个Android文件夹
> -- 源文件夹:5.06GB(6.6K个文件)
> 测试结果
> -- 用时:3.0h
> -- 资源解包文件夹:20.1GB(70K个文件)
> -- 图片合并文件夹:2.03GB(5.2K个文件)
> 电脑配置
> -- Windows 10 (64位)
> -- CPU 2.00GHz, RAM 8.00GB
> 明日方舟版本
> -- Android v1.8.81
> 测试内容
> -- “一键执行”整个Android文件夹
> -- 源文件夹:5.06GB(6.6K个文件)
> 测试结果
> -- 用时:3.0h
> -- 资源解包文件夹:20.1GB(70K个文件)
> -- 图片合并文件夹:2.03GB(5.2K个文件)

## v1.1
Expand All @@ -211,15 +228,15 @@

#### 测试数据
该版本在作者的电脑上测试结果如下:
> 电脑配置
> -- Windows 10 (64位)
> -- CPU 2.00GHz, RAM 8.00GB
> 明日方舟版本
> -- Android v1.8.01
> 测试内容
> -- “一键执行”整个Android文件夹
> -- 源文件夹:4.74GB(5.9K个文件)
> 测试结果
> -- 用时:2.5h
> -- 资源解包文件夹:18.4GB(57K个文件)
> -- 图片合并文件夹:1.90GB(5.4K个文件)
> 电脑配置
> -- Windows 10 (64位)
> -- CPU 2.00GHz, RAM 8.00GB
> 明日方舟版本
> -- Android v1.8.01
> 测试内容
> -- “一键执行”整个Android文件夹
> -- 源文件夹:4.74GB(5.9K个文件)
> 测试结果
> -- 用时:2.5h
> -- 资源解包文件夹:18.4GB(57K个文件)
> -- 图片合并文件夹:1.90GB(5.4K个文件)
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -85,15 +85,15 @@ ArkStudio 是正在开发阶段的,功能更加强大的《明日方舟》游
> 1: 一键执行
> 2: 自定义资源解包
> 3: 自定义图片合并
> 4: FlatBuffers数据解码
> 4: 自定义文本资源解码
> 5: ArkModels提取与分拣工具
> 0: 退出
> 输入序号后按回车即可,如果您不清楚以上功能的含义,强烈建议您先阅读使用手册(README)
各模式的功能概述如下:
- “一键执行” 模式下,解包出的文件默认放置在 `Unpacked_xxxx` 文件夹中,合并完成的图片默认放置在 `Combined_xxxx` 文件夹中。
- 若您选择 “自定义资源解包” 或 “自定义图片合并”,还可以**自定义**需要解包的文件类型和保存位置等内容。
- 关于 “FlatBuffers数据解码”,请参阅[此文档](docs/FlatBuffersDecoding.md)了解详情。
- 关于 “自定义文本资源数据解码”,请参阅[此文档](docs/TextAssetsDecoding.md)了解详情。
- 关于 “ArkModels提取与分拣工具”,请参阅[此文档](docs/ArkModelsRepoKit.md)了解详情。

此外,运行程序后,工作目录会生成配置文件 `ArkUnpackerConfig.json` 与日志文件 `ArkUnpackerLogs.log`。有关配置文件的字段说明,请参阅[此文档](docs/ConfigFile.md)了解详情。
Expand Down
40 changes: 40 additions & 0 deletions docs/TextAssetsDecoding.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
ArkUnpacker附加说明文档
# 文本资源解码

## 概述
解包《明日方舟》AB 文件所导出的 TextAsset 类型的文件,主要有三种格式:
1. 纯文本文件,例如 `gamedata/story` 中的文件;
2. 以 FlatBuffers 格式存储的文件,例如 `gamedata/excel/character_table{xxxxxx}.ab`
3. 用 AES 加密的文件,例如 `gamedata/excel/audio_data.ab`

其中,FlatBuffers 文件和 AES 加密文件都需要经过一定的解码步骤才能查看。
使用 ArkUnpacker 提供的“解码文本资源”功能,即可实现对二者的解码。
若您对解码这些数据的具体步骤感兴趣,并且您了解数据存储和密码学的基本常识,您可以继续阅读下面的介绍。

## FlatBuffers 文件的解码
FlatBuffers 是一种用于高效地存储数据的格式,您可前往 [FlatBuffers 官网](https://flatbuffers.dev)查看介绍。

为了将二进制的 FlatBuffers 文件转化为 JSON 等可读格式,除了需要原始二进制文件外,我们还需要 FlatBuffers Schema (FBS) 这一架构文件。
FBS 相当于一种抽象模板,它定义了哪些数据以怎样的类型被存储。如果没有 FBS,那么我们只能从原始二进制文件中读取到非结构性的孤立的值。
获得 FBS 的有效途径是对游戏内部数据结构进行解析。

ArkUnpacker 所使用的 FBS 根本上来自于 [OpenArknightsFBS](https://github.com/MooncellWiki/OpenArknightsFBS)
为了便于解析,程序中使用的 FBS 并不是原始的 FBS,而是编译到 Python 的 FBS 的类,即 [ArkFBSPy](https://github.com/isHarryh/Ark-FBS-Py)

### 解码步骤
1. 通过原始二进制文件的名称,判断该文件采用的是哪个 FBS;
2. 使用该 FBS 对文件进行解码,得到结构性的数据;
3. 将解码后的数据保存为 JSON 格式。

## AES 加密文件的解码
AES 是一种常见的对称加密算法。

解码前,首先需要获得一个起到密钥作用的 32 字节的 CHAT_MASK。
所有 AES 加密文件使用的 CHAT_MASK 都相同,但《明日方舟》各个大版本所使用的 CHAT_MASK 很可能会发生变更。

### 解码步骤
1. 对于较新版本《明日方舟》的二进制加密文件,其文件头部通常有 128 字节的 RSA 签名,在解密时需要跳过;
2. 通过某种途径取得 CHAT_MASK,CHAT_MASK 的首 16 字节是 AES 密钥;
3. 跳过签名块后,将首 16 字节数据与 CHAT_MASK 的后 16 字节进行异或,可以得到初始向量(IV);
4. 利用上述步骤所得的 AES 密钥和 IV,对后面的数据进行 AES-CBC 解密;
5. 解密后的数据可能是 JSON 文件,也可能是 BSON 文件(需要转换为 JSON 文件)。

0 comments on commit 96a8327

Please sign in to comment.