1
Ромхакинг и программирование / [NES/GB] Konami Wai Wai World и все-все-все... - генерирование паролей
« : 18 Июнь 2017, 10:41:14 »
Дело было вечером, делать было нечего.
Здравствуйте, сегодня я хотел бы рассказать про генерацию паролей в играх: Konami Wai Wai World, Wai Wai World 2: SOS!! Paseri Jou, Moai-Kun и Mystical ninja starring Goemon.
Konami Wai Wai World
Теория
Пароль состоит из 14 позиций, каждая позиция состоит из 5 битов, итого 14*5= 70 битов. Эти биты сохраняют большое количество игровой информации, которую я опишу в битовой структуре.
Сырой пароль
1 позиция: C0, Vg0, Vr0, Tg0, Tr0
2 позиция: C1, P0, Ar0, Cl0, H0
3 позиция: C2, Sw0, Gw0, Lw0, Kmw0
4 позиция: C3, S0, G0, L0, Km0
5 позиция: C4, K3, K2, K1, K0
6 позиция: C5, SB0, FB0, GK0, MkK0
7 позиция: C6, A3, A2, A1, A0
8 позиция: C7, R1, R0, C7, C6
9 позиция: C0, U40, U30, U20, U10
10 позиция: C1, KKw0, Mw0, Mkw0, Fw0
11 позиция: C2, KK0, M0, Mk0, F0
12 позиция: C3, A9, A8, ?0, ?0
13 позиция: C4, U50, X0, MB0, KKB0
14 позиция: C5, A7, A6, A5, A4
Обозначения
Vg - № патронов (0-1) в двоичной СС у Vic Viper.
Vr - ракеты у Vic Viper.
Tg - № патронов (0-1) в двоичной СС у Twin Bee.
Tr - кулаки у Twin Bee.
P - увеличение силы всех персонажей (бонус из Gradius).
Ar - увеличение стойкости всех персонажей (броня).
Cl - плащ.
H - дополнительная жизнь (онигири).
Km - Конамимен.
L - Конами леди.
G - Гоемон.
S - Саймон.
F - Фума.
Mk - Майки.
M - Моаи.
KK - Кинг Конг.
w - дополнительное оружие.
K - количество ключей (0-10) в двоичной СС.
A - количество боеприпасов (0-1000) в двоичной СС.
GK - собран ключ на локации Гоемона.
SB - убит босс и собран ключ на локации Саймона.
MkK - собран ключ на локации Майки.
FB - убит босс на локации Фумы.
MB - убит босс и собран ключ на локации Моаи.
KKB - убит босс и собран ключ на локации Кинг Конга.
X - убит финальный босс и на локациях нет: бонусов (сердечки, ракеты, зелье), дополнительного оружия, ключей, двигающихся и проваливающихся платформ.
R - random (0-3) в двоичной СС.
U - неиспользуемые биты (хотя, я точно не уверен).
? = 0.
C - контрольная сумма.
Контрольная сумма
C = (сумма позиций с 1 по 7) + (сумма позиций с 9 по 14)
Условия работоспособности пароля
Шифрование
Шифрование происходит по этой формуле:
x позиция XOR Ch[(x-1) + ((Random XOR 3) *4)], где x = 1-14.
(Ch[(x-1) + ((Random XOR 3) *4)]) - данной операцией мы получаем индекс Ch. На основе индекса, нужно получить значение и подставить его в формулу.
Ch = [0,0,18,17,3,1,0,0,17,0,0,1,1,3,0,17,0,1,3,3,17,0,2,2,1,2]
Потом происходит второй этап шифрования:
Кодирование
アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲン
Wai Wai World 2: SOS!! Paseri Jou
Теория
Пароль представляет собой таблицу, состоящую из 6 столбцов и 4 строк. Столбец условно обозначим как одну позицию, и в итоге, пароль состоит из 6 позиций. Каждая позиция может принимать значения от 0 до 4.
Сырой пароль
1 позиция: 4 - S2 - S0 - 1P1 - 2P1
2 позиция: 1P1, S3
3 позиция: 1P0, S2
4 позиция: 2P1, S1
5 позиция: 2P0, S0
6 позиция: 4 - S3 - S1 - 1P0 - 2P0
Обозначения
S - № уровня (1-14) в двоичной СС.
1P и 2P - № дополнительных персонажей (0-3) в двоичной СС для первого и второго игроков соответственно.
Кодирование
Числовые значения позиций переводятся в соответствующее количество кубов.
Moai-Kun
Теория
Пароль состоит из 6 позиций, каждая позиция состоит из 4 битов, итого 6*4= 24 бита. Пароль сохраняет определённые уровни и random.
Сырой пароль
1 позиция: C5, R11, R10, L3
2 позиция: C4, R21, R20, L2
3 позиция: C3, R31, R30, L1
4 позиция: C2, R41, R40, L0
5 позиция: C1, R51, R50, C6
6 позиция: C0, R61, R60, C7
Обозначения
L - № уровня (0-15) в двоичной СС.
Уровень = № уровня * 4 + 1; № уровня>13 даёт глючные уровни.
R(1-6) - random(1-6) (0-3) в двоичной СС.
C - контрольная сумма.
Контрольная сумма
C = № уровня * 17
Условие работоспособности пароля
Сумма всех шести рандомов mod 4 = 0.
Кодирование
0123456789ABCDEF
Mystical ninja starring Goemon
Теория
Пароль состоит из 14 позиций, каждая позиция состоит из 4 битов, итого 14*4= 56 битов. Эти биты сохраняют большое количество игровой информации, которую я опишу в битовой структуре.
Сырой пароль
1 позиция: S3, S2, S1, S0
2 позиция: L7, L6, L5, L4
3 позиция: U10, Sk0, E0, G0
4 позиция: L3, L2, L1, L0
5 позиция: Cs0, P0, Bm0, B0
6 позиция: Sh23, Sh22, Sh21, Sh20
7 позиция: U20, Skw0, Ew0, Gw0
8 позиция: M23, M22, M21, M20
9 позиция: M13, M12, M11, M10
10 позиция: M43, M42, M41, M40
11 позиция: M33, M32, M31, M30
12 позиция: Sh13, Sh12, Sh11, Sh10
13 позиция: C23, C22, C21, C20
14 позиция: C13, C12, C11, C10
Обозначения
S - № уровня (0-4) в двоичной СС.
L - жизни (1-255) в двоичной СС.
Если жизней>127, то игра приравняет их количество к 0.
U - неиспользуемые биты.
G - Гоемон.
E - Эбисумару.
Sk - Саскэ.
Примечание:
0 - персонаж есть.
1 - персонажа нет.
w - улучшено оружие персонажа.
B - бамбуковая трубка.
Bm - бомба.
P - пропуск на Black Ship Skull.
Cs - ракушка.
Sh1 - количество единиц сюрикенов (0-15) в двоичной СС.
Sh2 - количество десятков сюрикенов (0-15) в двоичной СС.
M1 - количество десятков денег (0-15) в двоичной СС.
M2 - количество сотен денег (0-15) в двоичной СС.
M3 - количество тысяч денег (0-15) в двоичной СС.
M4 - количество десятков тысяч денег (0-15) в двоичной СС.
C(1-2) - контрольная сумма (1-2).
Контрольная сумма
C1 = ((S3 + S2+ S1+ S0 + L7 + L6 + L5 + L4) * 6) mod 16
C2 = ((сумма позиций с 1 по 12) + ((сумма чётных позиций) div 16)) mod 16
Условие работоспособности пароля
C1 OR C2 ≠ 0
Кодирование
Удачи, спасибо за прочтение!
Здравствуйте, сегодня я хотел бы рассказать про генерацию паролей в играх: Konami Wai Wai World, Wai Wai World 2: SOS!! Paseri Jou, Moai-Kun и Mystical ninja starring Goemon.
Konami Wai Wai World
Теория
Пароль состоит из 14 позиций, каждая позиция состоит из 5 битов, итого 14*5= 70 битов. Эти биты сохраняют большое количество игровой информации, которую я опишу в битовой структуре.
Сырой пароль
1 позиция: C0, Vg0, Vr0, Tg0, Tr0
2 позиция: C1, P0, Ar0, Cl0, H0
3 позиция: C2, Sw0, Gw0, Lw0, Kmw0
4 позиция: C3, S0, G0, L0, Km0
5 позиция: C4, K3, K2, K1, K0
6 позиция: C5, SB0, FB0, GK0, MkK0
7 позиция: C6, A3, A2, A1, A0
8 позиция: C7, R1, R0, C7, C6
9 позиция: C0, U40, U30, U20, U10
10 позиция: C1, KKw0, Mw0, Mkw0, Fw0
11 позиция: C2, KK0, M0, Mk0, F0
12 позиция: C3, A9, A8, ?0, ?0
13 позиция: C4, U50, X0, MB0, KKB0
14 позиция: C5, A7, A6, A5, A4
Обозначения
Vg - № патронов (0-1) в двоичной СС у Vic Viper.
№ | Патроны Vic Viper |
0 | Начальные |
1 | Лазер |
Vr - ракеты у Vic Viper.
Tg - № патронов (0-1) в двоичной СС у Twin Bee.
№ | Патроны Twin Bee |
0 | Начальные |
1 | Овальные |
Tr - кулаки у Twin Bee.
P - увеличение силы всех персонажей (бонус из Gradius).
Ar - увеличение стойкости всех персонажей (броня).
Cl - плащ.
H - дополнительная жизнь (онигири).
Km - Конамимен.
L - Конами леди.
G - Гоемон.
S - Саймон.
F - Фума.
Mk - Майки.
M - Моаи.
KK - Кинг Конг.
w - дополнительное оружие.
K - количество ключей (0-10) в двоичной СС.
A - количество боеприпасов (0-1000) в двоичной СС.
GK - собран ключ на локации Гоемона.
SB - убит босс и собран ключ на локации Саймона.
MkK - собран ключ на локации Майки.
FB - убит босс на локации Фумы.
MB - убит босс и собран ключ на локации Моаи.
KKB - убит босс и собран ключ на локации Кинг Конга.
X - убит финальный босс и на локациях нет: бонусов (сердечки, ракеты, зелье), дополнительного оружия, ключей, двигающихся и проваливающихся платформ.
R - random (0-3) в двоичной СС.
U - неиспользуемые биты (хотя, я точно не уверен).
? = 0.
C - контрольная сумма.
Контрольная сумма
C = (сумма позиций с 1 по 7) + (сумма позиций с 9 по 14)
Условия работоспособности пароля
- Дополнительное оружие можно активировать, если есть соответствующий персонаж
- Улучшения для Twin Bee и Vic Viper можно активировать, если есть все персонажи
- Количество ключей = 2 + SB0 + FB0 + GK0 + MkK0 + KKB0 + MB0 + X0 + U50 - Km0 - L0 - F0 - S0 - G0 - Mk0 - M0 - KK0
Шифрование
Шифрование происходит по этой формуле:
x позиция XOR Ch[(x-1) + ((Random XOR 3) *4)], где x = 1-14.
(Ch[(x-1) + ((Random XOR 3) *4)]) - данной операцией мы получаем индекс Ch. На основе индекса, нужно получить значение и подставить его в формулу.
Ch = [0,0,18,17,3,1,0,0,17,0,0,1,1,3,0,17,0,1,3,3,17,0,2,2,1,2]
Потом происходит второй этап шифрования:
Нечётные позиции | Чётные позиции |
+0 | +14 |
Кодирование
アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲン
Wai Wai World 2: SOS!! Paseri Jou
Теория
Пароль представляет собой таблицу, состоящую из 6 столбцов и 4 строк. Столбец условно обозначим как одну позицию, и в итоге, пароль состоит из 6 позиций. Каждая позиция может принимать значения от 0 до 4.
Сырой пароль
1 позиция: 4 - S2 - S0 - 1P1 - 2P1
2 позиция: 1P1, S3
3 позиция: 1P0, S2
4 позиция: 2P1, S1
5 позиция: 2P0, S0
6 позиция: 4 - S3 - S1 - 1P0 - 2P0
Обозначения
S - № уровня (1-14) в двоичной СС.
№ | Уровень |
1 | 1 |
2 | 2 |
3 | 3-1 |
4 | 3-2 |
5 | 4 |
6 | 5 |
7 | 6-1 |
8 | 6-2 |
9 | 7 |
10 | 8-1 |
11 | 8-2 |
12 | 8-3 |
13 | 9-1 |
14 | 9-2 |
1P и 2P - № дополнительных персонажей (0-3) в двоичной СС для первого и второго игроков соответственно.
№ | Дополнительные персонажи |
0 | Гоемон, Упа, Саймон |
1 | Гоемон, Билл, Фума |
2 | Упа, Фума, Саймон |
3 | Упа, Саймон, Билл |
Кодирование
Числовые значения позиций переводятся в соответствующее количество кубов.
Moai-Kun
Теория
Пароль состоит из 6 позиций, каждая позиция состоит из 4 битов, итого 6*4= 24 бита. Пароль сохраняет определённые уровни и random.
Сырой пароль
1 позиция: C5, R11, R10, L3
2 позиция: C4, R21, R20, L2
3 позиция: C3, R31, R30, L1
4 позиция: C2, R41, R40, L0
5 позиция: C1, R51, R50, C6
6 позиция: C0, R61, R60, C7
Обозначения
L - № уровня (0-15) в двоичной СС.
Уровень = № уровня * 4 + 1; № уровня>13 даёт глючные уровни.
R(1-6) - random(1-6) (0-3) в двоичной СС.
C - контрольная сумма.
Контрольная сумма
C = № уровня * 17
Условие работоспособности пароля
Сумма всех шести рандомов mod 4 = 0.
Кодирование
0123456789ABCDEF
Mystical ninja starring Goemon
Теория
Пароль состоит из 14 позиций, каждая позиция состоит из 4 битов, итого 14*4= 56 битов. Эти биты сохраняют большое количество игровой информации, которую я опишу в битовой структуре.
Сырой пароль
1 позиция: S3, S2, S1, S0
2 позиция: L7, L6, L5, L4
3 позиция: U10, Sk0, E0, G0
4 позиция: L3, L2, L1, L0
5 позиция: Cs0, P0, Bm0, B0
6 позиция: Sh23, Sh22, Sh21, Sh20
7 позиция: U20, Skw0, Ew0, Gw0
8 позиция: M23, M22, M21, M20
9 позиция: M13, M12, M11, M10
10 позиция: M43, M42, M41, M40
11 позиция: M33, M32, M31, M30
12 позиция: Sh13, Sh12, Sh11, Sh10
13 позиция: C23, C22, C21, C20
14 позиция: C13, C12, C11, C10
Обозначения
S - № уровня (0-4) в двоичной СС.
№ | Уровень |
0 | Karakuri castle |
1 | The Demon cave |
2 | The Black Ship Skull |
3 | The Skull, once again |
4 | Skeleton island |
L - жизни (1-255) в двоичной СС.
Если жизней>127, то игра приравняет их количество к 0.
U - неиспользуемые биты.
G - Гоемон.
E - Эбисумару.
Sk - Саскэ.
Примечание:
0 - персонаж есть.
1 - персонажа нет.
w - улучшено оружие персонажа.
B - бамбуковая трубка.
Bm - бомба.
P - пропуск на Black Ship Skull.
Cs - ракушка.
Sh1 - количество единиц сюрикенов (0-15) в двоичной СС.
Sh2 - количество десятков сюрикенов (0-15) в двоичной СС.
M1 - количество десятков денег (0-15) в двоичной СС.
M2 - количество сотен денег (0-15) в двоичной СС.
M3 - количество тысяч денег (0-15) в двоичной СС.
M4 - количество десятков тысяч денег (0-15) в двоичной СС.
C(1-2) - контрольная сумма (1-2).
Контрольная сумма
C1 = ((S3 + S2+ S1+ S0 + L7 + L6 + L5 + L4) * 6) mod 16
C2 = ((сумма позиций с 1 по 12) + ((сумма чётных позиций) div 16)) mod 16
Условие работоспособности пароля
C1 OR C2 ≠ 0
Кодирование
Удачи, спасибо за прочтение!