Как мы научились писать резидентный модуль

dos_netwars_1375
История про то, что такое двигатель прогресса.
Однажды, когда я был немного помоложе, мы всячески изучали программирование. Причем такое — на уровне ассемблер и паскаль. Си еще был где-то очень далеко, но уже маячил на горизонте.

В те времена наша ИТ-инфраструктура представляла из себя локальную сеть через коаксиальный кабель. Топология типа «шина». Куча 286-х — 386-х IBM PC без жесткого диска, которые загружались с дискеты и рядом с ними стоял сервер. Сервер был вроде бы 486-м (или даже Пентиум-I), но самое главное, что у сервера был свой жесткий диск. Свой жесткий диск — это очень ценно и важно.
Все рабочие станции грузились по сети и без жесткого диска ты мог только программировать с дискетки или играть в простенькие игры типа NetWars. А с жестким диском можно было уже запускать серьезные игры по сети.
Но чтобы получить доступ к жесткому диску, нужно получить было доступ к серверу. А доступ к серверу охранял «админский пароль», который знал только преподаватель информатики.

Чтобы добыть этот «священный пароль-грааль» был разработан план: мы сами изучили теорию и на ассемблере написали резидентный клавиатурный перехватчик, который с дискетки загружался в память. К машине без жесткого диска призывался преподаватель под каким-то невинным предлогом, чтобы он залогинился на сервер. Перехватчик записывал данные пароля в память, откуда позже данные изымались и примерно неделю в кабинете информатики царила анархия и полная гармония.
Дальше преподаватель находил какие-то «левые» игры на сервере (место на жестком диске было очень ценным ресурсом), строил нас в классе, ругал, менял пароль и все история начиналась сначала.
Спустя несколько месяцев кто-то прокололся и рассказал — как мы добываем пароль. А может быть умный преподаватель догадался сам. И если его звали к машине «под невинным предлогом», он ее просто перезагружал, убивая резидентный модуль в памяти (модуль загружался с дискеты руками).

Грусть-тоска воцарилась в рядах юных программистов. Но ненадолго. Очень хотелось играть и прогресс было не остановить. Был разработан план Б.

Мы обратили внимание, что иногда преподаватель в ответ на «невинную просьбу» подходил к пустому свежеперезагруженному компьютеру и выполнял просьбу там.
Резидентный модуль с клавиатурным перехватчиком был дополнен графическим модулем, который скрупулезно воссоздавал экран первой загрузки компьютера. После запуска этого модуля компьютер был свеж и невинен, как-будто только что была нажата кнопка Reset.
Но чтобы не палить тему, мы же должны были все таки залогинить преподавателя на сервер, но сделать это после первого ввода пароля мы не могли, т.к. в это время пароль писался в файл и на окошке стояла липовая форма для логина.
Поэтому после первой попытки всегда выдавалось сообщение о том, что Invalid password, а вот уже второй раз мы вызывали через команду реальную форму для логина и она уже логинила на сервер.

Чего только не сделаешь, чтобы спокойно поиграть в Warcraft по сети: резидентный модуль, эмуляция и даже социальный хакинг.