Реверс-инжиниринг ресурсов игры LHX. Часть 1

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.
Скриншот собственно той самой игры LHX
Скриншот собственно той самой игры LHX

Интро

Про что здесь

В этом цикле статей я расскажу о том, как занимался реверсом данных из DOS-игры LHX Attack Chopper - симулятора боевых вертолетов от EA и одной из самых любимых игр моего детства (как оказалось, не я один такой - вот современный оммаж играм такого жанра той эпохи).

Это повествование не претендует ни на художественную, ни на, скорее всего, техническую ценность. Единственная изюминка описываемого мероприятия - это то, что я так до сих пор толком и не знаю ни ассемблера (гуглеж не в счет), ни архитектуры самого DOS (таблицы векторов прерываний, модели памяти - вот это вот все). То есть, это как нормальный реверс, только без реверса. 

Как вы понимаете - это было долгое путешествие, которое я проделал из чистого любопытства и прямо-таки импринтинга к этой игре. Не будь у меня такой мотивации - я бы бросил это все на полдороге. 

Мотивация

Компьютер, который у меня был в детстве (девяностые), отнюдь не блистал техническими характеристиками - процессор NEC V20 (слегка улучшенный клон 8088), 640 кБ памяти, 20 МБ диска, дисковод 5.25 на 360 кБ, CGA-адаптер. Всё. Не Байт и не Спектрум, но и дум на ней не запустишь. Да и много чего не запустишь. И LHX была одной из немногих игр, которые можно запустить, и которые при этом выглядели на этом компе впечатляюще, на мой взгляд. И после, когда я сменил железо (неоднократно), LHX все равно осталась в моем сердечке. И много лет я хотел покопаться в ее внутренностях, как бы двусмысленно это ни звучало.

Бэкграунд

Знания, которыми я пользовался в процессе описываемого - практически все они из тех DOS-времен. Ограниченность того компьютера и отсутствие интернетов не дали (увы) мне утонуть в играх (по вышеозначенным причинам). Потому мне пришлось со скуки погрузиться в азы программирования в частности и айти в целом - но это были именно азы и именно программирования, а не реверса. Я знал Турбо Паскаль и писал на нем игры (2 штуки, обе затерялись в годах), я слышал краем уха про ассемблер (но это казалось мне чем-то запредельным), я даже знал о том, что DOS - это нереентерабельная ОС (и это меня не очень сильно волновало). Я отличал байт от бита, знал об упаковке экзешников как явлении и бесился от 4-цветности CGA. Но это все было довольно стандартным набором знаний для подростка, который более-менее интересовался компьютерами в то время.

По наклонной

Единственная вещь, которую вряд ли можно считать прям стандартной - это то, что я успешно расковырял (ну частично) данные в одной игре уже тогда, в девяностые. Это была игра Goody (с совершенно дурацким управлением - q, a, o, p, space, enter). И сделал я это от скуки и любопытства (то еще сочетание), еще не имея ни малейшего представления о программировании вообще.

Goody. Главный герой - вор, алкоголик, махинатор, лестниценосец (об этом узнаешь совершенно случайно) - сидит на табуретке возле табуретки и скучает.
Goody. Главный герой - вор, алкоголик, махинатор, лестниценосец (об этом узнаешь совершенно случайно) - сидит на табуретке возле табуретки и скучает.

Как я уже написал, игр у меня на том компе было немного, интернетов тогда не было, а развлекаться с компьютером хотелось. Одним из развлечений были встроенные функции просмотра и редактирования файлов в Volkov Commander (клавиши F3 и F4). Причем любых файлов - и текстовых, и бинарных. И вот в попытке понять, как же устроены игры, я просматривал содержимое их экзешников - и ничего не понимал. Потому что не там смотрел.

Я пытался понять, глядя на такую картинку (ASCII-view)
Я пытался понять, глядя на такую картинку (ASCII-view)
А надо было пытаться понять, глядя на такую (Hex-view). Но про оба способа просмотра (и редактирования) я знал.
А надо было пытаться понять, глядя на такую (Hex-view).
Но про оба способа просмотра (и редактирования) я знал.

А потом как поня однажды просто по наитию в режиме просмотра байтов взял да и вбил в совершенно рандомное место несколько повторяющихся значений (типа 999999999999999), сохранил и запустил. И где-то в игре вместо нормального спрайта появилось что типа такого:

Типа такого.
Типа такого.

Не видно? Это потому что тогда экраны были с разрешением в 6-10 раз меньше, а диагональ - меньше только в 2, а то порой и почти такая же

Источник: https://habr.com/ru/articles/841614/


Интересные статьи

Интересные статьи

Привет, Хабр! Хочу сегодня поговорить о нетривиальных способах применения игр и продолжить тему необычных средств ввода. Игровая индустрия воспринимается, как развлекательная, но границы применения го...
На сегодняшний день существуют большое количество JS-фреймворков, библиотек и тому прочее. Казалось бы, выбираешь крупный и надёжный фреймворк, и пишешь свой интерфейс. Но, во-первых, у разных фреймво...
Если посмотреть, на какой базе сегодня обучают школьников в кружках робототехники, то окажется, что в большинстве своем это Лего-подобные наборы с контроллером Arduino. Однако в этой статье мы рассмот...
Привет, Хабр! Пару лет назад я начала публиковать обзорные статьи игровых облачных сервисов — как российских, так и зарубежных. Облачный гейминг набирает обороты, так что названия гла...
С чего начать? Кто такой вовлеченный сотрудник? Это человек, который максимально лоялен к Компании, в которой он работает. Он категорически не хочет уволится, а, наоборот, помогает с ...