Как создавалась первая программа для программирования

Обновлено: 05.07.2024

Я даже не знаю как правильно спросить, потому что не знаю начинки эвм (или что там было).
Но попытаюсь объяснить от обратного. Сейчас куча IDE, языков программирования и пр. Так вот, а как был написан первый язык/набор команд/что-то еще? Как написан ассемблер (или он не является отправным пунктом?)?

Или объясните как это работает =)

Первая программа была написана в 1843 году Адой Лавлейс, кстати, очень незаурядной личностью, умершей от рака в 36 лет, дочкой английского поэта Байрона. Ею же был создан первый язык программирования, введены понятия "цикл" и так далее.
У истоков современных языков программирования стоит Грейс Хоппер, разработавшая первый компилятор, впоследствии контр-адмирал флота США, тоже весьма незаурядная женщина, в отличие от Ады Лавлейс дожившая до глубокой старости и работавшая почти до 90 лет.
А первые программы для ЭВМ набирали тумблерами (переключателями) на приборных досках. Потом вместо этого приспособили перфокарты, изобретенные Германом Холлеритом для машин для обработки результатов переписей населения. Первые программы писались в виде чисел, скажем, 23 - команда сложения. А потом придумали язык ассемблера, который сначала просто заменял легкие для запоминания буквенные обозначения, которыми записывались команды, на соответствующие числа по таблице, например, ADD заменялось на 23. А дальше шла самораскрутка - на примитивном языке писался ассемблер или компилятор для более сложной версии того же языка или для другого языка, потом этот процесс повторялся. В машине есть процессор, в зависимости от конструкции у процессора есть набор поддерживаемых им команд (машинных кодов) . ассемблер написан машинными кодами, т. е составлен нуликами и еденичками.

Вообще первый язык программирования придуман Природой. Это рефлексы животных. А потом, как "обновление версии" - работа человеческого мозга.

Первый искусственный язык программирования придуман неадертальцами-кроманьонцами. Это человеческая речь.

Первые сложные многоцелевые вычислительные устройства появились еще в XIX веке. Тогда же возникла необходимость в разработке программ для них, и впервые с такой задачей столкнулась легендарная Ада Лавлейс, работавшая с вычислительной машиной Чарльза Бэббиджа, которая называлась "Машина для исчисления разностей". Но настоящие языки программирования появились все-таки в эпоху электронных вычислительных машин. Считают, что первый язык программирования - это язык Short Code, появившийся в 1949 году.
Первыми языками программирования высокого уровня были Фортран, Кобол и Алгол, появившиеся в 50-е годы XX века. Первые два из них "здравствуют" и поныне - это языки-долгожители, а Алгол стал родоначальником целого семейства языков, в числе которых и Паскаль.

Первый машинный язык программирования - язык машины Тьюринга и первой программистки Ады.

Мы расскажем вам краткую историю с чего все начиналось и как зарождалось программирование. Также мы расскажем про самые первые языки программирования.

Изначально программирование имело крайне примитивный вид и практически не имело отличий от упорядоченного бинарного кода с формализованным подходом. По сути, при зарождении сферы отличий языка программирования от компьютерного кода было немного. Очевидных и естественных удобств для программиста не существовало, он обязан был обладать знаниями числовых кодов для каждой команды машины. Даже распределение памяти для выполнения команд ложилось на специалиста.

Для упрощения обращения с ЭВМ люди стали активно разрабатывать языки, одним из первых стал Ассемблер. Для отображения переменных стали использоваться символьные наименования. Вместо числовых операций человеку достаточно знать мнемонические имена, их запоминание в разы облегчалось. Уже на этом этапе языки программирования стали более приближёнными к понятному для человека языку.


К первооткрывателям среди языков программирования относится Фортран – это сокращённое сочетание 2 слов: Formula и Translation. Создан уже в середине 50-х. До сих пор язык используется благодаря лёгкости и простоте написания, а также развитой системе библиотек для Фортран. Чаще используется для научных и инженерных подсчётов, а также активно применяется в физичке и остальных науках, связанных с математикой.

Узконаправленные языки

Из-за увеличения сфер использования ЭВМ появились и другие языки для отдельных разработок в новых сферах:

  • экономическое направление оставалось незанятым до появления Кобол;
  • Снобол – обрабатывает алгоритмы, связанные с текстами;
  • Лисп. Работает на основании алгоритмов для отработки символов. Активно используется для формирования искусственного интеллекта.

Уже в 1968 г. был впервые запущен конкурс, в котором главным местом являлось звание лучшего языка программирования для начала карьерного пути. Данные планировалось использовать для обучения специалистов. Победу одержал Алгол-68 , но он остался малоизвестным, о популярности и речь не идёт.


