Реверс инжинеринг для начинающих

D2

Администратор
Регистрация
19 Фев 2025
Сообщения
4,380
Реакции
0
Что такое реверс-инжиниринг?

Реверс-инжиниринг — это процесс получения скомпилированного двоичного файла и попытки воссоздать (или просто понять) первоначальный способ работы программы. Программист изначально пишет программу, обычно на языке высокого уровня, таком как C++ или Visual Basic (или, не дай Бог, Delphi). Поскольку компьютер по своей сути не говорит на этих языках, код, написанный программистом, собирается в более машинно-специфичный формат, с которым компьютер действительно говорит. Этот код довольно первоначально называется машинным языком. Этот код не очень дружелюбен к человеку, и часто требует больших умственных способностей, чтобы понять, что именно имел в виду программист.

Для чего используется реверс-инжиниринг?

Реверс-инжиниринг можно применять во многих областях информатики, но вот несколько общих категорий:

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

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

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

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

Четвертая категория — оценка безопасности и уязвимостей программного обеспечения. При создании больших (например, операционных систем Windows) реверс-инжиниринг используется, чтобы убедиться, что система не содержит каких-либо серьезных уязвимостей, недостатков безопасности и, честно говоря, чтобы максимально затруднить взлом программного обеспечения.

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

Какие знания необходимы?

Как вы, наверное, догадались, чтобы эффективно заниматься реверс-инжинирингом, необходимо много знаний. К счастью, для того, чтобы «начать» реверс-инжиниринг, не требуется много знаний, и именно здесь я надеюсь пригодиться. При этом, чтобы получить удовольствие от реверсирования и получить что-то из этих туториалов, вам необходимо иметь хотя бы базовые знания понимание того, как работает программа (например, вы должны знать, что делает базовый оператор if…then, что такое массив, и хотя бы видеть программу hello world). Во-вторых, настоятельно рекомендуется ознакомиться с языком ассемблера; Вы можете пройти учебные пособия и без него, но в какой-то момент вам захочется стать гуру в ASM, чтобы действительно знать, что вы делаете. Кроме того, много вашего времени будет посвящено обучению использованию инструментов. Эти инструменты бесценны для реверс-инжиниринга, но также требуют изучения недостатков и особенностей каждого инструмента. Наконец, обратный инжиниринг требует значительного количества экспериментов; играть с различными упаковщиками/защитниками/схемами шифрования, изучать программы, изначально написанные на разных языках программирования (даже Delphi), расшифровывать приемы предотвращения обратного проектирования… список можно продолжать и продолжать. В конце этого урока я добавил раздел «Дальнейшее чтение» с некоторыми рекомендуемыми источниками. Если вы действительно хотите научиться реверсить, я настоятельно рекомендую вам прочитать еще немного.

Какие инструменты используются?

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

