Когда компьютеры были большими, а программисты - маленькими, или The History of Life

Начало. Спектрум.

10 BORDER 1
20 BORDER 2
30 BORDER 3
40 BORDER 7
50 GO TO 10

Примерно такой был мой первый опыт программирования в гостях у друга, отец которого спаял у себя дома ”ZX Spectrum”. У нас еще была какая-то распечатка (толстая пачка бумаги), где были исходники разных программок. Набивали мы их на клавиатуре и пробовали менять какие-то параметры, а так же дописывать другие строчки. Затем смотрели как оно все работает. :) Но занимались этим мы в перерывах между играми, самой яркой из которых была, конечно же, Elite:

Elite Game screenshot

Уже тогда я понял, что вот оно, моё. Я настолько этим загорелся, что забыл за химию. :) Хотя увлекался я ей прилично. Еще в 8-м класе я знал химию за 9-й, так как честно украл в школе учебник. :) Да-да, стырял. И за лето прочитал. А уж сколько экспериментов было - уууууууу……. И взрывы водородные дома (и что меня дернуло спичку поднести?), и обесцвечивание чернил чистым газом зеленоватого цвета - хлором, который я добывал на балконе в противогазе (ух как мама офигела тогда, когда с работы пришла), и разные опыты с кислотами, попытки получить и сдетонировать нитроглицирин (делали это дистанционно)… Даже вел тетрадку по пиротехнике, в которую записывал все накопленные знания и “рецепты”.

GAS

Но компьютер - это компьютер. 1 или 0. “Да” или “нет.” И я понял, что “ДА”.

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

Vesna

LET сухарь = сухарь + 1

День за днем я постигал тайны ZX Spectrum, практически не отвлекаясь на всякую фигню. Я полностью “забил” на домашние задания в школе (спасало только то, что я всегда слушал сами уроки). Иногда даже и дни прогуливал. Что интересно, мне за это никогда ничего не было. :) От меня практически никогда не требовали приносить всякие там справки - как-то у них, видимо, не укладывалось, что я могу прогуливать. :)

Но когда я и так уже опаздывал, да и по собственным прогнозам штук 3-5 двоек должен был получить за несделанные домашние задания - я просто шел не в школу, а за гаражи, окружающие площадку, где мы постоянно играли в футбол. Там мне нужно было выждать с час, пока родители не уйдут на работу.

LOAD “”

Загружаю “сейв” и проваливаюсь в мир программирования. Вынырнуть вовремя часто не удавалось. Бывало пару часов подряд пишу код, когда БАЦ… свет моргнул, и все сбросилось. Все-таки на магнитную ленту сейвиться - это вам не CTRL+S. Так что нервных клеток было загубленно тогда прилично.

Вот уже и родители давно дома, а на улице темно. А мне что? Я в с своем мире, который создавал сам.

– “Миша, остыло все!” – в который раз безнадежно повторила мама.

В потерянном виде подошел к столу. Я все еще был там, в строчках программного кода. Придвинул к себе талеку супа, взял в руку кусок хлеба и тут мой мозг выдает:

LET сухарь = сухарь + 1

Странно такое было видеть со стороны, наверное, но я разразился диким смехом. :)

Пересидел я, однако.

Ну здравствуй, реальность.

Вы проиграли? Ну и пусть…

С появлением ZX-Spectrum’а я познал слово “ТВОРИТЬ“. Строчка за строчкой, день за днем… Я придумывал и создавал игры. Сначала на встроенном бейсике, потом на лазер-бейсике, поддерживающем спрайты. Позже и на ассемблере. Каждый раз я старался делать все лучше и лучше.

Даже обучалку для английского языка я не мог сделать банальной. После прохождения каждого уровня (этапа из двадцати слов) играла музыка, а на экране появлялись плящущие человечки.

“Тараканьи бега” - наверное, самая яркая моя игра. Спрайтовая анимация крупье и трибун, тараканы, бегущие к финишу. Во время объявления результатов я подобрал звук, напоминающий голос. Алгоритм делал эту комбинацию “бипов” столько раз, сколько слогов в слове. Лицо крупье я тоже анимировал. Но, как вы знаете, любое азартные игры всегда приводят к грустному концу. Но я ТВОРИЛ, потому ограничиться простым сообщением “game over” не мог и написал вот такой стишок:

Вы проиграли? Ну и пусть.

Зато вся ваша боль и грусть

Научит деньги вас хранить,

Распоряжаться ими мудро,

Не проиграть, и не пропить,

И не проснуться БОМЖем утром.

Конечно, это же игра,

Но в жизни нужно быть серьезней.

Совет даю вам: ни-ко-гда