Специально для участия в конкурсе был создан Паскаль, разработчиком являлся Никлаус Вирт. Язык весьма доступный, удобный и объединяет немало мощных инструментов для структурирования информации. Несмотря на изначальную разработку с целью обучения студентов, Паскаль получил широкое распространение и активно развивался. Даже сегодня он является одним из лучших и известнейших языков программирования.

Для обучения детей в школах был создан Лого, у истоков стоял Самуэль Пайперт. Достоинства – простота работы и обилие возможностей.

В школах стал преподаваться простой язык Бейсик , он легко взаимодействует с ЭВМ в качестве прямого диалога. Время никак не повлияло на эту сферу, до сих пор Бейсик является самым простым языком для начала изучения большинства распространённых направлений программирования.

Создание языка C

Развитие возможностей вычислительного оборудования привело к необходимости написания ёмких программ для управления ЭВМ. Это место по праву занял язык Си, который стал активно использоваться в 70-х годах . Явным достоинством языка является его универсальность. Он превосходит Паскаль благодаря наличию вложенных возможностей сотрудничества с разными машинными командами и подходящими частями памяти.


Си используется повсеместно в качестве инструментального языка для написания операционных платформ, трансляционных устройств, баз данных и остальных прикладных, системных задач. Си не имеет чёткой направленности, он подходит для многих задач из-за эффективности, лёгкости переноса и экономного потребления ресурсов. Чаще всего Си по скорости обработки данных сопоставим с Ассемблером, производительность программ на обоих языках будет приблизительно равной. В небольшом языке заложена немалая мощность.

Пролог и Ада

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

Только в 80-х годах был разработан язык Ада . Он расширяет классическое понимание и свойства языков того периода. Ада могла решать задачи в режиме реального времени и моделировать независимые решения.

Классификация

Сегодня разработаны классификации языков по уровню работы, это распределение самое распространённое. Выделяют 3 основных уровня:

  1. Низкий. Сюда относятся различные машинные языки или разновидности с символическим кодирование типа Ассемблера и Автокода. За основу взяты операторы машинных команд, только разработаны с привязкой к мнемоническому коду. Операндами являются уже не точные адреса, а символьное обозначение имён. Все модели разработаны для отдельных разновидностей ПК, они являются машинно-зависимыми. В подобных языках отмечается сильная зависимость языка от внутренних особенностей системы;
  2. Высокий. Языки встречаются куда чаще, они более удобны в использовании. К ним причисляются: Алгол, С, Пролог, Паскаль, Бейсик, Фортран и другие. Перечисленные языки не имеют жёсткой зависимости от машины, ведь они основываются на возможностях системы операндов, которые подобны для классовых алгоритмов. Недостатками высокого уровня являются большая ресурсоёмкость и медленное исполнение;
  3. Сверхвысокий. Представителей языков крайне мало, только APL и Алгол-68 . Их считают сверхвысокого уровня из-за разработки сверхмощных операторов.


Согласно другой классификации языки делятся на:

  • символьные – Пролог, Лисп и Снобол;
  • вычислительные – Паскаль, С, Алгол, Бейсик, Фортран.

Направления развития

Информатика в современном мире развивается в 3 ключевых направлениях:

  1. Процедурное появилось в период активнейшего развития компьютеров и других вычислительных устройств, с тем пор широко используется. В процедурных направлениях присутствуют выраженные описания действий, необходимых к выполнению. Для получения результата всегда проводится определённая процедура, которую составляют различные последовательности манипуляций. Процедурные языки дополнительно разделяются на:
    • Структурные. В них используется один оператор для записи цельных алгоритмом: циклов, функцию, ветвлений и остального. Более известны: Паскаль, Ада и С.
    • Операционные. Применяют несколько различных действий. Среди самых известных разновидностей: Фокал, Фортран и Бейсик.
  2. Непроцедурные. Языки программирования имеют декларативную структуру, появление которой приходится на 70-е года. Активнее всего начали развиваться в 80-х годах после появления проекта формирования 5 поколения ЭВМ. Основная задача – создание возможностей для построения высокоинтеллектуальных машин. Они также разделяются на:
    • Функциональные. Программа выполняет исчисление определённой функции, которая берёт за основу другие относительно простые алгоритмы и более простые задачи. В основе функционального направления используется основной элемент – рекурсия. Она подразумевает расчёт значений функции с помощью задействования её в других элементах. В языке отсутствуют циклы и методика присваивания значений.
    • Логические. Программа вовсе не требует описание действий, её основу составляют соотношения данных и их значения. Только после расчёта можно получать ответы на вопросы. После перебирания известных параметров выводится ответ. В программе отсутствует метод или порядок обнаружения ответа, он неявным образом устанавливается языком. Ярким представителем является Пролог. Из направления полностью устранено алгоритмическое мышление, только статические отношения между объектами, а вся динамика сокрыта от разработчика и сводится к перебору данных.
  3. Объектно-ориентированные языки, все они являются разновидностью высокого уровня программирования. Подобные языки не нуждаются в описании чёткой последовательности манипуляций для получения результата задачи, но отдельные компоненты процедурного направления присутствуют. Пользователям значительно проще работать с такими языками, так как они обладают доступным и богатым интерфейсом. Лучшим примером подобного направления с визуальным общением является Object Pascal.

