Skip to content

Lavaver/Crypt-Dew-World

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🌍 Crypt Dew World

Tip

XOR-MC-Archive-Decrypt-Rs 是该项目的曾用名。

 一个针对我的世界网易版地图加密机制开发、基于 Rust 的 MC 存档加密解密工具.

特性

  • 可全平台: 无需运行时环境,即使是安卓手机也能完全支持
  • 易于使用: 可实现一键地图加解密操作
  • 可塑性强: 支持使用自定义密钥进行加解密
  • 可靠性高: 地图完整性检测、解密尝试后合理性检测,发现问题立即提示
  • 批量处理: 可一次性解密/加密整个文件夹内的所有存档
  • 基于 Tokio 的异步处理: 充分利用多核 CPU 提升处理效率
  • 更多高级功能

功能列表

  • 被动解密: 使用网易自身的密钥进行解密操作
  • 被动加密: 使用网易自身的密钥进行加密操作
  • 主动解密: 自定义密钥进行解密,抑或是自适应密钥
  • 主动加密: 自定义密钥进行加密,见下文

使用方法

被动系列

  1. 克隆仓库到本地或者下载打包好的exe文件
  2. 切换至程序根目录,使用 cargo 运行 cargo run 或直接执行 /target 下的 exe 文件.
$ cargo run
  1. 输入要解密的存档的 level.dat 所在的文件夹路径,如 level.dat 位于 /sdcard/aaa/level.dat,那么输入
/sdcard/aaa
  1. 等待完整性检测通过后,指定操作类型
    最后等待解密完成,程序会输出解密存档存放目录

主动系列

 资源中心地图请使用此选项.

 初始操作同上,指定操作类型后输入密钥,密钥限制为 64bit;若留空则程序会根据 LevelDB 数据库文件结构自行尝试推导密钥.

 若解密存档文件夹内有 netease_config 文件夹的存档 (多半见于资源中心存档),也无需太过于担心。此版本的行为与本家不同。你不需要刻意删除它,它会自动 ignore 以防止解密失败

CLI 指令参数

crypt-dew-world.exe [OPTIONS] [PATH]

Arguments 形参

  • [PATH] - 包含多个存档文件的文件夹或目录的路径,亦可特别指定单个存档目录的路径

Options 选项

  • -s, --single - 强制进入单一保存模式
  • -b, --batch - 强制使用批处理模式(扫描子目录)
  • -S, --sync - 启动软件更新
  • -C, --chunks - 扫描区块并显示概览
  • -m, --mode <模式> - 操作:解密(0) 或 加密(1) 或 特定操作(2,3)
  • -k, --key <密钥> - 自定义十六进制密钥(64 位)
  • -o, --output <目录> - 输出目录
  • -P, --pack-mode <打包模式> - 打包模式:仅复制、tar、mcworld(或 0、1、2)
  • --web <地址> - 启动 Web 模式。目前版本地址必须填写,如果不清楚这代表什么的话填 localhost:9000127.0.0.1:9000 就 OK
  • --details - 显示详细进度信息(已加入队列的文件、已处理的文件、磁盘速度)

可能的报错情况

  • 出现错误:<message>

 为程序 Result<()> 捕获的非常规报错,需根据具体情况查看 message. 一般情况是程序运行时 bug 导致,可在 issues 中反馈

  • 找到已加密文件

 程序在目录中找到了已加密文件,并认定该文件夹为已加密,不再次进行加密

  • 需要 XXX,但未得到文件(夹)

 待操作文件夹缺失了 MCBE 存档的关键文件(level.dat, db/MANIFEST-*, db/CURRENT, 甚至是缺失整个 db 文件夹), 一般为输入了错误的目录导致

  • 魔数不对应

 大部分情况为密钥不正确导致的,若使用被动解密可切换为主动后再试. 若主动解密后报此错误则一般为存档损坏. 需要注意的是,该报错不能涵盖所有存档损坏的情况,可能存在 .ldbDataBlock 损坏而未对 Footer 造成影响的情况,具体情况需使用国际版游戏查看能否进入解密后存档与进入后是否出现数据丢失判断.

  • 获取密钥失败  可能为资源中心二次加密,使用与模组相同的加密算法(特点为 80 字节大小的 CURRENT 文件)。在此情况下程序会自动使用 EaseTrojan 方法尝试解密,利用 CURRENT 文件固有的明文格式(版本号 + MANIFEST 文件名)建立方程,直接求解出加密密钥,无需大量候选密钥。由于该算法仍处于实验性阶段,不保证 100% 覆盖所有存档,若文件结构与预期不符,解密将中止。

  • 候选密钥组合过多 (%{count}),解密被终止以防止长时间运行  此问题仅存在于早期版本的 EaseTrojan 算法(采用批量模式匹配时可能触发)。现行版本已彻底重构:针对 80 字节 CURRENT 文件的第二层加密,改为利用已知明文结构直接推导密钥,完全消除了候选密钥爆炸的风险,因此正常情况下不再出现本错误。若您仍然遇到,请反馈存档样本以便进一步优化。

  • 更新失败

 这种情况一般为 GitHub 在国内的蜜汁情况导致的。你仍可继续使用该版本,但可能不能正常解密新版存档。如果你有需要解密新版存档的需求的话,转到此处以手动下载并替换一份最新版本的本体。

  • 存档格式不兼容

 这种情况一般而言大多数情况下只会发生在过时的解密器版本。因为无论是这里的 Rust 实现还是本家的 Node.js 实现,都一定程度上保留了与旧版加密存档的向下兼容性。如果你遇到了,要么是你的解密器版本太旧,要么是目前存档加密方法是新的,我们还没来得及进行兼容。

其他相关项目