Разработка и ромхакинг > Ромхакинг и программирование
[NES] Metal storm - генерирование паролей
(1/1)
Awl:
Дело было вечером, делать было нечего. Я играл в Metal storm на сложности Expert и очень сильно злился из-за нехватки жизней. Пройдя один из уровней, я увидел, что игра выдаёт мне пароль. Тут то и родилась мысль взломать систему паролей, и накрутить побольше жизней. Своими наработками в этом нелёгком деле я хотел бы с Вами поделиться.

Теория

Пароль состоит из 10 позиций, каждая позиция состоит из 5 битов, итого 10*5= 50 битов. Эти биты сохраняют данные игровые параметры:

* текущий уровень ((1-1)—(7-1))
* сложность (Normal/Expert)
* количество жизней (0-127)
* количество очков (0-1048575)
* улучшения (пушка, щит, броня, огненый шар)
Сырой пароль

(L6,L5,L4,L3,L2) (H14,H13,H12,H11,H10) (H19,H18,H17,H16,H15) (S3,S2,S1,S0,A0) (C14,C13,C12,C11,C10) (C24,C23,C22,C21,C20) (H9,H8,H7,H6,H5) (G0,L1,L0,Sh0,F0) (H4,H3,H2,H1,H0) (R4,R3,R2,R1,R0)

Обозначения

L — номер жизней (0-127) в двоичной системе счисления.
H — количество очков (0-1048575) в двоичной системе счисления.
S — номер уровня (0-15) в двоичной системе счисления.

НомерУровеньСложность01-1Normal12-1Normal23-1Normal34-1Normal45-1Normal56-1Normal67-1Normal71-1Expert82-1Expert93-1Expert104-1Expert115-1Expert126-1Expert137-1Expert141-1Normal15Final bossNormal
A — броня.
G — номер пушки (0-1) в двоичной системе счисления.

НомерПушка0Начальная1Волновая
Sh — щит.
F — огненый шар (работает во время смены гравитации).
R — рандом (0-31) в двоичной системе счисления.

Жизни = (((H14∗64) + (H13∗96) + (H12∗112) + (H11∗120) + (H10∗124) + (H4∗64) + (H3∗96) + (H2∗112) + (H1∗120) + (H0∗124)) mod128 + номер жизней) mod128

C1 = (3 позиция + 4 позиция +7 позиция + 8 позиция) mod32
C2 = (1 позиция - 2 позиция - 9 позиция) mod32

После вычисления C1 и C2, нужно к начальному паролю прибавить макет, который зависит от рандома.

Рандом mod8Макет09,22,30,19,22,22,6,16,5,0125,1,0,20,6,16,0,4,26,0228,21,29,18,22,21,4,21,28,0317,7,13,31,11,20,17,8,10,0418,1,30,9,22,27,12,12,0,050,11,31,6,1,27,21,22,6,0621,2,16,18,21,15,14,20,19,070,10,10,3,22,25,10,30,3,0
Потом нужно к 1 и 5 позициям прибавить: (рандом div8)∗8
После этого ко всем позициям применяется операция: mod32

Кодирование

US: TSD8K970B1P!VNXC3M4♥QHZ5F2GRWJL6
JP: TED8K97UB1PYONXC3M4IAHZ5F2GRWJL6

Удачи, спасибо за прочтение, поздравляю всех Вас с наступающим Новым Годом!
neoborg:
Awl, взаимно)
Хм, взлом паролей, хорошая тема, об этом мне тоже стоит написать...
Навигация
Главная страница сообщений

Перейти к полной версии