Существуют языки для написания сценариев, известными являются Rexx, Tcl, Perl и Python, а также языки оболочек систем Unix. В них разрабатывается индивидуальный стиль написания кода, который отличается от известного принципа системного уровня программирования. Они не используются для создания приложений на нижнем уровне, скорее для комбинирования различных компонентов из разных языков, из которых составляется набор отдельных функций.


Активнее всего стали развиваться по мере распространения интернета, от чего стали широко применяться языки сценариев. Для создания сценариев чаще всего применяется Perl, а для Web-части пользуется популярностью JavaScript.

Больше интересных новостей

10 полезных Android и iOS библиотек

10 полезных Android и iOS библиотек

10 ошибок, которые хороший программист никогда не совершит

10 ошибок, которые хороший программист никогда не совершит

TIOBE: язык Си становится популярнее в 2020 году

TIOBE: язык Си становится популярнее в 2020 году

Что сейчас с PHP и что ждёт его завтра?

Что сейчас с PHP и что ждёт его завтра?

Favorite

В закладки

Если вам нравится iPhone, скажите спасибо ткацкому станку. Краткая история программирования

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

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

В этом материале вы узнаете, откуда появился код, как он работает, кто стал первым программистом и причём здесь ткацкие станки.

У всех компьютеров общий предок — ткацкий станок


Их считывание происходило двумя методами: электромеханическим и фотоэлектрическим.

Для кого-то это может стать неожиданным фактом, но пра-прадедушкой современных компьютеров являются ткацкие станки. Со стороны так и не подумаешь: что может объединять потрясающие тонкие MacBook с этими огромными махинами.

Общий предок — перфокарты. Да, в компьютерах Mac они не использовались, но зато отлично применялись в компьютерах первого поколения. На них записывались программы.

Только в ЭВМ это были математические задачи, а в станках — картины.


На фотографии изображён рабочий образец Жаккардового станка.

Идею применять перфокарты в ткацких станках впервые реализовал французский изобретатель Жозеф Жаккар в 18 веке. В каждое из отверстий проходила отдельная игла. Благодаря этому появилась возможность создавать полотна с невероятной детализацией.

Некоторые из таких полотен можно сравнить с настоящими картинами, написанными профессиональными художниками.


Это портрет Жозефа Жаккара, сотканный на его изобретении.

Правда, для математических вычислений тогда ещё использовались счёты, которых хватало только для сложения и вычитания. Людям требовалось что-то большее.

Первый «компьютер» придумали в 19 веке


Пускай при жизни Бэббидж не успел реализовать свой проект, вместо него это сделали сотрудники Музея науки в Лондоне. Сборка заняла два года в период с 1989 по 1991 год.

Взяв за основу Жаккардов станок, в 19 веке британский учёный Чарльз Бэббидж придумал машину с физическим механизмом. Перфокарты в ней использовались в трёх сценариях.

Перфокарты операций переключали машину между режимами сложения, вычитания, деления и умножения.

Перфокарты переменных управляли передачей данных из памяти в арифметическое устройство и обратно.

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

Цитата из описания машины на Википедии.

К сожалению, при жизни реализовать своё изобретение ему не удалось.


Портрет Ады.

Идею вычислительных машин подхватила его ученица Ада Байрон. Она, кстати, написала первые в истории компьютерные программы.

Одна из них была сделана для вычисления значений тригонометрической функции с многократным повторением заданной последовательности вычислительных операций. Здесь же Ада ввела понятие «цикла» в программировании. Другая разработка предназначалась для вычисления чисел Бернулли.

Также она выдвинула теорию, что при помощи аналитических машин можно будет решать не только математические задачи, но ещё создавать музыку, картины и тексты. Как она говорила в одной из своих записок:
«аналитически машины укажут науке такие пути, какие нам и не снились». Что же, она предугадала будущее.

Табулируюшая машина сделала работу с данными проще


Компьютеры и табуляторы действительно сделали людей продуктивнее во многих аспектах.

Все эти разработки тогда были уделом сообщества учёных. Массово перфокарты, кроме ткацких станков, нигде особо не использовались. Но всё поменяла табулирующая машина Германа Холерита. Американский учёный придумал её с целью ускорить процесс переписи населения.