Не проиграйте жизнь.

И все же…

… играть-то можно.

Иногда.

День “Икс86″

Наконец, этот день настал. Теперь я мог окончательно забыть про “ZX-Spectrum” - у меня появился сразу “Pentium” (100МГц) с настоящим монитором, клавиатурой и мышью, CD-ROM-ом и колонками!

Ощутите разницу - вместо телевизора теперь - 14”-монитор, а для загрузки ПО больше не нужно было включать магнитофон и ждать загрузки ~40 килобайт данных 3-5 минут. У нового компьютера был жесткий диск, CD-ROM и дисковод :) Но … обо всем по порядку.

Шел 1998-й год. После года “релакса” я сделал вторую попытку поступить в ЗГТУ на программиста, но снова завалил физику. Видимо, сказалось то, что последние годы в школе я практически не делал домашних заданий. Старался все запомнить на уроках, а дома погружался в мир программирования. Бороться с этим было не возможно.

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

ZNTU

Это был мой первый прямой контакт с платформой x86. В классе на компьютерах была установлена Windows NT 4.0. Если во время пары какой-нибудь компьютер был свободен, я, рискуя навлечь гнев начальника, всегда старался сесть и поковыряться в нем. :) Как можно догадаться, и рабочий день у меня завершался не сразу. Дома такого компьютера у меня еще не было, потому я на полную катушку использовал рабочее время. А еще мы вечерами периодически секретно устраивали сетевые бои в Quake-1. :)

Дома на “ZX Spectrum” уже и смотреть было не интересно, потому в первом семестре я даже немножко поучился, что-то дома читал, разбирался и изучал разные глупые предметы, желая изучать только программирование и ничего более. Но в то же время на лекциях по программированию мне было невыносимо скучно. Сидеть и слушать то, что ты уже знаешь - это было просто потерей времени.

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

Про файлик HISTORY.TXT :)

1998-й год.] Ну все, теперь мне не нужно было засиживаться на работе. Теперь меня дома ждал компьютер! Само собой, началось все c попыток установить все, что только можно установить и посмотреть все, что только можно посмотреть. Но “отпустило” меня довольно быстро, и я начал все больше и больше вникать в дебри системы “Windows 95″.

В это время я начал подрабатывать на решении заданий по программированию для студентов (дневников и заочников). Деньги выходили весьма приятные, учитывая копеечную зарплату лаборанта. Это место работы было хоть и веселое, но не простое. Каждое утро приходилось в режиме зомби на трамвае приезжать на работу до начала пар, вытерпливать все эту дневную суету, а вечером опечатывать помещение и ставить коридор на сигнализацию. Не высыпался я ужасно, потому с утра я ехал обычно стоя с закрытыми глазами, а вечером, когда можно было ехать сидя, я периодически вырубался.

Зато во время пар можно было немного расслабиться. Бывало, сяду за свободный компьютер, выберу жертву, набирающую на компьютере очередную программку на турбо-паскале, и пошлю туда сообщение командой net send : “Внимание! Произошел перегрев центрального процессора. Срочно отойдите от компьютера на три шага!”. И ведь тогда это было смешно, да. Правда, со временем некоторые студенты ознакомились с командой net send и, бывало, по неосмотрительности “звездочкой” отсылали какие-то глупости одновременно на все компьютеры двух компьютерных классов, что сопровождалось «хоровым beep-ом», прорезающим тишину занятий. Приходилось потом разбираться с негодяями.

Но вот что интересно… Своего личного аккаунта у лаборантов не было, а нас такой расклад с коллегой (лаборант второго нашего компьютерного класса) никак не устраивал. Интернета в классах все равно не было, потому ничем более интересным мы заняться все равно и не могли, так, благодаря l0phtcrack и осторожности, у нас на руках появились пароли почти всех преподавателей, администратора и даже пароли на BIOS.

А затем я взялся за изучение команды telnet, перебирая вручную(!) пароли входа на какой-то хост во внешней сети. Причем, меня не остановило и первое предупреждение, переданное через преподавателя о том, что, якобы, кто-то отсюда пытается зайти на компьютер в бухгалтерии. После второго предупреждения (и угрозы заставить меня писать объяснительную) я осознал глупость данного занятия и прекратил, так что моё знакомство с unix системами пришлось отложить на потом.

И вот, наконец, до некоторых компьютеров наших аудиторий «дошел» Интернет! Это был просто праздник. Медленно, но уверенно, я каждый день набивал свою 3.5-дюймовую дискету статьями по безопасности и программированию, чтобы дома уже эту информацию обрабатывать и осмысливать. А для записи своих мыслей я создал на компьютере файлик HISTORY.TXT.

