Автор Тема: [NES] Snake's Revenge - генерирование паролей  (Прочитано 3059 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Awl

  • Пользователь
  • Сообщений: 38
  • Пол: Мужской
    • Twitter
    • Youtube
    • Просмотр профиля
Дело было вечером, делать было нечего.

Недавно я начал проходить NES'овских Metal Gear'ов. Про первую часть я был много наслышан: где я только не находил описание взлома системы паролей для этой игры (даже в моей книге кодов было всё расписано). Потом перешёл на вторую часть и ничего про неё не нашёл (кроме парочки полезных паролей на GameFaqs). Когда я разобрался с системой паролей, то я очень сильно удивился, ведь система почти точно такая же, как и в Castlevania II: Simon's Quest. Но Castlevania II кто только не взламывал, а Snake's Revenge - никто. Вот я и решил исправить эту несправедливость, и хочу представить Вам описание системы генерации.

Теория

Пароль состоит из 30 позиций, каждая позиция состоит из 5 битов, итого 30*5= 150 битов. Эти биты сохраняют большое количество игровой информации, которую я опишу в битовой структуре.

Сырой пароль

  1 позиция: OT0, Ms0, M0, G0, F0 
  2 позиция: Rt0, S0, SG0, MG0, HG0   
  3 позиция: An0, U10, U20, U30, U40 
  4 позиция: TG0, U50, U60, CM0, E0 
  5 позиция: A0, C80, C70, C60, C50
  6 позиция: X0, C40, C30, C20, C10
  7 позиция: PA0, BP0, OL0, NS0, AV0
  8 позиция: B0, Bt0, DM0, HM0, SB0
  9 позиция: P130, Rn7, Rn6, Rn5, Rn4
10 позиция: P100, Rn3, Rn2, Rn1, Rn0
11 позиция: P70, CR7, CR6, CR5, CR4
12 позиция: P60, CR3, CR2, CR1, CR0
13 позиция: P50, H7, H6, H5, H4
14 позиция: P40, H3, H2, H1, H0
15 позиция: P30, MC0, BB0, P160, P170
16 позиция: P10, T0, J0, Gr0, RM0
17 позиция: Cm7, U70, P150, P140, P120
18 позиция: Cm6, P110, P90, P80, P20
19 позиция: Cm5, W60, W40, W50, W80
20 позиция: Cm4, W70, W30, W20, W10
21 позиция: Cm3, U80, U90, U100, U110
22 позиция: Cm2, U120, U130, U140, U150
23 позиция: Cm1, L7, L6, L5, L4
24 позиция: Cm0, L3, L2, L1, L0
25 позиция: U160, C7, C6, C5, C4
26 позиция: U170, C3, C2, C1, C0
27 позиция: U180, C15, C14, C13, C12
28 позиция: U190, C11, C10, C9, C8
29 позиция: U200, R23, R22, R21, R20
30 позиция: U210, R13, R12, R11, R10

Обозначения

OT - Oxygen tank.
Ms - Missile.
M - Mine.
G - Grenade.
F - Flare.
Rt - Food.
S - Silencer.
SG - ShotGun.
MG - MachineGun.
HG - HandGun.
An - Antidote.
U(1-21) - неиспользуемые биты (хотя, я точно не уверен).
TG - Truth gas.
CM - Claymor mine.
E - Explosive.
A - Antenna.
C(1-8) - Card(1-8).
X - X-Ray lens.
PA -Power armor.
BP - Back pack.
OL - Optic lens.
NS - Night site.
AV - Armor vest.
B - Battery.
Bt - Boots.
DM - Detecter mine.
HM - Hidden mike.
SB - Smoke bomb.
P(1-17) - спасены пленники (1-17).
Rn - Rank((1-256)-1) в двоичной СС.
CR - счётчик ранга (0-255) в двоичной СС.
Н -  № кат-сцены (0-255) в двоичной СС.
MC - играет музыка с базы Metal Gear 2.
BB - Big Boss убит.
T - танк уничтожен.
J - John Turner spy убит.
Gr - 3 гренадера убиты.
RM - 5 робонаёмников уничтожены.
Cm - № лагеря (0-255) в двоичной СС.
W - допрошен враг (1-8).
L - № уровня (0-255) в двоичной СС.

Локация
0Джунгли
11 здание
2Корабль
31/2 лагерь
4Перед поездом
5Перед кораблём
62 лагерь (битва с танком)
72 здание
85 здание
9База Metal Gear 2
10Битва с Metal Gear 2
11-255Glitch

C - контрольная сумма.
R1 - random1 (0-15) в двоичной СС.
R2 - random2 (0-8) в двоичной СС.


Назначение битов

  • Счётчик ранга сохраняет значение, на основе которого, персонажу присуждается новый ранг.
    Счётчик изменяется:
    • каждый спасённый пленник прибавляет 1 (исключение: пленники 16 и 17)
    • каждый допрошенный враг прибавляет 1
    • после прохождения корабля, значение счётчика (какое бы то ни было) приравнивается 9.
  • Количество боеприпасов и вещей из инвентаря зависит от ранга

    РангHGMGSGMsGCMMFERtTGAnOT
    1252555525221110
    2505077757573131
    375751010107107104242
    4100100151515101210126263
    5125125202020121515157374
    61501502222221520202093106

    Если ранг больше 6, то игра начнёт выдавать глюки (не всегда).
  • Кат-сцена
    0Вертолёт (нормально работает только в джунглях)
    1-255Нет

    А если....

  • Бит, который отвечает за смерть John Turner, будет работать, если L≠4,
  • Cm отвечает за лагерь.
    L=3 и Cm = 0-7, то 1 лагерь.
    L=3 и Cm =8-255, то 2 лагерь.
    На другие локации эти биты не влияют.