Данные о возрасте, количестве детей, роде деятельности, расе и прочем записывались в ячейки на перфокартах. Ручной анализ всех этих данных занял бы значительно больше времени, а машина с этим справилась эффективнее. После этого на табулятор обратили внимание власти, военные, бухгалтеры, и перфокарты стали более массовыми.

Россия тоже внесла свой вклад в развитие компьютеров и программирования


Теперь набор перфораций стал нести в себе не только математические задачи, но и список симптомов у больных.

Стоит сказать ещё одно невероятное крутое устройство придумал в 1832 году российский учёный Семён Корсаков. Без шуток, это была, пожалуй, первая машина для интеллектуального поиска информации.

В основном она использовалась в медицинских учреждениях: пациент вводил информацию о своих симптомах, а машина по ним подбирала вероятное заболевание и список лекарств, необходимых для лечения. Симптомы вводились на перфокарты и поступали в считывающий блок машины.

Перфокарты работают просто, но программистов они сильно ограничивали


Все электронные вычислительные машины работают по бинарному принципу: на глубинном уровне все данные представляют собой набор единиц и нулей. 1 — заряд есть, 0 — заряда нет.

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

Ведь сегодня есть удобные среды для программирования с инспекторами. Если вдруг при компиляции кода случится ошибка, компьютер на неё укажет и предложит вариант исправления. Раньше такого не было.

Одна лишняя перфорация и всё — программа работает совсем иначе. Либо наоборот, где-то перфорации не хватает, и программа тоже будет «крашиться». Позднее программисты придумали компиляторы, которые переводят команды из понятных человеку слов на «язык» компьютера.

Компиляторы упростили работу с кодом


Да-да, так и работает код. Поэтому, кстати, под новые процессоры требуется оптимизировать софт, потому что у всех платформ свои инструкции.

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

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

Так появился Ассемблер — язык программирования низкого уровня. Низкого, потому что он сочетал в себе элементы привычного человеческого языка и машинного кода. За ним стали развиваться уже языки программирования высокого уровня. В них теперь задействовались только команды, соответствующие нашему привычному человеческому языку.

Языки высокого уровня сделали работу с кодом понятной для всех

Повышенные требования к компьютерам стали основной причиной, по которой языки ВУ появились. Теперь на ЭВМ создавались сложные вычислительные алгоритмы, которые содержали тысячи строчек кода.

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

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

Компьютеры стали превращаться в устройства для всех.

Благодаря играм появились графические интерфейсы


Недавно попробовал поиграть в ним с компьютером, вообще не представляю, как можно обыграть в этом машину.

Самая первая компьютерная игра появилась в начале 1940-х годов, её создал американский инженер Эдвард Гордон. Однажды за обедом вместе со своими коллегами он обсуждал идею того, что датчики, которые используются в счётчиках Гейгера для калибровки, могут научить компьютер играть. Они решили проверить гипотезу. Скажу заранее — у них всё получилось.

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

Так появился Nimatron — игровой автомат, весом в тонну, который показали на Всемирной выставке в Нью-Йорке. Он произвёл фурор: на ниматроне было сыграно порядка 100 тыс. партий. Забавно, что 90 тыс. из них выиграла машина.

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


Без игр современная техника была бы совсем другой. Правда, компьютерные игры не появиться не могли.

В 1962 году появилась Spacewar! — это первая компьютерная игра в нашем привычном понимании. Она имела двухмерную графику и возможность кооператива для пары участников. Всё, что нужно было делать — это уничтожать космические корабли противника.

Spacewar! создали программисты из Массачусетского технологического университета. Группой руководили Стив Рассел и Мартин Гретц. Игры показали, что компьютеры могут быть понятными многим. Да-да, дело было в графике. Непосредственно сами системы компьютеров того поколения управлялись при помощи ввода команд в терминале.


Карл держит в руках самую первую компьютерную мышь.

Это было дико неудобно. Для игр задействовались манипуляторы — джойстики, с помощью которых пользователи управляли виртуальными объектами. Инженеры переняли некоторые эти принципы при создании элементов человеко-машинного интерфейса.

В 1968 году американский изобретатель Дуглас Карл Энгельбарт представил миру курсор. Он разрабатывался совместно с командой инженеров из Стэнфордского исследовательского института, и эта вещь изменила то, как люди пользуются компьютерами.

В 1972 году в исследовательском центре Xerox PARC началась работа над Xerox Alto — первым компьютером с графическим интерфейсом. Теперь в разработке программного обеспечения появилось понятие «графический интерфейс пользователя» (Graphic user interface).

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


Apple тоже внесла огромный вклад в развитие компьютеров.

Это способ, в котором создание софта осуществляется при помощи манипулирования графическими объектами. Для проектирования каких-то сложных сервисов они, конечно, не подходят, но для простеньких программ или для ознакомления — в самый раз.

