
Интро
Про что здесь
В этом цикле статей я расскажу о том, как занимался реверсом данных из 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). И сделал я это от скуки и любопытства (то еще сочетание), еще не имея ни малейшего представления о программировании вообще.

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


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

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