Благодаря этому файлику, например, я могу сейчас узнать, что свою первую программу (WinAmp) я взломал 6 декабря 1999 года. До чего же сейчас интересно читать свои старые записи, которым более 12 лет. (А на момент обновления этой статьи - почти 20 лет!)

1.10.99. С++. Макросы. Макрос, копирующий *.PWL в любой каталог. План - достать доку по написанию макросов (справочник по функциям).

2.10.99 C++. Определение типов, cout <<, pointer … Far - KeyMakros AltX

3.10.99 C++. Дописал программу ЧИСЛА.

4.10.99 Достал слабенькую доку по макросам. Классная команда SHELL !!! Изменил макрос1 - чтоб запускал блокнот и писал текст. Короче - нужно скорее устанавливать Office97 !!!

5.10.99 На работе - облом! Инет нам отрубили. :-( Уяснил разницу между Word Basic и Visual Basic. Написал парочку макросов. Начал писать инет-страницу. C++ Файлы.

6.10.99 C++. На работе на 01 компе написал макрос AutoExec.

7.10.99 VB - потихоньку. Идея - на C++ написать … забыл что :-(

9.10.99 С++ Попытался написать архиватор.

10.10.99 C++ Начал (уже какой раз!) писать TOP SECRET. Жду CD-ROM.

14.10.99 C++ На работе целый день писал TOP SECRET!

16.10.99(Сб) TOP SECRET . Были на концерте, потом устроили свой концерт.

18.10.99 C++ TOP SECRET.

26.10.99 Достал Delphi 3.01. План - разобраться с классами на C++

13.11.99 . До 1 ночи (пока еще до часу) писал на ассемблере! Все не так уж и сложно !

14.11.99 - 15.11.99 Потерялся во времени ( *** UFO I *** )

06.12.99 ПН Не знаю сколько там часов( и минут)… Только что ломанул WINAMP !!!!!!!!! Из-за отладчика, часы приостанавливались и показывают неправильно. Скоро ехать в универ, забирать трудовую книжку. … Долго я пытался чего-нибудь взломать. Наконец-то ! Регистрация в ВинАмпе - имя:К код:284957 !

12.12.99 Сб-Вс Так как сейчас 2.41. Только что получился первый резидент, перехватывающий 21h прерывание. Заменяет буквы а на о ! Весело! Первый шаг сделан. Поехали дальше.

Тем временем, мой полуторагодичный срок работы в ЗГТУ подошел к концу – человек, которого я временно замещал, вернулся из армии. Особо не раздумывая, я согласился на предложение своего друга пойти работать на «Искру» (военное предприятие), где так же всю жизнь инженерами работали мои родители. Но об этом – в следующий раз.

SoftIce

[14 января 2000 года.] Мое новое рабочее место оказалось куда интересней, чем работа лаборантом в университете. Первый раз мое дикое увлечение программированием могло оказаться где-то полезным.

Так получилось, что в КБ «Искра» только-только была внедрена система «1С», но сопровождать ее в плане программирования новых модулей, форм отчетностей и т.п. – некому. Мне выделили рабочее место, пачку книжек по этой системе и, потихоньку, процесс пошел. Я начал писать модули для получения всяких разных данных из базы по сотрудникам, параллельно продолжая дальше углубляться в системное программирование Windows, взлом и прочее.

После первой успешно взломанной программы (WinAmp) мой список начал быстро пополняться: PictureWorks, VirtuaGirl, ACDSee, HexWorkShop. Часы, проведенные в отладке под SoftIce сбивали мне время на компьютере. AVP, UltraEdit32…

SoftIce

Затем, не особо надеясь на успех, я попробовал взломать парольную авторизацию 1С. Защита пала всего за 3 минуты. Поначалу я даже не поверил своим глазам, но после тестирования я убедился, что теперь действительно можно зайти под любым пользователем системы с нужным уровнем доступа к базе данных даже не вводя пароль. Чуть позже я оптимизировал хак – теперь для отключения авторизации достаточно было подправить в памяти даже не байт, а всего 1 бит. Но для полной красоты я написал программу, во время работы которой в нашу версию «1С. Зарплата и кадры» можно было войти под любым аккаунтом. Просто выбираешь из списка и жмешь «ОК» без ввода пароля.

Так как Интернета у меня не было, много чего пришлось изучать с помощью отладчика, а не документации. Так, например, после изучения внутренностей AVP я научился скрывать процессы в Windows 9598, а, поковырявшись в winpopup.exe, я понял, как работать с «мэилслотами» и отправлять стандартные сообщения на удаленные компьютеры.

Да и вообще тема «удаленных компьютеров» становилась мне все интересней и интересней. Каждый день я бродил по «сетевому окружению», находил небезопасно настроенные компьютеры (с открытой на чтение папкой Windows), с которых можно было скопировать файлы .pwl, расшифровывал пароли и получал по цепочке доступ к другим компьютерам, к которым доступа не было никакого. Заодно для себя написал программку, которая оповещала о сетевом подключении к моему компьютеру, а так же программу «Unpassword 95», которая пыталась брутфорсить удаленно пароли на сетевые ресурсы.

Все это «исследование» вылилось в написание статьи «Технологии взлома больших локальных сетей» для «Underground InformatioN Center» (UINC), в ряды которого я тогда и вступил. Более 120 тысяч человек прочли статью с одного только сайта uinc.ru, а спустя 12 лет статья до сих пор присутствует на более чем 100 сайтах.

Но главная цель – получить доступ в Интернет так и не была достигнута по одной простой причине – в наших сетях отсутствовал стек протоколов TCP/IP, все работало только на IPX/SPX. Сеть, в которой был выход в Интернет, была изолирована от всех остальных шлюзом на Novell Netware. Вот тут и было уже самое интересное….

Время познавать Stealth

[2000 год] КБ «Искра», отдел «АСУ».

Существующий «дискето-нет» вместо Интернета начал надоедать.Для того, чтобы скачать/посмотреть что-либо в Сети, мне нужно было брать дискету и топать этажом выше (плюс иногда ждать, когда мне его освободят). Но к этому компьютеру так же был доступ по IPX, т.е. этот хост можно было видеть через windows-сеть.

Первое решение пришло быстро – надо было сделать так, чтобы этот компьютер сам для меня скачивал все, что я ему укажу в виде URL. Недолго думая, я написал программку-троян, которая открывала на доступ невидимую папку и каждые ХХ секунд проверяла - не поступил ли туда текстовый файл (в котором каждая строчка была http-ссылкой – заданием). Но вот скачивалось все уже в программе с докачкой – «ReGet». Навыки ковыряния ПО с помощью SoftIce очень пригодились – я пропатчил «качалку» так, что она стала полностью невидимая – ни иконки в трее, ни окна приложения, в общем – ничего.

…Очередной поход наверх. Полазил пару минут в Интернет, вставил дискету, чтобы записать какую-то штуку, что я (якобы) нашел. И… запуск с дискеты моей «системы» – DONE! :) Теперь у меня было какое-то подобие Интернета прямо на рабочем месте.

А тем временем дома я продолжал поглощать документацию (RFC на английском) по сетевым протоколам, читая с 14’’ экрана и сидя, и лежа. Постоянно включенная музыка “The Prodigy” придавала мне сил. Не хватало только нормального Интернета.

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

Обрисую немного картину. В КБ «Искра» Интернет был только на 4-м этаже здания. На компьютерах в этой сети были два стэка протоколов – TCP/IP и IPX/SPX. Первый, само собой, нужен был для работы в глобальной сети, а второй – для связи со всеми остальными хостами других отделов (для обычного обмена файлами через windows-сеть). На выходе с этажа стоял сервер на Nowell Netware, который был шлюзом (маршрутизировал только IPX). И на всех остальных компьютерах КБ был протокол IPX. К слову говоря, сеть вся вообще была на коаксиале.

Даже если я себе установлю TCP/IP, наружу за Nowell-сервер я все равно никак не попаду. Потому я решил сделать вот что. Самое главное, что мне было нужно – протокол HTTP. А он работает поверх протокола TCP, гарантирующего доставку пакетов. Аналог в стеке IPX/SPX – это SPX. Вполне логично будет взять поток данных из TCP-соединения и перебросить по SPX в какое-то другое место, где можно уже будет снова вернуть все в TCP.

Мне пришлось написать специфический прокси-сервер из двух модулей. Первый работал на моем компьютере. Запросы из браузера попадали прямо на него и отправлялись по протоколу SPX на второй модуль, который я установил на тот самый компьютер, что качал мне до этого файлы reget-ом. Там данные уже перебрасывались по TCP на общий прокси-сервер. Хоть все и работало в однопотоковом режиме, это уже было похоже на нормальный Интернет. :)

В ЗГТУ тем временем … как бы… закончился 4-й семестр моего заочного обучения на программиста. А у меня висели долги еще за второй. Тут-то я и понял, что, видимо, не судьба. :) И углубился в дебри программирования под win32 и эксперименты с linux/freebsd дома и на работе… А еще чуть позже у меня на время появился модем. Но это уже совсем другая история. ;)

ПРОДОЛЖЕНИЕ СЛЕДУЕТ…