Следом за Xerox Alto в 1980-х вышли Apple Lisa и Macintosh — первые массовые компьютеры с графическим интерфейсом на рынке. Теперь компьютеры научились решать не только научные задачи, но и повседневные.

Интернет — самое масштабное, что было создано с помощью кода


Недавно Тим Бернерс-Ли решил продать исходный код интернета в виде NFT-токена на аукционе. Стартовая цена: $1 тыс.

Самым глобальным продуктом, который появился благодаря программированию, однозначно является интернет. Технологию «Всемирной паутины» придумал Тим Бернерс-Ли и Роберт Кайо.

Официальным днём рождения интернета считается 1989 год, тогда Тим работал в CERN над внутренней сетью организации, в которой сотрудники могли бы обмениваться информацией. Он предложил прокачать изначальную идею и создать глобальный гипертекстовый проект. Все документы находящиеся в его пределах должны были связываться между собой гиперссылками.


NeXTcube был выбран не случайно. Система обладала невероятно удобным софтом для разработки.

Теперь сеть стала способом передачи информации и других цифровых продуктов, созданных при помощи кода. Наступила эпоха интернет-сервисов.

В итоге все привело к интернет-сервисам и искусственному интеллекту


Сегодня вся наша жизнь сфокусирована в одном устройстве, которое помещается в кармане.

В конце 20-го века компьютеры всё равно были устройствами, к которым люди обращались только в крайней необходимости. Потом появились смартфоны, вычислительная мощность росла, в итоге это привело к тому, что интернетом мы стали пользоваться каждый день часами.

Instagram, YouTube, Netflix, Facebook, признавайтесь, кто где дольше сидит? Влияние программистов и сервисов на нашу жизнь стало огромным. По-сути, круглые сутки мы живём с нескончаемом потоке информации. И теперь те принципы программирования, которые были заложены в прошлом веке, стали определять то, как мы едим, путешествуем, отдыхаем, одеваемся и живём.

Некоторые задачи мы вовсе стали доверять компьютерам, начав развивать нейросети. Благодаря искусственному интеллекту, сегодня мы имеем технологию автопилота, и Tesla тому пример, алгоритмы рекомендаций в музыкальных сервисах и даже такие необычные эксперименты, как нейросеть Зелибоба от «Яндекса».

ИИ может выполнять даже творческую работу: Студия Артемия Лебедева имеет собственную нейросеть, которая называется «Николай Иронов» — она создаёт логотипы и дизайн.

Фишка нейросетей состоит в том, что они могут совершенствовать сами себя. Следующим шагом в истории программирования будет этап, когда искусственный интеллект сможет реплицироваться, придумывать новые алгоритмы и писать код. Кто-то боится, что компьютеры вовсе заменят людей и лишат их большинства профессий. Но я больше склоняюсь к мнению историка Юваля Ной Харари:

Исчезновение многих традиционных профессий в самых разных областях от искусства до здравоохранения, отчасти будет скомпенсировано созданием новых. Семейного врача, который занят в основном диагностикой известных болезней и выпиской знакомых лекарств, вероятно, заменит искусственный интеллект.

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

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

Цитата из книги «21 урок для XXI века», глава: «Новый профессии?»

Вот так одна идея использовать перфокарты в ткацких станках смогла создать будущее.

(21 голосов, общий рейтинг: 4.90 из 5)

Favorite

В закладки

Привет, читатель. Возможно, ты уже опытный разработчик и способен обучать других людей программированию. Может быть, ты новичок, только собираешься начать свой путь в IT и не знаешь, с чего начать (да не удержат тебя семеро). Может быть, ты системный программист и пишешь серьёзные программы для государственных предприятий военно-промышленного комплекса. Может быть, ты студентка филологического факультета местного ВУЗа и развлекаешь себя программированием простых программ на Python или JavaScript.

Но это неважно. Важен пожар внутри тебя. Я бы хотел рассказать тебе историю моего необычного развития в IT, и то, куда меня ведёт пожар, горящий внутри меня. Я бы хотел рассказать тебе, на какие грабли я наступал, какие инструменты выбирал и какие уроки выучил на этом необычном и трудном пути.

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

Первые трояны

Первый компьютер мне купили в 2007 году, когда я учился в 8 классе. Я обожаю компьютерные игры и сейчас в них тоже играю. Первыми же моими играми были Painkiller и S.T.A.L.K.E.R. Но ещё мне было интересно, как работает компьютер, что он может и чего не может.

Я мог бы начать изучение операционных систем и языка программирования Pascal, как все нормальные школьники, но меня слишком вдохновляли истории взломов, совершенных такими звездами компьютерного андеграунда, как Кевин Митник, Адриан Ламо, Джонатан Джеймс и т.д. В их руках я видел почти безграничную, свирепую, непобедимую власть, которую они обрели лишь терпением, желанием и опытом. Я считал их полубогами и хотел быть подобным им. Я был восхищен тем, как простые люди могут нажать пару клавиш и обрушить что-нибудь, да так, что мир вздрогнет.

