| Разработка и ромхакинг > Ромхакинг и программирование |
| [NES] Snake's Revenge - генерирование паролей |
| (1/1) |
| Awl:
Дело было вечером, делать было нечего. Недавно я начал проходить 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 210Битва с Metal Gear 211-255Glitch C - контрольная сумма. R1 - random1 (0-15) в двоичной СС. R2 - random2 (0-8) в двоичной СС. Назначение битов * Счётчик ранга сохраняет значение, на основе которого, персонажу присуждается новый ранг. Счётчик изменяется: * каждый спасённый пленник прибавляет 1 (исключение: пленники 16 и 17) * каждый допрошенный враг прибавляет 1 * после прохождения корабля, значение счётчика (какое бы то ни было) приравнивается 9. * Количество боеприпасов и вещей из инвентаря зависит от ранга РангHGMGSGMsGCMMFERtTGAnOT125255552522111025050777575731313757510101071071042424100100151515101210126263512512520202012151515737461501502222221520202093106 Если ранг больше 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+01 или 7+12 или 6+23 или 5+34+4 Кодирование US/EU: 0123456789BDGHJKLMNPQRTVWXYZ!(!!)?. #%―' Удачи, спасибо за прочтение! |
| Yoti:
Отличная работа! |
| Falcon$$$:
Пригодится :) |
| Навигация |
| Главная страница сообщений |