Они поручили по разнарядке сделать новые скамейки заводу пищевого машиностроения имени Воровского. На этом заводе тогда работал мой отец. Так уж получилось, что именно он, молодой инженер-конструктор, получил задание спроектировать парковую скамейку.
Как оказалось, не нужно было ломать голову, что-то выдумывая. Следовало съездить в областной центр Запорожье, где на улицах уже появились новые красивые скамейки, замерить размеры одной из них и, возвратившись, сделать чертежи. А уж заводские умельцы по этим чертежам собрали бы нужное количество новых произведений садово-паркового искусства.
Мой отец так и сделал: съездил в командировку, представил необходимые чертежи. Завод крутанул свои мощности и произвел требуемое количество изделий по местному заказу. Уже через несколько месяцев мелитопольцы смогли отдыхать на новых парковых скамейках, которые, в самом деле, оказались очень удобными.
То, что сделал в те давние далекие годы мой папенька, сейчас называется учеными словами: «обратная разработка», или же «реверс-инжиниринг».
Примеров реверс-инжиниринга в истории мировой техники — воз и маленькая тележка. «Передирали» все и у всех. Известно, что советский грузовик АМО-3 был почти полной копией американского грузовика AutoCar-SA, а бомбардировщик Ту-4 в конструкторском бюро
В министерстве электронной промышленности СССР приказом министра были запрещены любые рационализаторские предложения. Почему? А потому, что минэлектронпром занимался копированием электронных приборов, чертежи которых разведчики крали в США. А посему шаг вправо, шаг влево от этих чертежей считался нарушением технологической дисциплины и сурово карался. Какая уж тут рационализация!
Не следует думать, что только Советский Союз отличался в этом, мягко говоря, реверс-инжиниринге. Как уже было сказано, крали все и у всех. Автомат Калашникова был настолько прост в конструкции и в производстве, что во многих странах его копировали без лицензии и без разрешения Ижевского завода. Во время Второй мировой войны немцы скопировали и применяли советский 120-миллиметровый миномет. А американцы и англичане, не мучаясь угрызениями совести, скопировали очень удобные немецкие канистры для бензина. Потом то же самое сделала советская промышленность. Этими канистрами, кажется, пользуются до сих пор. Только кто помнит, что они — немецкие?
Китайская индустрия — это тоже всем известно — очень часто базируется именно на грамотной и дотошной обратной разработке. Американские, японские или европейские образцы копировались, производились и продавались по ценам значительно более низким, чем цена оригиналов. Тем и жили. Да и по сию пору живут.
В области же программирования обратная разработка процветала и расцветала еще более пышным цветом. Ведь для того, чтобы скопировать компьютерную программу, даже усилий больших не требуется. А программа, как известно, это набор компьютерных кодов. Эти коды легко проанализировать, а проанализировав, понять алгоритм. Алгоритм же — самое главное в любой компьютерной программе. Появляется возможность захватить know how производителя, так сказать, «малой кровью, могучим ударом». На основе расшифрованного алгоритма можно создать «собственную» версию программы, немного по-другому выглядящую, а значит, как бы и не краденую.
Программный реверс-инжиниринг широко применяется также в такой благородной деятельности, как написание генераторов ключей. Эти небольшие программы позволяют пользоваться бесплатно коммерческими программами, имитируя ввод регистрационных кодов и другие проверки идентичности. Обратная разработка программ применяется и в «мирных целях». На основе исследования кодов компьютерных вирусов совершенствуются антивирусные программы.
Естественно, что законные производители, так или иначе, пытаются противодействовать недозволенному «копированию» своей продукции. Производители одежды, например, чтобы придать уникальность своим изделиям, снабжают их фирменными пуговицами и лейблами, применяют свою, особенную, строчку или вышивают фирменные узоры нитками контрастного цвета.
А программисты-то чем хуже? Они тоже старались изо всех сил скрыть свои секреты от любопытных глаз и шаловливых рук непосвященных. Для этого была изобретена обфускация. Это неудобочитаемое слово происходит от латинского глагола «obfuscare», означающего «затемнять».
Обфускацией называют специальные приемы запутывания кода, которые сохраняют функциональность программы, но затрудняют ее анализ.
Программу, прошедшую через обфускацию, трудно подвергнуть анализу с тем, чтобы понять алгоритм. Конечно, обфускация не делается вручную, а производится с помощью специальных программ — обфускаторов.
Обфускация может применяться разработчиками на всех этапах создания программного обеспечения.
На этапе разработки программы-обфускаторы могут сделать исходный код плохо читаемым: например, записать всю программу в одну строку, заменить «говорящие» имена переменных и функций на абстрактные, убрать все программные комментарии и вставить комментарии бессмысленные. Транслятор успешно обработает такой исходный текст, а вот человеку разобраться в нем будет сложно.
Исполняемый код тоже можно защитить с помощью обфускации. В этом случае обфускатор изменяет порядок программных кодов, перемежает блоки исполняемого кода блоками кода, который никак не связан с исполнением программы. Конечно, в этом случае размер программы сильно раздувается, а скорость ее исполнения замедляется. Поэтому чаще всего проводят обфускацию не всей программы, а только ее критической части, например, того места, в котором происходит распознавание регистрационного кода.
Программы, которые имеют интернет-интерфейс, тоже подвергают обфускации для того, чтобы скрыть алгоритм обработки входной информации или источник получения выходных данных. Для этого определенным образом изменяют код HTML, на котором написаны интернет-страницы. К обфускации такого рода прибегают, например, создатели сайтов банков или финансовых компаний. Создатели порнографических сайтов также заинтересованы в том, чтобы скрыть от посетителя местонахождение «горяченьких» материалов, размещаемых на сайте, и исключить попытки их бесплатного скачивания. Спамеры тоже могут применять обфускацию HTML-кода для того, чтобы спам-фильтры не смогли распознать его как сетевой мусор.
Микеланджело говорил, что прекрасную статую создать нетрудно — надо только отсечь все лишнее. Можно сказать, что те, кто занимается обфускацией, применяют микеланджеловские усилия в противоположном направлении — прикрывают прекрасную статую осколками мрамора, маскируя ее от чужого и жадного взгляда.
Что еще почитать по теме?
С чего начать учиться программированию?
Откуда в программирование пришел термин «дебаг»?
Как научить ребенка программировать? Практические советы
Ох, Тюфелеву рощу пока можно вычеркивать...