В один из дней моей юности я открыл Internet Explorer, зашёл на Яндекс и ввел самый глупый запрос: «как создать вирус».

В интернете того времени была масса инструкций, следуя которым можно было создать почти всё, начиная от троянов и заканчивая бестелесными полиморфными сетевыми червями, вроде Code Red или SQL Slammer. После прочтения массы сомнительных и околокриминальных источников с подозрительной рекламой эротического и мошеннического содержания я решил начать с написания .bat троянов, потому что это было легче всего.

Интерпретатор командной строки Windows XP, которой я тогда пользовался, позволял считывать команды прямо из файлов с расширением .bat. Я написал несколько троянов, один из которых прописывал себя в автозагрузку операционной системы и постоянно перезагружал компьютер. Я казался себе гуру, суперхакером, чуть ли не вершителем судеб, и тот огонь, вспыхнувший во мне от понимания того, на что я способен, не погас до сих пор. Я понял, что создание программы для компьютера — это не спорт, где нужны годы тренировок, и не искусство, требующее вдохновения и многолетнего опыта.

Если архитектор везде натыкается на материальные преграды вроде стоимости строительных материалов, то создатель программ — только на ограниченность своего ума, не считая стоимости компьютера. Смог я — сможет любой. Предела нет.

Позже я узнал про языки программирования, какими они бывают и зачем используются. Я узнал, что существует целый зоопарк операционных систем, и Windows XP — только одна из них. Я прочитал, что такое троян, червь, вирус, исходный код, дизассемблер, firewall, эксплойт, ФСБ, обыск и т.д. Со временем что-то во мне изменилось и я задумался, а смогу ли я создать что-нибудь по-настоящему полезное. Скачав первую попавшуюся пиратскую версию среды быстрой разработки приложений Delphi 7, о которой я узнал на одном из тех нехороших сайтов, я начал пробовать писать программы.

Первая программа

Первой разработанной мной программой была, насколько я помню, консольная программа для шифрования файла по паролю. Она открывала файл на чтение/запись, из которого читались данные, ксорились с паролем и записывались обратно в файл. Программа была написана так, что её исходный код лучше не видеть никому и никогда, чтобы просто не стать седым. Вот пример кода, который там реально был:

Уже и не помню, сколько файлов я испортил, пытаясь довести программу до ума. В итоге xor (сложение по модулю два) был выброшен на свалку, а выбран был алгоритм шифрования DES. Но со временем программа стала настолько сложной, что я уже сам не мог сказать, что и как в ней работает. И это в моей программе! Но меня ожидал хороший итог.

Хороший, потому что я понял свою ошибку — я не прочитал, как не надо делать, потому что это просто не пришло в голову. Мне даже не было дела до того, что до меня такие идиотские ошибки уже делали тысячи и тысячи людей! Я был невероятно некомпетентен!

Излазив сотни сайтов, я узнал про алгоритмы шифрования, какими они бывают, что такое режим шифрования и чем собственно плохи алгоритм DES и режим ECB (режим электронной кодовой книги), что такое перебор пароля, перебор ключа, криптоанализ, USA NSA и т.д. Но информации всё равно было мало, и мало настолько, что я был зол.

Как это так? В мире полно криптографических программ, а как их правильно разрабатывать, на форумах никто не знает? Да не может такого быть, думал я. Как оказалось, ещё как может.

Первый взлом программы

Первой книгой по информационной безопасности, которую я прочёл, была пиратская версия книги Криса Касперски «Техника и философия хакерских атак». Я не просто её прочел, я её «проглотил». Найдя для себя хорошего кумира, я стал читать его книги и статьи. Я прочел «Записки исследователя компьютерных вирусов», «Компьютерные вирусы изнутри и снаружи», статьи вроде «Какие следы ты оставил после себя» и т.д.

Я начал понемногу учить язык ассемблера для процессора x86, с которым познакомился благодаря отладчику уровня пользователя OllyDbg и дизассемблеру IDA Pro, который использовал в своей книге Крис. Всё, разумеется, было пиратским: и Windows XP, и IDA Pro, и всё остальное. Мне было неловко от того, что другие умеют делать из лицензионных программ пиратские, а я не умею. Я думал, что Кевин Митник уж точно знает, как взламывать программы, и захотел уметь так же.

