Пользователи продолжают жаловаться на то, что они приобрели копию последней лицензионной версии Genesis в Steam и не могут запустить ее в своем любимом эмуляторе или с помощью картриджей EverDrive, MegaSD или Open-ED.
Причина этого проста: game.bin - это 7 различных версий игры, зашифрованных с использованием относительно простого шифра, сжатых с использованием алгоритма LZMA и объединенных в один файл.
7 версий - это локализованные версии на английском, японском и португальском языках, а также четыре прототипа.
Приложение-эмулятор, поставляемое в комплекте с релизом Steam, извлекает и расшифровывает РОМ-образ для каждой версии игры, когда вы выбираете её в меню настроек.
Вы можете использовать этот анонимно опубликованный скрипт на Python для извлечения дисков из game.bin:
Python:
# Earthion game.bin file unpacker
# v2.0.1
# Please support Ancient and buy the official release:
# https://store.steampowered.com/app/3597580/Earthion/
import lzma
import sys
with open('game.bin', 'rb') as f:
b = bytearray(f.read())
print('Decrypting game.bin')
fnv_seed = 0xdeafcafe
fnv_prime = 0x1000193
fnv_hash = fnv_seed
for i in range(len(b)):
b[i] ^= (fnv_hash >> 9) & 0xff
fnv_hash = ((fnv_hash ^ b[i]) * fnv_prime) & 0xffffffff
if fnv_hash == 0x2bbe2a9f: # 2025-07-31
roms = [
('Earthion English.md', 0x43, 0x4bbeb8, 0x780000),
('Earthion Japanese.md', 0x4bbefb, 0x4b8836, 0x780000),
('Earthion Portuguese.md', 0x974731, 0x4bc5a8, 0x780000),
('Earthion Summer 2024 Demo.md', 0xe30cd9, 0x259279, 0x6a0000),
('Earthion Fall 2024 Demo.md', 0x1089f52, 0x35e3f6, 0x6a0000),
('Earthion Winter 2024 Demo.md', 0x13e8348, 0x40e7e8, 0x740000),
('Earthion Early Prototype.md', 0x17f6b30, 0x1894a, 0xa0000),
]
confusion = bytes.fromhex('bff058108a26d4775754e507f3e8c999312536c914bb23ca72aef391d93580eda4a3c33babee30b317d6d11ee2478ac9d1b0a623c361aa45424901da8dd439bb939c89bf087976de88669e0fcc7d8995b267fd9ddc2da7c2a959e84f7007cf4680eb4d0a558b4616277c8104494e48e09ecfd00c854a9da4ff7a698f9081b524bb41a32606a6542c878b9968b4969296e0ec78defb5e1881564bf5bc71df72330612b9da175f1ad7a63e1030b30ff8b0198f409ae0a584694b7458d02cdd54a56d41d8c98cb3052a5548e0bd1fb753098767cfc2eebc68f15ef41810423ca0808a1ae108009a14f851add52a0ce04b24243de53325f015f0ac352dd2e77ded3a')
elif fnv_hash == 0x4a3d1a69: # 2025-08-04
roms = [
('Earthion English.md', 0x43, 0x4c5f44, 0x780000),
('Earthion Japanese.md', 0x4c5f87, 0x4c15ae, 0x780000),
('Earthion Portuguese.md', 0x987535, 0x4c639d, 0x780000),
('Earthion Summer 2024 Demo.md', 0xe4d8d2, 0x2591ca, 0x6a0000),
('Earthion Fall 2024 Demo.md', 0x10a6a9c, 0x35e304, 0x6a0000),
('Earthion Winter 2024 Demo.md', 0x1404da0, 0x40dc1d, 0x740000),
('Earthion Early Prototype.md', 0x18129bd, 0x188d3, 0xa0000),
]
confusion = bytes.fromhex('311664841554eb1a575459352174843ceb0ed90f71bb0cb35a96397a4dd897eda4a3c33babee30b317d6d11ee2478ac9d1b0a623c361aa45424901da8dd439bb939c89bf087976de88669e0fcc7d8995b267fd9ddc2da7c2a959e84f7007cf4680eb4d0a558b4616277c8104494e48e09ecfd00c854a9da4ff7a698f9081b524bb41a32606a6542c878b9968b4969296e0ec78defb5e1881564bf5bc71df72330612b9da175f1ad7a63e1030b30ff8b0198f409ae0a584694b7458d02cdd54a56d41d8c98cb3052a5548e0bd1fb753098767cfc2eebc68f15ef41810423ca0808a1ae108009a14f851add52a0ce04b24243de53325f015f0ac352dd2e77ded3a')
else:
print('Unsupported version')
sys.exit(1)
for filename, offset, size, usize in roms:
print(f'Uncompressing {filename}')
packed = b[offset:offset + size]
# Workaround for https://github.com/python/cpython/issues/92018
packed[5:13] = b'\xff' * 8
unpacked = lzma.decompress(packed, format=lzma.FORMAT_ALONE)
assert len(unpacked) == usize
print(f'Decrypting {filename}')
decrypted = bytearray(usize)
for i in range(usize):
#x = (active_banks[(i >> 19) & 7] << 19) | (i & 0x7ffff)
x = i
y = x ^ ((i >> 6) & 0xf80) ^ ((x >> 16) & 0xfffffffe) ^ 0xa56
z = (((x >> 14) ^ (i >> 7)) & 0xfe) ^ (i & 0xff)
decrypted[x] = unpacked[y] ^ confusion[z]
print(f'Writing {filename}')
with open(filename, 'wb') as f:
f.write(decrypted)
Чтобы использовать его в Windows, убедитесь, что Python установлен и доступен в вашем PATH.
Затем загрузите любую версию LZMA SDK отсюда, извлеките файлы в любом удобном для вас месте и скопируйте lzma.exe из папки bin в то же место, где находится ваш earthion-unpack.py скрипт (или как бы вы его ни назвали).
Наконец, поместите файл game.bin в этот каталог рядом с earthion-unpack.py и lzma.exe.
Чтобы запустить его, откройте окно PowerShell или командную строку, перейдите в папку, где находится ваш скрипт, и введите следующее:
Код:
python earthion-unpack.py
Ссылка на unpack:
Просто подождите, пока программа завершит распаковку и расшифровку игр, и сохраните желаемую версию образа ROM на свой любимый эмулятор или флэш-картридж, где вы сможете использовать его в обычном режиме.
Поскольку у меня нет флэш-картриджа, я не могу протестировать его на оригинальном оборудовании, но в Genesis Plus GX, Ares, PicoDrive и BlastEm выходные данные работают должным образом.
Для удобства я приложил скрипт рядом с текстом. lzma.exe начиная с версии 2501 SDK и заканчивая этим сообщением.
Обязательно установите Python, если у вас его еще нет.
Python 3.13.6 - это последняя стабильная версия, доступная на момент написания статьи:
https://www.python.org/downloads/release/python-3136/
Данный скрип актуален на момент версии v.2.01, для новых версий нужен новый скрипт
Наслаждайтесь своей игрой!
Перевод на русский язык статьи "cloudsets" осуществлён сообществом "Hackedromscommunity"