Дело было вечером, делать было нечего. Я играл в Metal storm на сложности Expert и очень сильно злился из-за нехватки жизней. Пройдя один из уровней, я увидел, что игра выдаёт мне пароль. Тут то и родилась мысль взломать систему паролей, и накрутить побольше жизней. Своими наработками в этом нелёгком деле я хотел бы с Вами поделиться.
Теория Пароль состоит из 10 позиций, каждая позиция состоит из 5 битов, итого 10*5= 50 битов. Эти биты сохраняют данные игровые параметры:
- текущий уровень ((1-1)—(7-1))
- сложность (Normal/Expert)
- количество жизней (0-127)
- количество очков (0-1048575)
- улучшения (пушка, щит, броня, огненый шар)
Сырой пароль (L
6,L
5,L
4,L
3,L
2) (H
14,H
13,H
12,H
11,H
10) (H
19,H
18,H
17,H
16,H
15) (S
3,S
2,S
1,S
0,A
0) (C1
4,C1
3,C1
2,C1
1,C1
0) (C2
4,C2
3,C2
2,C2
1,C2
0) (H
9,H
8,H
7,H
6,H
5) (G
0,L
1,L
0,Sh
0,F
0) (H
4,H
3,H
2,H
1,H
0) (R
4,R
3,R
2,R
1,R
0)
Обозначения L — номер жизней (0-127) в двоичной системе счисления.
H — количество очков (0-1048575) в двоичной системе счисления.
S — номер уровня (0-15) в двоичной системе счисления.
Номер | Уровень | Сложность |
0 | 1-1 | Normal |
1 | 2-1 | Normal |
2 | 3-1 | Normal |
3 | 4-1 | Normal |
4 | 5-1 | Normal |
5 | 6-1 | Normal |
6 | 7-1 | Normal |
7 | 1-1 | Expert |
8 | 2-1 | Expert |
9 | 3-1 | Expert |
10 | 4-1 | Expert |
11 | 5-1 | Expert |
12 | 6-1 | Expert |
13 | 7-1 | Expert |
14 | 1-1 | Normal |
15 | Final boss | Normal |
A — броня.
G — номер пушки (0-1) в двоичной системе счисления.
Номер | Пушка |
0 | Начальная |
1 | Волновая |
Sh — щит.
F — огненый шар (работает во время смены гравитации).
R — рандом (0-31) в двоичной системе счисления.
Жизни = (((H
14∗64) + (H
13∗96) + (H
12∗112) + (H
11∗120) + (H
10∗124) + (H
4∗64) + (H
3∗96) + (H
2∗112) + (H
1∗120) + (H
0∗124)) mod128 + номер жизней) mod128
C1 = (3 позиция + 4 позиция +7 позиция + 8 позиция) mod32
C2 = (1 позиция - 2 позиция - 9 позиция) mod32
После вычисления C1 и C2, нужно к начальному паролю прибавить макет, который зависит от рандома.
Рандом mod8 | Макет |
0 | 9,22,30,19,22,22,6,16,5,0 |
1 | 25,1,0,20,6,16,0,4,26,0 |
2 | 28,21,29,18,22,21,4,21,28,0 |
3 | 17,7,13,31,11,20,17,8,10,0 |
4 | 18,1,30,9,22,27,12,12,0,0 |
5 | 0,11,31,6,1,27,21,22,6,0 |
6 | 21,2,16,18,21,15,14,20,19,0 |
7 | 0,10,10,3,22,25,10,30,3,0 |
Потом нужно к 1 и 5 позициям прибавить: (рандом div8)∗8
После этого ко всем позициям применяется операция: mod32
КодированиеUS: TSD8K970B1P!VNXC3M4♥QHZ5F2GRWJL6
JP: TED8K97UB1PYONXC3M4IAHZ5F2GRWJL6
Удачи, спасибо за прочтение, поздравляю всех Вас с наступающим Новым Годом!