что такое реверс инжиниринг
Реверс-инжиниринг для самых маленьких: взлом кейгена
Вначале было слово. Двойное
Открыв файл кейгена в Ida, видим список функций.
Проанализировав этот список, мы видим несколько стандартных функций (WinMain, start, DialogFunc) и кучу вспомогательных-системных. Все это стандартные функции, составляющие каркас.
Пользовательские функции, которые представляют реализацию задач программы, а не ее обертку из API-шных и системных вызовов, дизассемблер не распознает и называет попросту sub_цифры. Учитывая, что такая функция здесь всего одна — она и должна привлечь наше внимание как, скорее всего, содержащая интересующий нас алгоритм или его часть.
Давайте запустим кейген. Он просит ввести две 4-значных строки. Предположим, в функцию расчета ключа отправляются сразу восемь символов. Анализируем код функции sub_401100. Ответ на гипотезу содержится в первых двух строках:
Вторая строка недвусмысленно намекает нам на получение аргумента функции по смещению 8. Однако размер аргумента — двойное слово, равное 4 байтам, а не 8. Значит, вероятнее всего за один проход функция обрабатывает одну строку из четырех символов, а вызывается она два раза.
Вопрос, который наверняка может возникнуть: почему для получения аргумента функции резервируется смещение в 8 байт, а указывает на 4, ведь аргумент всего один? Как мы помним, стек растет вниз; при добавлении в стек значения стековый указатель уменьшается на соответствующее количество байт. Следовательно, после добавления в стек аргумента функции и до начала ее работы в стек добавляется что-то еще. Это, очевидно, адрес возврата, добавляемый в стек после вызова системной функции call.
Найдем места в программе, где встречаются вызовы функции sub401100. Таковых оказывается действительно два: по адресу DialogFunc+97 и DialogFunc+113. Интересующие нас инструкции начинаются здесь:
В чем смысл этих операций? Выяснить очень просто даже на практике, без теории. Поставим в отладчике брейкпойнт, например, на инструкции push eax (перед самым вызовом подфункции) и запустим программу на выполнение. Кейген запустится, попросит ввести строки. Введя qwer и tyui и остановившись на брейкпойнте, смотрим значение еах: 72657771. Декодируем в текст: rewq. То есть физический смысл этих операций — инверсия строки.
Теперь мы знаем, что в sub_401100 передается одна из исходных строк, перевернутая задом наперед, в размере двойного слова, целиком умещающаяся в любом из стандартных регистров. Пожалуй, можно взглянуть на инструкции sub_401100.
Следующая команда LEA ecx, [eax+eax*8] элегантно и непринужденно умножает еах на 9 и записывает результат в есх. Затем это значение копируется в edx и сдвигается вправо на 13 разрядов: получаем 73213 в еdx и E6427B23 в есх. Затем — снова ксорим есх и edx, записывая в есх E6454930. Копируем это в еах, сдвигаем влево на 9 разрядов: 8А926000, затем инвертируем это, получая 756D9FFF. Прибавляем это значение к регистру есх — имеем 5BB2E92F. Копируем это в еах, сдвигаем вправо аж на 17 разрядов — 2DD9 — и ксорим с есх. Получаем в итоге 5BB2C4F6. Затем… затем… что там у нас? Что, все.
Итак, мы сохраняем это значение в область памяти по смещению var_4, загружаем из стека состояния регистров, снова берем из памяти итоговое значение и окончательно забираем из стека оставшиеся там состояния регистров, сохраненные в начале. Выходим из функции. Ура. впрочем, радоваться еще рано, пока что на выходе из первого вызова функции мы имеем максимум — четыре полупечатных символа, а ведь у нас еще целая необработанная строка есть, да и эту еще к божескому виду привести надо.
Перейдем на более высокий уровень анализа — от дизассемблера к декомпилятору. Представим всю функцию DialogFunc, в которой содержатся вызовы sub_401100, в виде С-подобного псевдокода. Собственно говоря, это дизассемблер называет его «псевдокодом», на деле это практически и есть код на С, только страшненький. Глядим:
Эпилог
bash-реализация пресловутой sub_401100:
Основная функция кейгена:
Что такое реверс-инжиниринг?
Реверс-инжинирингом называют процесс, при котором физический объект разбирают на части и измеряют. Таким образом можно понять, как он был изготовлен, из каких компонентов состоит и как работает. Объектом может быть примерно всё: от огромного авианосца или инженерного сооружения вплоть до крошечных элементов часового механизма.
Введение
В отличие от традиционного процесса проектирования, где необходимо начинать с нуля и создавать абсолютно новый продукт, реверс-инжиниринг стартует с анализа имеющейся установки или компонента и движется в обратную сторону, разбирая объект на составные части. Это можно делать как физически, так и в цифровом формате: деталь за деталью, часть за частью, слой за слоем или шаг за шагом.
Целью реверс-инжиниринга обычно является создание 3D-модели, которую можно использовать в CAD-приложениях. При правильном подходе реверс-инжиниринг дает возможность применять полученную информацию о конструкции объекта для решения целого ряда задач:
Как получить данные для реверс-инжиниринга
3D-сканирование снятого с производства поворотного круга с помощью Artec Eva. Впоследствии 3D-сканы экспортировали в программу для реверс-инжиниринга Geomagic Design X и перевели их в цельную модель, которую затем использовали для производства аналогичной детали.
Хотя время от времени, чтобы получить данные для реверс-инжиниринга, используются другие методы (как аналоговые, так и цифровые), всё же самыми популярными на сегодняшний день являются 3D-сканеры, координатно-измерительные машины и КТ-сканирование. В зависимости от сферы применения у каждого метода есть свои плюсы и минусы. Многое определяется бюджетом, опытом работы с выбранной технологией и временем, выделенным на реализацию проекта.
Полигональная 3D-модель поворотного круга, созданная на основе сканов Artec Eva
Готовая к реверс-инжинирингу CAD-модель поворотного круга
КТ-сканирование
КТ-сканирование — это эффективный способ провести измерение как внешней, так и внутренней поверхности объекта. КТ считается популярным инструментом медицинской диагностики. Однако этот метод также может быть подходящим решением для реверс-инжиниринга (в определенных ситуациях и для определенных сфер применения). Компьютерный томограф собирает информацию о форме объекта с помощью рентгеновского излучения. Поскольку рентгеновские лучи проходят сквозь объект, можно не беспокоиться о том, как лучше его расположить. Рентген может «увидеть» все внутренние, закрытые участки, например, поры и другие полости. Излучение в виде конусов (либо срезов) проходит сквозь объект; собираемые данные формируются в слои и собираются в цельную 3D-модель.
Промышленный компьютерный томограф EasyTom. Изображение предоставлено компанией CyberOptics Corporation
Однако у томографов тоже есть недостатки. Поскольку для анализа детали они используют радиацию, сканируемый объект должен помещаться внутри специальной камеры томографа (чтобы рентгеновские лучи не могли проникнуть наружу и навредить оператору, эта камера полностью герметичная). Это ограничение не позволяет оцифровывать большинство объектов среднего и крупного размера.
В то время как преимуществом томографа является возможность оцифровывать как внешние, так и внутренние поверхности, эта технология подходит только для сканирования ограниченного числа промышленных объектов.
Кроме того, что цена на надежный томограф может достигать 250 000 долларов США и даже больше, а также что для работы с ним требуются специально обученные операторы, полученные таким образом сканы металлических объектов и даже деталей с металлическими компонентами могут содержать большое количество шума. Это связано с тем, что металл поглощает и рассеивает рентгеновские лучи, что значительно снижает точность сканов. Металлы с низкой плотностью (например, алюминий) сканировать намного проще, чем, например, сталь.
В идеале объект должен быть небольшого размера, состоять из пластика или из металла низкой плотности. В противном случае КТ-сканирование может потребовать несколько дополнительных часов на обработку сканов, только чтобы удалить артефакты и попытаться восстановить точные размеры объекта. Есть вероятность, что вы вообще не сможете оцифровать деталь, если она имеет неподходящий размер или плотность материала.
Контактное измерение (координатно-измерительные машины)
Координатно-измерительные машины (КИМ) отличаются исключительной точностью полученных данных и подходят как для контроля качества, так и для реверс-инжиниринга. Они используют заранее запрограммированные или контролируемые оператором датчики, которые записывают серию XYZ-координат массива точек на поверхности объекта, а затем шаг за шагом реконструируют его видимую геометрию.
Два инженера проверяют компонент производственной установки с помощью КИМ
При высокой стоимости оборудования и сопутствующих расходах КИМ может быть эффективным решением для съемки объектов различного размера, выполненных из разных материалов.
Большинство КИМ представляют собой очень тяжелые устройства, которые обычно устанавливаются в одном помещении, откуда их очень сложно (а иногда даже невозможно) транспортировать в другой цех или компанию, если вдруг возникает такая необходимость. Из-за этого КИМ невозможно отвезти к клиенту, чтобы отсканировать объект там, где ему удобно, или же отправиться с такой машиной в другую страну (конечно, если необходимое качество данных не может обеспечить портативная КИМ). Кроме того, для работы с таким оборудованием требуются специально обученные операторы, а для настройки и перепрограммирования необходимо довольно много времени. Помимо этого, КИМ нужно тщательно оберегать от случайных ударов, толчков и вибраций, которые могут полностью сорвать проект, если останутся незамеченными.
Контакт с поверхностью гарантирует исключительную точность 3D-данных, собираемых датчиком КИМ. Однако есть и недостатки: данные собираются с низкой скоростью, машина не способна анализировать участки поверхности, до которых не может добраться датчик, существует риск серьезно повредить некоторые хрупкие объекты и т. п.
Поскольку самые распространенные типы датчиков КИМ непрерывно соприкасаются с поверхностью измеряемого объекта, стоит упомянуть и потенциальный риск повреждений и неточностей. Существует очень много материалов, которые могут повреждаться из-за воздействия датчика: на их поверхности могут появляться царапины, потертости или шероховатости. Риск деформации абсолютно недопустим при работе с очень дорогими или бесценными объектами, включая музейные экспонаты, раритеты из частных коллекций и др.
Если говорить о точности, то при контакте с такими мягкими поверхностями, как резина или силикон, датчик может легко деформировать объект, что в лучшем случае приведет к получению неточных данных, а в худшем — к необратимому повреждению. И даже это еще не всё. Если измеряемый объект имеет углубления или труднодоступные участки, а датчик КИМ не может до них добраться, то все эти элементы придется воссоздавать вручную в программе САПР, а значит, будут отклонения от оригинала.
3D-сканирование
Для сотен тысяч пользователей во всем мире профессиональные 3D-сканеры всех типов (настольные, портативные и устанавливаемые на штатив) являются надежным решением для реверс-инжиниринга и других задач. В то время как томографы и КИМ имеют высокую цену, практически лишены мобильности и требуют солидного опыта работы, лучшие 3D-сканеры отличаются противоположными качествами.
Сканирование с помощью структурированной подсветки
3D-сканеры на основе технологии структурированной подсветки снимают объект путем направления на его поверхность пучка света с определенным паттерном. Когда свет возвращается к датчикам сканера, устройство анализирует искажения паттерна, возникшие при контакте с поверхностью, и преобразует их в точные цифровые копии объекта в программе этого сканера. Такая цифровая копия в формате полигональной 3D-сетки может затем использоваться для создания CAD-модели, используемой для реверс-инжиниринга этого объекта.
3D-сканирование днища Volvo XC90 с помощью Artec Leo для реверс-инжиниринга выхлопной системы кроссовера
Одним из главных преимуществ использования 3D-сканеров на базе технологии структурированной подсветки является высокая скорость съемки. В отличие от КИМ или фотограмметрии, новейшие профессиональные 3D-сканеры со структурированной подсветкой могут за считанные минуты оцифровывать даже крупные объекты, причем с субмиллиметровой точностью и без контакта с поверхностью. В зависимости от модели сканера, луч света, который вы направляете на объект в процессе оцифровки, будет снимать от 1 миллиона до 3 миллионов точек в секунду.
Обработка скана ходовой части Volvo XC90 в Artec Studio
При работе с 3D-сканером на базе технологии структурированной подсветки вы сразу видите результаты съемки на экране ноутбука или сканера и можете рассмотреть каждый оцифрованный участок или область. Если что-то пропустили, то можно просто сделать еще одно-два движения сканером, чтобы заполнить прогалы.
Наконец, 3D-сканеры со структурированной подсветкой совершенно безопасны в использовании: они не вредят ни оператору, ни тем, кого он снимает. Это одна из главных причин, по которой такие 3D-сканеры широко используются в сфере здравоохранения.
Лазерные сканеры для крупных объектов и панорам
Устанавливаемые на штатив лазерные 3D-сканеры (лидары) можно разделить на две категории: времяпролетные и фазовые. Первые направляют лазерный луч на объект или площадку, на которой находятся несколько объектов, а затем высчитывают точное расстояние до него, фиксируя время, за которое свет вернулся к датчику сканера. Датчик также анализирует интенсивность излучения.
Фазовые лидары направляют равномерный луч лазера в нескольких разных фазах. Когда луч возвращается обратно к датчику сканера, изменения света анализируются специальными алгоритмами обработки и используются для определения точного расстояния между сканером и снимаемым объектом и/или площадкой.
Подготовка устанавливаемого на штатив устройства Artec Ray для 3D-сканирования палубы плавучей платформы
На основе полученных данных создается цифровое изображение объекта или панорамы в виде облака точек с высоким разрешением. Затем эти облака точек можно перевести в полигональные сетки с помощью программы для сканирования. 3D-сетки можно использовать в самых разных целях, включая создание CAD-моделей для реверс-инжиниринга, виртуальные транспарентные модели, поэтажные планы зданий и т. п.
Лазерные 3D-сканеры с увеличенным рабочим расстоянием могут легко оцифровывать крупные и даже огромные объекты и панорамы, причем делают это с невероятной точностью. Лучшие сканеры этого типа имеют рабочее расстояние от одного до 100+ метров. Они используются для создания метрологически точных 3D-моделей автомобилей, реактивных самолетов, суперъяхт и даже целых заводских цехов.
Благодаря надежному ПО для 3D-сканирования данные с лазерных сканеров с увеличенным радиусом действия можно легко объединить со сканами портативных 3D-устройств, чтобы создать цельную 3D-модель, в которой не будет пропущен ни один важный элемент объекта или панорамы. Хорошим примером может послужить реверс-инжиниринг современного пассажирского самолета с помощью лазерного сканера, который отснял конструкцию воздушного судна, и портативного 3D-сканера, который оцифровал приборную панель и сложные детали в кабине пилотов и салоне.
Простота использования, непревзойденные возможности сканирования
Настольные, портативные 3D-сканеры со структурированной подсветкой и лазерные устройства с увеличенным рабочим расстоянием настолько просты в использовании, что даже студенты всего за несколько часов могут научиться оцифровывать и крупные, и мелкие объекты. Именно благодаря портативности их можно использовать в помещении, на улице и вообще там, где это удобно клиенту (как бы далеко ни пришлось везти сканер).
По сравнению с томографам и КИМ, использование которых подразумевает значительные временные затраты, настольные и портативные 3D-сканеры могут оцифровать те же объекты в разы быстрее, что существенно снижает нагрузку на оператора и повышает продуктивность. Устанавливаемые на штатив лазерные сканеры еще более удобны в использовании: вы просто ставите штатив в нужное место и запускаете сканирование.
3D-сканеры являются незаменимыми инструментами для большинства задач, связанных с реверс-инжинирингом. Лучшие сканеры отличаются высокой скоростью работы, безопасностью и простотой использования. Они способны с субмиллиметровой точностью оцифровывать самые разные объекты (от мелких до крупных).
Чтобы полностью реконструировать всю поверхность объекта, включая углубленные участки и компоненты, при необходимости можно отсканировать их дважды.
Итак, профессиональные 3D-сканеры (настольные, портативные и лазерные с увеличенным радиусом действия) являются надежным решением для реверс-инжиниринга объектов самого разного плана: от кольца с бриллиантом вплоть до таких объектов, как тяжелая техника, самолеты и здания.
Реверс-инжиниринг
Проводим обратное проектирование – разработку 3D моделей и чертежей по имеющимся деталям и готовым изделиям.
Реверсивный инжиниринг – это процесс копирования изделия по готовому образцу. Подразумевает воссоздание конструкторской документации, по которой в дальнейшем можно изготовить аналогичное изделие.
Реверс изделия и детали
Стоимость реверс-инжиниринга зависит от сложности изделия и наличия исходных данных.
Реверс-инжиниринг изделий без механизмов
Пример изделий без механизмов: уличная мебель, мангал, корпус прибора.
Обратное проектирование будет заключаться в следующих этапах работ:
Реверс-инжиниринг механизмов
Мы разрабатываем КД на устройства и механизмы различной сложности: от машины для мойки бутылок до испытательного стенда.
Стоимость и срок разработки зависит не только от сложности самого изделия, но и в первую очередь от наличия исходных данных, подробного ТЗ, а также инфрмации о технологии работы данного механизма.
Если в качестве исходных данных на разработку, например, станка, имеются только картинки из Интернета и примерное понимание того результата, который должен приносить механизм, процесс разработки будет включать в себя много творческой составляющей конструктора, много итераций, чтобы получить нужный результат, и необходимость изготовления не одного опытного образца.
Наиболее приемлемый для обратного инжиниринга вариант – наличие самого механизма, плюс технолог, который до тонкостей знает все особенности его работы, проблемы и способы их устранения. И даже в этом случае реверс-инжиниринг сложного механизма – это практически разработка изделия с нуля, с учетом некоторого облегчения задачи благодаря тому, что некоторые технические решения можно подсмотреть в готовом изделии.
Этапы реверс-инжиниринга механизма:
Особенности механизмов, влияющие на сложность работ по обратному инжинирингу:
1. Наукоемкость
Зачастую перед выпуском того или иного станка, устройства, прибора, над заложенными в него технологиями работали целые НИИ, и воспроизведение этих технологий может потребовать не меньшего объема исследований.
2. Наличие большого количества разных систем – электрической, гидравлической, пневматической, магнитной и пр.
По каждой из этих систем требуется отдельный специалист, и получается, что данная работа может быть выполнена только коллективом конструкторов, что сразу влияет на стоимость разработки.
3. Накопление погрешностей при копировании деталей.
Погрешность появляется при самых высокоточных способах измерения. 3д сканирование даст погрешность около 30-100 микрон, ручное образмеривание за счет человеческого фактора может дать погрешность чуть выше. При большом количестве деталей погрешность накапливается, что в итоге сказывается на функциях изделия.
4. Авторские права
Есть еще немаловажный фактор обратного инжиниринга – нарушение авторских прав правообладателя. Копируемые изделия, как правило, имеют зарегистрированную торговую марку или торговый знак, в них могут быть применены запатентованные узлы или технологии ноу-хау. Прямое копирование может повлечь в дальнейшем проблемы с законом. Поэтому при обратном инжиниринге стараются уходить от прямого копирования и разрабатывать новые изделия на основе аналогов, внедряя туда усовершенствования и избегая запатентованных узлов.
Резюме
Качественное и быстрое воссоздание сложного изделия по образцу возможно при наличии хорошего ТЗ, полных исходных данных, самого изделие в наличии и специалиста, разбирающегося в технологии его работы.
Обратный инжиниринг
Обра́тная разрабо́тка (обратный инжиниринг, реверс-инжиниринг; англ. reverse engineering ) — исследование некоторого устройства или программы, а также документации на них с целью понять принцип его работы и, чаще всего, воспроизвести устройство, программу или иной объект с аналогичными функциями, но без копирования как такового.
Применяется обычно в том случае, если создатель оригинального объекта не предоставил информации о структуре и способе создания (производства) объекта. Использование обратной разработки может противоречить закону об авторском праве и патентному законодательству.
В настоящее время под словами «reverse engineering» чаще всего понимается т. н. «clean room reverse engineering», то есть процесс, при котором одна группа разработчиков анализирует машинный код программы (в сленге хакеров для этого процесса используется также выражение «обратный инжиниринг» или «реверсный инжиниринг»), составляет алгоритм данной программы на псевдокоде, либо, если программа является драйвером какого-либо устройства, составляет исчерпывающие спецификации интересующего устройства. После получения спецификаций другая группа разработчиков пишет собственный драйвер на основе полученных спецификаций или алгоритмов. Такой подход позволяет избежать обвинений в нарушении авторских прав на исходную программу, так как по законам, к примеру в США, подпадает под понятие «fair use», то есть добросовестного использования оригинальной программы. Результат обратной разработки редко идентичен оригиналу, что и позволяет избежать ответственности перед законом.
Содержание
Сферы применения обратной разработки
Электроника
Копирование различных электронных блоков без фактической разработки. Известно, что часть советской цифровой электроники копировалась. Например, американская серия интегральных схем 74 и её советский аналог К(Р)155.
Ещё один пример обратной разработки — создание компанией AMD процессора Intel 80386.
Программное обеспечение
С развитием Интернета популярные операционные системы и программы всё интенсивнее исследуются на предмет обнаружения в них уязвимостей или т. н. дыр. В дальнейшем найденные дыры могут использоваться для получения несанкционированного доступа к удалённому компьютеру или компьютерной сети.
Одним из широко известных примеров обратной разработки является исследование IBM, ставшее серьёзным шагом на пути развития производства IBM-совместимых компьютеров сторонними производителями. Создание сервера GNU/Linux и работающего с серверами на базе ОС Microsoft Windows) также потребовало обратной разработки используемого SMB.
Обратная разработка программного обеспечения производится с помощью следующих методик.
Базы данных
может использоваться при создании реляционной модели базы данных.
Промышленность
Обратная разработка продукта конкурента с целью узнать его устройство, принцип работы и оценить возможности создания аналога.
Военная промышленность
Самыми известными фактами обратной разработки во время второй мировой войны являлись:
Для анализа исходного кода
Существуют программы, которые предоставляют как возможность восстановления (обратный, reverse) по исходному коду общего системного проекта (классы, связь между ними и т.п.), так и прямой генерации исходного кода на основе созданного проекта (функциональных блоков бизнес-процесса):