Расположение пленников:

1 - Джунгли; 2 раза наверх от первой развилки.
2 - Джунгли; наверх - влево - наверх от места, где спрятан глушитель.
3 - 1 здание; 1 этаж; влево - вниз - влево от лифта.
4 - 1 здание; 1 этаж; вправо - вниз - вправо от лифта.
5 - Корабль; рубка; наверх от входа в рубку.
6 - 1 лагерь; справа от помещения, в котором лежат ракеты с консервами.
7 - Поезд; 4 вагон; первая дверь, считая от входа.
8 - 2 лагерь; помещение, которое расположено рядом с первой стеной, которую надо уничтожить взрывчаткой.
9 - 2 лагерь; вправо - вниз от развилки на которой расположены камни.
10 - 3 здание; подвал (-1 этаж); вниз - влево - вниз от комнаты, в которой лежит 6 карта и антидот.
11 - 4 здание; подвал (-1 этаж); влево - вниз - влево (по зигзагообразной дороге) от лифта.
12 - 5 здание; подвал (-1 этаж); вправо (до стены) - вниз - влево от лифта.
13 - 5 здание; подвал (-1 этаж)/после туннеля с баррикадами; влево - вниз - влево от комнаты, в которой лежат гранаты.
14 - 5 здание; 1 этаж/после туннеля с баррикадами; вниз - влево от комнаты, в которой лежит взрывчатка.
15 - 5 здание; 1 этаж/после туннеля с баррикадами; после комнаты с консервами.
16 (Nick Myer) - 5 здание; 2 этаж; влево - вниз - вправо - вниз от лифта.
17 (Jennifer) - 5 здание; 3 этаж; после комнаты с Big Boss'ом.


Расположение врагов, которых надо допросить:

1 - 1 здание; 1 этаж; 2 раза наверх от комнаты, в которой лежит 2 карта.
2 - 1 здание; подвал (-1 этаж); 2 раза вниз (по правой дороге) - влево от лифта.
3 - Корабль; рубка; наверх - вправо от комнаты, в которой лежат гранаты.
4 - Поезд; 4 вагон; третья дверь, считая от входа.
5 - 3 здание; подвал (-1 этаж); вниз - 2 раза влево от комнаты, в которой лежит 6 карта и антидот.
6 - 5 здание; 1 этаж; справа от колонны.
7 - 5 здание; подвал (-1 этаж)/после туннеля с баррикадами; вниз от лифта.
8 - 5 здание; 1 этаж/после туннеля с баррикадами; вниз - 2 раза вправо от комнаты, в которой лежит взрывчатка.


Контрольная сумма

C = Ms0, M0, G0, F0, S0, SG0, MG0, HG0
    + U10, U20, U30, U40, U50, U60, CM0, E0 
    + C80, C70, C60, C50, C40, C30, C20, C10 
    + BP0, OL0, NS0, AV0, Bt0, DM0, HM0, SB0 
    + Rn7, Rn6, Rn5, Rn4, Rn3, Rn2, Rn1, Rn0 
    + CR7, CR6, CR5, CR4, CR3, CR2, CR1, CR0 
    + H7, H6, H5, H4, H3, H2, H1, H0 
    + MC0, BB0, P160, P170, T0, J0, Gr0, RM0 
    + U70, P150, P140, P120, P110, P90, P80, P20 
    + W60, W40, W50, W80, W70, W30, W20, W10 
    + U80, U90, U100, U110, U120, U130, U140, U150 
    + L7, L6, L5, L4, L3, L2, L1, L0
    + OT0, Rt0, An0, TG0, A0, X0, PA0, B0
    + P130, P100, P70, P60, P50, P40, P30, P10
    + Cm7, Cm6, Cm5, Cm4, Cm3, Cm2, Cm1, Cm0


Шифрование

Шифрование происходит по этой формуле:

x позиция XOR Ch[Random1 + (x-1)], где x = 1-28.
(Ch[Random1 + (x-1)]) - данной операцией мы получаем индекс Ch. На основе индекса, нужно получить значение и подставить его в формулу.

Ch = [30,12,7,17,5,21,28,9,0,18,25,1,16,10,3,26,31,17,24,0,3,5,28,21,0,24,16,4,21,1,4,19,25,0,28,14,9,18,24,15,21,16,31]

Потом происходит второй этап шифрования:

Random21-28 позиции
0 или 8+0
1 или 7+1
2 или 6+2
3 или 5+3
4+4


Кодирование

US/EU: 0123456789BDGHJKLMNPQRTVWXYZ!(!!)?. #%―'

Удачи, спасибо за прочтение!
« Последнее редактирование: 17 Апрель 2017, 20:23:02 от Awl »

Оффлайн Yoti

  • Пользователь
  • Сообщений: 4473
  • Пол: Мужской
  • Не тро-гай ме-ня
    • Steam
    • Просмотр профиля
[NES] Snake's Revenge - генерирование паролей
« Ответ #1 : 12 Апрель 2017, 14:00:01 »
Отличная работа!

Оффлайн Falcon$$$

  • Пользователь
  • Сообщений: 1
    • Просмотр профиля
[NES] Snake's Revenge - генерирование паролей
« Ответ #2 : 12 Апрель 2017, 15:59:17 »
Пригодится :)
« Последнее редактирование: 12 Апрель 2017, 17:53:42 от Falcon$$$ »