txtyb's Blog

The quieter you be, the more you can hear.

  1. 1. 教程
  2. 2. 关于额外校验区的结束偏移地址

教程

游戏的存档位置在%AppData%\Roaming\EldenRing\64位steam id\ER0000.sl2,假设你有一个A账号的存档和一个B账号的存档,你想要把A存档迁移到B账号。

游戏的存档内写入了你的steam id,在加载存档时如果检测到账号id不符或者完整性校验出错就会提示存档已损坏。知道了这一点后,我们接下来要做的就是将A存档的A账号steam id替换为B账号的steam id,并且修改校验和使校验保持正确。为了直接编辑存档,我们需要一个hex编辑器,例如我使用的HxD

首先需要一个B账号的存档来获取你的新steam id对应在游戏存档中的密文,只需点击开始新游戏创建号任务等进入游戏就可以存档退出了。使用hex编辑器打开你的B存档,跳转到**19003B4**处,记下从此处开始的16位B账号id密文。image.png

打开A账号的存档文件,进行和上面一样的操作,记下并复制A账号steam id密文,在文件中搜索此16位字符,找到文件中其他的A账号steam id所在处,并一一替换成先前记下的B账号steam id密文。(如果只有一个存档槽位的话,整个文件大概会有两处要修改)观察每处修改的密文所在位置属于的存档槽位,将修改后对应槽位的数据计算MD5校验和,生成的16位校验和填入每个槽位数据区块的前一行(如槽位1,计算从00000310到0028030F数据的MD5校验和,覆盖粘贴到00000300开始的地址处)。注意,extra额外校验区的数据宽度和存档槽位的数据宽度有所不同。

存档的各槽位数据范围和最后的额外校验部分的偏移如下:

1
2
3
4
5
6
7
8
9
10
11
12
slot1  00000310-0028030F md5 00000300
slot2 00280320-0050031F md5 00280310
slot3 00500330
slot4 00780340
slot5 00A00350
slot6 00C80360
slot7 00F00370
slot8 01180380
slot9 01400390
slot10 016803A0

extra 019003B0-019603AF md5 019003A0

修改完成后,另存为同名文件替换B账号下的存档即可。Enjoy!

关于额外校验区的结束偏移地址

发现额外校验区的宽度和其他区不同后,写了个python脚本暴力穷举计算了一下,代码大致如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import hashlib

def md5(bytes):
h=hashlib.new('md5')
h.update(bytes)
return h.hexdigest()

with open('ER0000.sl2', 'rb') as f:
s=f.read()
for i in range(0x19003B1, 0x1BA03CF+1):
perres=md5(s[0x19003B0:i])
if perres==(s[0x19003A0:0x19003AF+1].hex()):
print('Bingo! end is at ' + str(i-1))
break

本文最后更新于 天前,文中所描述的信息可能已发生改变