Добавить в цитаты Настройки чтения

Страница 5 из 6

Я жаждал расплаты и решил отомстить за блокировку. Для этого нужно было пожертвовать одним из ящиков. Написав простенького трояна на Pascal’е, я разослал его под видом «крутого скринсейвера» на общую конференцию.

Троян должен был стащить файл с паролями от почтового клиента и отправить на мой адрес.

Настройки почтового сервера позволяли подменять отправителя в письме, что я и сделал. К сожалению, человек, от имени которого я разослал это письмо, оказался дома, и всю затею мне испортил.

Кроме электронной почты, у нас в городе работала BBS (Bulletin Board System). Это электронная доска объявлений, проще говоря, система, которая использовалась для общения пользователей по телефонным линиям – через модем.

У нашей BBS телефонная линия была одноканальная, то есть общаться можно было только с оператором системы, сисопом[6].

Подключались к BBS с помощью так называемого модемного терминала. Это текстовое окно, похожее на Telnet. Вы отправляете команду напрямую модему, например, ATDP 8945444333 – набрать в импульсном режиме номер 8945444333 (Dial Pulse). После соединения на экране появлялось приветствие в виде разноцветного текста.

Там можно было поболтать, залить или, наоборот, скачать файлы. У этой BBS-ки был режим командной строки – практически тот же MS-DOS. Вы могли ходить по каталогам, где лежали файлы для скачивания. Еще там была та же досовская команда «type»[7]. А вот команда «cd C:», смена диска на C:, от непривилегированного пользователя, естественно, вызывала ошибку «недостаточно прав».

Разговорившись с сисопом, я скачал софт, который он использовал, – Tornado BBS.

Запустив Tornado BBS у себя на компьютере, я занялся исследованием. И практически сразу обнаружил две ошибки. Во-первых, при вводе неверного пароля Tornado BBS писал в лог следующее: «Введен пароль X вместо Y», где Y – истинный пароль. Во-вторых, команда type (вывод содержимого файла) не проверяла привилегии пользователя. То есть можно было легко прочитать любой файл на диске C:.

Пазл сложился, вот оно! Достаточно было совершить неудачную попытку входа в BBS от админа, после чего под обычным пользователем вывести лог. Это я и сделал ночью.

Имея пароль админа, я получил доступ ко всему диску компьютера. Но, честно говоря, ничего интересного там не нашлось. И, скачав файл с паролями других пользователей, потерев лог, я, полный удовлетворения, отключился.

Подсоединившись к BBS на следующий день, я зашел в систему под чужим аккаунтом. Решил поболтать с сисопом:

– Привет, как дела? – написал я.

– Да вот, меня вчера похакали.

– Неужели? Что-то стащили?

– А вот, ты и попался. С человеком, чей это аккаунт, я говорил час назад по телефону!

– Ладно, раскусил.

В общем, мы подружились. Я рассказал про ошибки. Позже мы частенько играли с ним по модему в Quake World.

На нем же я попробовал Win95 Nuke – и он отлично сработал. Windows просто вылетала в синий экран.

После Pascal я взялся за язык программирования Visual Basic. Мой брат купил книжку по Visual Basic 6.0. Подкупало тем, что на нём можно было визуально рисовать окна и элементы на них. И очень просто обрабатывать события: щелчки мышкой, ввод с клавиатуры и т. д. Щелкаете по любому элементу, в открывшемся окне выбираете событие, пишете его обработчик.

Позже, как только я перешел на Visual C, я не мог понять, как же тут добавить окно и написать обработчик его событий? Почему он тоже «вижуал», но тут все по-другому.





На Visual Basic было легко написать простейший калькулятор, редактор текста. Но для серьезных проектов он не годился – он был медленный и тащил кучу библиотек с собой.

Хороший язык… для детей. Так пришло понимание, что для серьезного программирования нужно что-то еще.

Линус Торвальдс написал Linux на C и ассемблере. Выбор был очевиден.

Сначала я осуществил свою детскую мечту и стал изучать ассемблер. Компилятором был выбран TASM (Turbo Assembler). Для тех, кто не знает, ассемблер – язык программирования низкого уровня. Это система обозначений, используемая для представления в удобочитаемой форме программ, записанных в машинном коде. Другими словами, это самый низкий уровень. Здесь нет стандартных функций «вывести строчку на экране», «получить ввод от пользователя». Все это доступно через вызовы к операционной системе. Например, в MS-DOS, с чего я и начал изучение ассемблера, вызовы к ядру были реализованы через прерывание INT 21H.

Любая ошибка на языке ассемблера может привести к краху всей программы. Поэтому, если вы хотите стать настоящим профи, – вы обязаны понимать, как функционирует CPU, как он обращается к памяти, как он работает с устройствами и многое другое. Этот хороший опыт помог мне потом писать высоконагруженные и производительные системы при минимуме системных требований.

Как раз хорошим дополнением к учебнику по ассемблеру стала книга про архитектуру x86-процессоров. Вы знаете, что Биллу Гейтсу приписывают фразу «640 КБ памяти всем хватит»? Откуда взялось ограничение в 640 КБ памяти, как процессоры, начиная с 286-го, его обходили, как появилась многозадачность и защищенный режим работы процессора, скалярность и суперскалярность? Все это должен знать настоящий профи.

Конечно, на ассемблере сейчас уже не напишешь игру, да и хоть сколько-нибудь сложный проект. Этот язык в основном используется для тех случаев, когда нужно сделать что-то очень небольшое, элегантно, на низком уровне, и обычно в виде вставок в код C/C++.

Уже давно даже новые версии компиляторов языка C пишут на самом C.

Поэтому я принялся изучать язык C и сразу C++ по книгам Герберта Шилдта.

Первое мое более-менее серьезное творение – мини-операционная система. Загрузчик, написанный на ассемблере, записывался на первую дорожку дискеты размером 3,5 дюйма и загружал ядро, написанное на C. Ядро на C переводило процессор в многозадачный 32-битный режим. И на этом, в общем-то, все.

Но это реально круто. Я был горд собой! Даже такая простая вещь требовала хороших знаний системного программирования и архитектуры процессора.

В 1998 году выходит игра Half-Life. Эта игра поменяла очень много в отрасли. В отличие от темного Quake, коридоры и комнаты в Half-Life выглядели светлыми и совсем как настоящие.

Half-Life,разработчик Valve Corporation, издатель Valve Corporation, 1998

Подавляющая часть игр использует технологию Lightmaps.

Lightmap – метод освещения пространства в 3D-приложениях. Он заключается в том, что создается текстура, содержащая информацию об освещенности трехмерных моделей. Метод значительно экономит ресурсы компьютера, поскольку приложению не приходится рассчитывать падение света в режиме реального времени.

6

Сисоп – системный оператор.

7

type – вывести содержимое файла под MS-DOS.