1. Дизассемблеры
Дизассемблеры пытаются взять коды машинного языка в двоичном виде и отобразить их в более удобном формате. Они также экстраполируют данные, такие как вызовы функций, передаваемые переменные и текстовые строки. Это делает исполняемый файл более похожим на удобочитаемый код, а не на набор связанных вместе чисел. Существует множество дизассемблеров, некоторые из которых специализируются на определенных вещах (например, двоичные файлы, написанные на Delphi). Чаще всего выбор сводится к тому, который вам наиболее удобен. Я всегда работаю с IDA (доступна бесплатная версия http://www.hex-rays.com/), а также с парой менее известных, которые помогают в конкретных случаях.

2. Отладчики
Отладчики — это хлеб с маслом для реверс-инженеров. Сначала они анализируют двоичный код, подобно дизассемблерному отладчику, а затем позволяют реверсору пошагово выполнить код, выполняя по одной строке за раз и исследуя результаты. Это неоценимо для понимания того, как работает программа. Наконец, некоторые отладчики позволяют изменять определенные инструкции в коде, а затем запускать их снова с этими изменениями. Примерами отладчиков являются Windbg и Ollydbg. Я почти исключительно использую Ollydbg (http://www.ollydbg.de/), за исключением случаев отладки двоичных файлов режима ядра, но мы вернемся к этому позже.

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

4. PE и программы просмотра/редактирования ресурсов

Каждый двоичный файл, предназначенный для запуска на компьютере с Windows (и Linux, если уж на то пошло), имеет в начале очень специфический раздел данных, который сообщает операционной системе, как настроить и инициализировать программу. Он сообщает ОС, сколько памяти ей потребуется, какие библиотеки поддержки DLL программе необходимо заимствовать, информацию о диалоговых окнах и тому подобное. Это называется переносимым исполняемым файлом, и все программы, предназначенные для работы в Windows, должны иметь его.

В мире реверс-инжиниринга такая структура байтов становится очень важной, поскольку она дает реверсеру необходимую информацию о двоичном файле. В конце концов, вы захотите (или вам нужно) изменить эту информацию, либо чтобы заставить программу делать что-то другое, чем то, для чего она была изначально придумана, либо изменить программу НАЗАД на то, чем она была изначально (например, до того, как защитник сделал код действительно сложным чтобы его понять). Существует множество вьюверов и редакторов PE. Я использую CFF Explorer (http://www.ntcore.com/exsuite.php) и LordPE (http://www.woodmann.com/collaborative/tools/index.php/LordPE), но вы можете свободно использовать как вам удобно.

Большинство файлов также имеют разделы ресурсов. К ним относятся графика, элементы диалога, пункты меню, значки и текстовые строки. Иногда можно развлечься, просто просматривая (и изменяя ;) разделы ресурса. В конце этого урока я покажу вам пример.

5. Инструменты мониторинга системы

При реверсе программ иногда важно (а при изучении вирусов и вредоносных программ крайне важно) увидеть, какие изменения приложение вносит в систему; создаются или запрашиваются ключи реестра? созданы ли файлы .ini? создаются ли отдельные процессы, возможно, чтобы помешать обратному проектированию приложения? Примерами инструментов мониторинга системы являются procmon , regshot и Process hacker. Мы обсудим это позже в уроке.

6. Разные инструменты и информация
Есть инструменты, которые мы подберем по пути, такие как скрипты, распаковщики, идентификаторы упаковщиков и т. д. Также в этой категории находится своего рода ссылка на Windows API. Этот API огромен и порой сложен. При реверс-инжиниринге чрезвычайно полезно точно знать, что делают вызываемые функции.

7. Пиво.

Так что давайте уже займемся этим!


Несмотря на то, что мы начинаем с очень небольшими знаниями, я хотел дать вам хотя бы немного попробовать реверс в этом первом уроке. В это руководство я включил средство просмотра/редактирования ресурсов (см. папку «Файлы») под названием XN Resource Editor. Это бесплатное программное обеспечение. По сути, эта программа позволяет вам видеть раздел ресурсов в exe-файле, а также изменять эти ресурсы. Я обнаружил, что с ними можно получить массу удовольствия — они позволяют вам изменять меню, значки, графику, диалоги и многое другое в программах. Давайте попробуем сами…

Сначала запустите XN. Нажмите на значок загрузки вверху, выберите Windows\System32\ и загрузите Calc.exe (расположение Windows по умолчанию может отличаться). Вы должны увидеть несколько доступных папок:

1699699908401.png



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

Нажмите на плюс рядом с пунктом «Меню». После этого вы увидите папку с номером в качестве имени. Это идентификатор, который Windows будет использовать для доступа к этому ресурсу в программе. Откройте и эту папку. Теперь вы должны увидеть значок «Английский (США)» или что-то в этом роде. Если вы нажмете на него, вы увидите диаграмму того, как будет выглядеть меню (вы даже можете щелкнуть по нему — оно работает так же, как настоящее меню).

1699699923709.png



Теперь нажмите на пункт меню «Научный». Поле «Заголовок» должно измениться на «&Научный». Амперсанд сообщает вам, что такое «горячая клавиша», в данном случае «S». Если бы вместо этого мы хотели, чтобы «е» была горячей клавишей, это выглядело бы так: «Научный». Итак, вам уже не нравятся встроенные горячие клавиши для вычислений? Просто поменяйте их!! Но давайте поступим по-другому. В поле «Заголовок» замените &Scientific на «&Nerd». Теперь это изменит параметр меню на «Nerd» и будет использовать горячую клавишу «N» (я просмотрел другие параметры в меню, чтобы пользователь не использовал другой пункт меню «N» в качестве горячей клавиши). Вы должны сделать это для всех пунктов меню. Теперь перейдите в «Файл» (в ресурсе XN) и выберите «Сохранить как…». Сохраните новую версию Calc под другим именем (и желательно в другом месте), а затем запустите ее.

1699699937720.png



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

1699699947906.png



Как видите, нет предела возможностям.

До следующего раза…

-R4ndom

пс. Спасибо Lena151 за то, что показали мне путь, ASL, Snaker, Qwerton и Jibz за то, что показали мне секреты, а также Олли, Yoda-mmi, uCF и Колину Уилсону за то, что дали мне инструменты.


Для дальнейшего чтения
1. Язык ассемблера. Язык ассемблера для компьютеров на базе процессоров Intel — де-факто книга по нему. Вы также можете посетить некоторые веб-сайты, которые предлагают огромное количество загрузок, инструкций , примеров кода и помощи. Еще один хороший ресурс — «Искусство Ассемблера» . Я включу это в одно из следующих руководств, но вы также можете Скачать
View hidden content is available for registered users!
 
Сверху Снизу