Без описания |
Поиск в теме | Версия для печати |
alex_231 |
Отправлено: 31 Января, 2016 - 15:29:43
|
Chief-Net
Покинул форум
Сообщений всего: 4687
Дата рег-ции: Окт. 2014
|
alex_231
Вот, скрин того места, где находится запакованный текст Dragon Warrior 2, по крайней мере первый текст, который мы можем увидеть (There one day...).
Немного поэкспериментировав с кодами, смею предположить, что таблица MTE кодируется полуторами байтами, в смысле 12-ю битами, не 8 и не 16, а именно 12, причем код h760 (в выделенном фрагменте) - как-то связан с самим сообщением полностью, а последующие уже кодируют текст:
hEA3 - 'T'
hED7 - 'here'
(эти два я точно определил).
Но за неимением времени я не могу продолжить изучение (может только немного погодя), а пока оставляю данную находку в помощь Archisai, надеюсь ты сможешь во всем разобраться.
Прикреплено изображение
----- Делая выбор, отбрось простое решение и выбери правильное...
|
|
|
alex_231 |
Отправлено: 02 Февраля, 2016 - 10:03:25
|
Chief-Net
Покинул форум
Сообщений всего: 4687
Дата рег-ции: Окт. 2014
|
alex_231
Всё, вчера вечером я разобрался в алгоритме кодировки текста.
В роме используются две таблицы:
первая - 32 элемента, кодируются 5-ю битами,
вторая - 128 элементов, кодируются 10-ю битам.
Причем ширина элементов задается таблицей ширины по адресу &hB44B (4 бита на элемент, максимальная длина - 15 символов), в таблице ширины 80 байт, а сразу за ними идут таблицы элементов (сначала первая, а потом вторая).
Так же есть таблица поинтеров на начала блоков текста, адрес &hB762 (только я не знаю сколько там поинтеров), первый элемент - 0080 -> 8000, указывает на адрес в роме - &h14010 (адрес первого блока текста).
Алгоритм распаковки(запаковки):
Байты переводятся в биты и выстраиваются в двоичную цепочку, затем смотрим на ПЕРВЫЕ ТРИ бита, если они ВСЕ равны 1, то элемент кодируется 10-ю битами, которые ВКЛЮЧАЮТ ТРИ вышеописанных, поэтому следующие СЕМЬ бит переводятся в десятичную систему (получается число от 0 до 127), полученное число есть номер элемента во второй таблице элементов, этот элемент записывается в память и выводится на экран, затем от начала цепочки отбрасывается 10 бит (уже раскодированные) и процесс повторяется сначала. Если же ПЕРВЫЕ ТРИ бита (или хотя бы один из них) не равны 1, то элемент кодируется 5-ю битами, которые также ВКЛЮЧАЮТ ТРИ вышеописанных, эти ПЯТЬ бит переводятся в десятичную систему (число от 0 до 31), полученное число есть номер элемента в первой таблице элементов, этот элемент записывается в память и выводится на экран, затем от начала цепочки отбрасывается 5 бит (уже раскодированные) и процесс повторяется сначала.
Хочу заметить, что коды &b11100 (28), &b11101 (29), &b1110 (30) и &b11111 (31) удовлетворяют условию 10-ти битового кодирования, поэтому в тексте они не используются, а в таблице элементов на их местах стоят непечатаемые символы &hC0, &hC1, &hC2 и &hC3.
Управляющие коды:
&hF8 - имя героя,
&hFC - конец сообщения, остальные я пока еще не опознал.
А также я набросал программу, которая вынимает текст по этому алгоритму (откуда еще я бы узнал об управляющих кодах), так что в ближайшем будущем (как только приведу её в божеский вид) появится возможность перевести эту сложную (по уровню хакинга) игру.
----- Делая выбор, отбрось простое решение и выбери правильное...
|
|
|
|
Поиск в теме | Версия для печати |
Страниц (1): [1] |
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0) |
« Базовый хакинг » |
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
|
|
|