Первый crackme (программа, созданная специально, чтобы быть взломанной) я взломал где-то за один час. Потом я взломал ещё один crackme, и ещё один, и ещё. Так я дошёл до того, что теперь мог редактировать собственноручно разработанные программы, к чему успешно перешёл. С помощью пиратской версии программы WinHex я редактировал свои программы и смотрел, что будет. Я менял значения констант, команду ADD (сложение) на команду SUB (вычитание), превращал циклы с условием в бесконечные циклы, а условные переходы JE (перейти, если равенство) в безусловные JMP.

Когда я перешёл от взломов к программированию на языке ассемблера, я написал программу, которая меняла команду ADD на SUB прямо во время исполнения, а позже процессор выполнял изменённые команды. Я понял, что теперь могу написать любую программу. Чтобы узнать, что делает такая программа, её было мало прочитать, её нужно было именно запустить. Так я открыл для себя трассировку программ (выполнение программы по одной команде).

Это было волшебно! Я могу, и могу такое! Ай да я, ай да мамин суперхакер, думал я.

На всё тех же сомнительных сайтах с нехорошей рекламой я многое прочёл про сетевые взломы, эксплойты, программы для перебора паролей, уязвимости и т.д. Я думал, что вот-вот взломаю весь мир и поставлю на колени плачущего директора ЦРУ. Я думал.

В процессе прочтения и попутного обучения огонёк во мне снова вспыхнул. Я снова пошёл по темной дорожке старых, восхищавших меня в самом начале пути полузаконных людей. В ночь с субботы на воскресенье, когда я пытался подобрать пароль к одному из FTP-серверов с помощью скачанной из интернета программы для перебора паролей, даже не зная, в какой стране находится сервер и зачем мне вообще к нему доступ, на домашний телефон позвонил неизвестный. Голос в трубке, искажённый ужасными помехами, спросил:

— Здравствуйте, вы дома пользуетесь интернетом?

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

Разработка собственных программ

Будучи испуганным, отрезвлённым и просветлённым, я быстро свернул обратно на светлую дорожку, начав думать, чего же мне ещё надо.

— Что я могу? О, точно. Мне нужна своя база данных, как в фильме про агентов ЦРУ.

Собственная СУБД

Я написал её где-то за неделю, и да, я знаю, дизайнер из меня так себе. Программе нужно было название, данное в какой-нибудь крутой корпорации, и я придумал её — Plexus. Это не база данных, а система управления базой данных (СУБД), работающая с файлами Microsoft Access, поддерживающая шифрование AES-KSM-256, хеширование MD5 и SHA-1, смену пароля пользователя перешифрованием ключа шифрования записей в базе данных, смену изображения, уничтожение данных на диске и поиск по маске.

Режим шифрования KSM я придумал сам: это тот же самый режим ECB, в котором в качестве ключа шифрования следующего блока данных используется hash (контрольная сумма) ключа шифрования предыдущего блока. Программа устанавливалась на компьютер простым копированием файлов из архива, а мне хотелось чего-то настоящего, ТруЪ, и я написал для неё установщик. Позже, когда всё было готово, я вспомнил, что забыл записать «лицензионный» ключ для единственного установщика моей же программы, что заставило меня написать keygen.

Установщик СУБД

Да, я написал генератор «лицензионных» ключей для собственной программы! А откуда, вы думали, разработчики программ берут лицензионные ключи, которые потом продают за 1500 рублей? У них есть свой keygen, а у меня его не было.

Я снова ощутил себя вершителем судеб, пока не нашёл на форумах информацию о том, что такие программы пишут студенты 3-4 курса технических ВУЗов.

Что? Студенты? Я не какой-то там студент! Я Криса Касперски читал!

Мне было мало, и я горел страстью! Мне нужно было творить, писать, создавать! Только ООН могла мне помешать вытворять то, что я хочу. И я написал в среде Delphi 7 целую базу данных различных программ. Например, программу для «склеивания» файлов, которую я написал, пытаясь создать собственный WinRar, что, кстати, не получилось. Пародия на Bourne Shell, за которую мне ужасно стыдно до сих пор.

Программа для склеивания файлов

Программа для склеивания файлов

Патчер файлов

Патчер бинарных файлов

Аналог поиска для Windows

Аналог поиска для Windows XP

В конце концов, я изрядно устал. Мне казалось, что я написал вообще всё, что можно было написать. Мне стало скучно. Мне казалось, что писать программы — это несерьёзно. Я правда так думал!

Переход на язык Си и создание программы для шифрования файлов

Так я начал карабкаться на ступень, на которой уверенно стоят не просто школьники, перебирающие пароли к чужим серверам, а настоящие титаны инженерной мысли мира IT вроде Эрика Реймонда, Ричарда Столлмана и Линуса Торвальдса. Как оказалось, то, что я делал раньше, скорее всего, делали и они. Но сейчас для них это просто мелочь, недостойная внимания.

Писать программы можно научиться за короткое время, но нельзя за короткое время научиться думать точно.

