Chief-NET

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Chief-NET » Базовый хакинг » Помогите новичку с переводом


Помогите новичку с переводом

Сообщений 141 страница 152 из 152

141

Ыыы) Ладно, сейчас буду их пытать :)

142

Вот обнаружил интересную вещь:
Если посмотреть на выделенную последовательность
http://i23.fastpic.ru/big/2011/0620/37/9e7a5ed2c7a07a73c0cc6ddaecf32137.jpg

И сравнить с последовательностью в роме
F7 AA B1 B1 DC 61 08

F7 - флаговый байт.
DC 61 - байты сжатия.

Да вот только, если посмотреть на картинке как распаковались эти байты (20 20 00 00)... такой последовательности в распакованных данных нет. Поэтому не понятно откуда они взялись. И если поиграть с этими тремя старшими битами второго байта, то в роме появляются откуда-то байты 20...

143

Покопался в ассемблере:

Длина вычисляется правильно - берётся 5 младших бит второго байта и прибавляется 3

Код:
and a,1F
add a, 03

Из трёх старших битов второго байта пары сжатия берётся только первые два

Код:
and a, 03

И они становятся старшими битами адреса.

Но всё равно мало что понятно.. по поводу моего верхнего поста: в самой игре адрес указывает именно на байты 20 20 00 00... но откуда они там взялись мне не понятно :(

В интернете почитал про алгоритм LZSS, там объяснялось, что пара байт сжатия - это <смещение, длина>. Здесь же этот алгоритм извратили :)

Отредактировано Ace Lightning (2011-06-21 22:51:31)

144

в самой игре адрес указывает именно на байты 20 20 00 00... но откуда они там взялись мне не понятно :(

Картинка распаковывается в некий буфер в оперативке и если указатель направлен за пределы картинки, то будут копироваться какие-нибудь левые данные, которые сейчас хранятся по этому адресу. Я пробовал менять указатель на один, два, десять байтов раньше начала картинки и тоже появлялись 20-ки. Может быть они специально туда были заранее загружены, а может просто для всех адресов не попадающих в картинку берутся 20-ки.

Отредактировано TrickZter (2011-06-22 19:43:07)

145

Нет, определённо не для всех берутся биты 20. Т.к. в случае выше распаковалось 20 20 00 00. На сколько я понял, буфер здесь состоит из 255 байт 22 и 2 байт 00. Вобще, там 34 байта 00 (да и байт 22 встречается там 992 раза :))) ), но тогда все нули запаковывались бы из этого буфера, а они берутся из моей распакованной последовательности, поэтому вероятно 32 байта нулей в буфер не входят...

Чтож, тогда придётся ещё и буфер задавать перед распаковкой, посмотрим, что из этого получится..

Отредактировано Ace Lightning (2011-06-23 00:24:21)

146

Я это сделал!!! Наконец-то я написал распаковщик!!  yess1  yess1  yess1

Сегодня, когда сравнил дамп памяти эмулятора и мою распакованную последовательность, увидел заветное сообщение, которое я ждал так давно:
http://i29.fastpic.ru/big/2011/1106/d4/26d38274200d52d223bdd530ccb617d4.jpg

Теперь нужно найти всю графику, перерисовать и начать писать запаковщик. Так что перевод будет!!!!!  yahoo

Отредактировано Ace Lightning (2011-11-06 15:38:19)

147

Молоток!

148

Кувалда!
P.S. На компе учетка понравилась.  :D

149

Киянка!

и начать писать запаковщик.

Запаковщик чуток сложнее писать, чем распаковщик: ведь надо не просто запаковать, а самым оптимальным способом. Хотя, если ресурс не влезет - его всегда можно перекинуть в конец рома.

150

А у меня почти всегда "переведённое" меньше оригинала, так что оптимизировать алгоритм не требуется...

151

А у меня почти всегда "переведённое" меньше оригинала, так что оптимизировать алгоритм не требуется...

Везёт Тебе... :)

152

А у меня почти всегда "переведённое" меньше оригинала, так что оптимизировать алгоритм не требуется...

Краткость - сестра таланта  B)


Вы здесь » Chief-NET » Базовый хакинг » Помогите новичку с переводом