Я даже не знал, что это такое — думать точно. Я даже не думал! Я просто делал и всё. Как карта ляжет. Изучение языка Си открыло мне глаза на настоящее программирование. Я поставил GNU/Linux Debian рядом с уже сотни раз переустановленной Windows XP, установил gcc, cppcheck, Kate и начал постигать самую серьёзную, на мой взгляд, ступень программирования.

Я узнал, что такое динамическое выделение памяти, как устроены языки программирования и чем они отличаются, что такое типизация, указатели и их арифметика, как компилятор превращает исходные тексты в ассемблерный лист и позже собирает из него бинарный файл.

Я понял, почему я устал, почему исписался. Мне не хватало настоящего хардкора, если хотите, Мужъского ТруЪ. Я понял, что в течение нескольких лет я занимался учебными стрельбами, а не реальными баталиями.

Я решил вернуться к своей первой задумке, а именно программе для шифрования файлов. К тому времени я уже перепробовал массу программ для шифрования файлов и удовлетворить мои потребности смогла только GnuPG. Но зачем так сложно? Делать нужно просто, будто для дураков. Первое, что я сделал, это поставил задачу.

Нужно зашифровать файл так, чтобы никто, даже директор ЦРУ, никогда не получил открытый текст, не зная пароля или не имея доступа к ключевому файлу. Пароль же перебрать нельзя, а если и можно, то ждать придётся неисчислимое количество времени. Взлом шифротекста методами криптоанализа должен быть невозможен в принципе.

Задача казалась непосильной, но позже стала тривиальной. Я более или менее изучил язык Си и начал писать ту самую неповторимую программу, которую писал когда-то. Я сразу понял, увидел, что должно получиться.

Меня как будто осенило — старая версия программы была просто не моего уровня.

Я вдруг чётко стал видеть путь и инструменты, которые нужно использовать, чтобы получить максимум, приложив минимум усилий. Но заразился страшной болезнью, которой страдают все программисты, переходя на новый, продвинутый уровень: Сишностью.

Я больше не могу видеть свой старый код. Меня от него трясет и корёжит. Правда. Я считаю, что следующий код хорош, но любой другой просто шлак, даже мой, что заставляет меня писать аккуратно, как будто я программирую ракету для миссии на Нептун! Что со мной? Все нормально. Просто, я расту над собой. Если ты новичок, тебя ждёт то же самое. Всех ждёт!

Первой прочитанной научной книгой стала пиратская версия книги Брюса Шнайера «Прикладная криптография», которую «проглотить» оказалось не так просто. Она оказалась мне не по зубам, и начался тяжёлый подъем в гору просветления.

«Криптография бывает двух типов: криптография, которая помешает читать ваши файлы вашей младшей сестре, и криптография, которая помешает читать ваши файлы людям из правительства».

«Прикладная криптография», Брюс Шнайер.

Я медленно, но верно изучил алгоритмы шифрования, выбрав пять наиболее понравившихся мне, а позже выбрав шестой, Twofish, режимы шифрования, выбрав в итоге CFB (режим обратной связи по шифротексту), за что спасибо учёным, авторам статьи на сайте одного белорусского ВУЗа. Я выбрал всё лучшее на тот момент, но не прочитал главного — как делать не надо. Снова.

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

После её прочтения я понял: безопасность — это процесс, а не инструмент. Дело не в винтовке, дело в профессионализме стрелка. Я понял. Я — плохой стрелок. Это и было ключом ко всему — познать границы своей компетентности и, увидев пятна незнания, взять их штурмом желания, терпения и опыта. Одно пятно за другим.

Сейчас разрабатываемую и поддерживаемую мной программу я использую сам для шифрования файлов размером до 2 ГБ включительно. Мне больше и не надо. Программа свободна и использовать ее может кто угодно и для чего угодно.

Пароль, из которого генерируются ключи шифрования, действительно не перебрать на компьютерах не то что сегодняшнего дня (2021 года), а, скорее всего, вообще никогда. Криптоанализ шифротекстов, насколько я могу судить, неэффективен.

Единственный шанс получить открытый текст из шифротекста без знания пароля — это украсть открытый текст до шифрования. Как и у WinRar, копию которого я когда-то безуспешно пытался написать. Размер самой программы, точнее, её консольной версии, около 90 КБ, графической версии — около 480 КБ.

Программа для шифрования файлов

Консольная версия программы

Программа для шифрования

Графическая версия программы

Такие малютки, но столько мощи! Сегодня такие программы уже не пишут. Ну разве что ребята из проекта GNU. Я действительно горжусь тем, что создал, пройдя по-настоящему тяжёлый и долгий путь. Мне ещё многому предстоит научиться, многое сделать, но я чётко вижу, куда идти и что нужно делать, а, главное, знаю, как не надо делать.

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

Читайте также: