Введение в реверсинг с нуля, используя IDA PRO. Часть 17.

Дата публикации 2 окт 2017 | Редактировалось 8 окт 2017
Мы достигли 17-той части и предполагается, что, по крайней мере, Вы должны были попробовать решить это упражнение.

http://ricardonarvaja.info/WEB/INTRODUCCION AL REVERSING CON IDA PRO DESDE CERO/EJERCICIOS/

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

В этой главе мы будем действовать немного по другому. Я буду распаковывать файл удаленно на виртуальную машину VMWARE WORKSTATION с установленной системой WINDOWS 10.

Главная машина для удаленной отладки, это та, где запущенна IDA. В данном случае, это машина с WINDOWS 7. Но это могут быть любые системы, а не только WINDOWS. Например LINUX, IOS и т.д. где есть установленная IDA.

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

Чтобы было быстрее читать и понимать, отсюда и далее, главную машину, где установлена IDA, я буду называть “ОСНОВНОЙ”, а образ системы WINDOWS 10, который запускаю в VMWARE буду называть “ЦЕЛЕВОЙ”.

1.png

В ЦЕЛЕВОЙ системе находится упакованный файл. Я также должен скопировать из каталога, где у меня установленна IDA в ОСНОВНОЙ системе, сам сервер. Так как моя система WINDOWS 10 - 64-битная, а упакованная программа – 32-битная, то я должен запустить 32-битый сервер. Он называется WIN32_REMOTE.EXE.

2.png

Копируем также исполняемый файл PACKED_PRACTICA_1.EXE в ОСНОВНУЮ систему, чтобы выполнить ЛОКАЛЬНЫЙ анализ и открываем этот файл в ЗАГРУЗЧИКЕ. Я устанавливаю галочку в MANUAL LOAD, для того, чтобы IDA проанализировала файл и загрузила все его секции.

Сейчас мы находимся в ЗАГРУЗЧИКЕ, который показывает мне EP упакованной программы. Пока мы ещё не запускали ОТЛАДЧИК.

3.png

Очень важно не переименовывать IDB файл. Другими словами, это означает, что если исполняемый файл называется PACKED_PRACTICA_1.EXE в ОСНОВНОЙ системе, то при анализе он будет сохранять IDB файл в ту же самую папку, и он должен называться PACKED_PRACTICA_1.IDB, и никак по другому, потому что так начнутся проблемы с распознаванием какой удаленный процесс принадлежит исполняемому файлу анализируемого локально.

Сейчас, давайте запустим удаленный сервер WIN32_REMOTE.EXE в ЦЕЛЕВОЙ системе.

4.png

Этот файл запускает удаленный сервер IDA и будет слушать IP адрес и порт, который мы ему назначим. В моём случае, IP равен 10.80.65.157, а порт 23946. Скопируйте данные, которые сервер показывает для Вас.

Теперь поменяем тип отладчика на REMOTE WINDOWS DEBUGGER.

5.png

В PROCESS OPTIONS я устанавливаю IP адрес и ПОРТ сервера IDA. Т.к. процесс ещё не создан, то мы не сможет подсоединиться к нему с помощью отладчика. Также, нам нужно отлаживать файл с самого начала. Мы должны исправить пути, которые IDA показывает здесь, чтобы они совпадали с расположением исполняемого файла в ЦЕЛЕВОЙ системе.

6.png

В моём случае, распакованный файл в ЦЕЛЕВОЙ системе находится на РАБОЧЕМ СТОЛЕ и полный путь для моей системы будет - C:\USERS\ADMIN\DESKTOP\PACKED_PRACTICA_1.EXE

7.png

Поэтому давайте отредактируем эти три поля для ввода пути.

8.png
Сейчас, если нажмём кнопку START PROCESS, то IDA остановится на EP упакованного файла в РЕЖИМЕ ОТЛАДЧИКА.

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

9.png

Сейчас, в СЕГМЕНТАХ давайте посмотрим на первую секцию кода после заголовка.

В моём случае, я вижу, что она начинается по адресу 0x231000 и заканчивается по адресу 0x238000.

10.png

Если мы просто сделаем SEARCH FOR TEXT, чтобы найти инструкцию POPAD или POPA, в этом случае, найдём ту инструкцию, которая выполняется до перехода в OEP.

11.png
12.png

Здесь, мы уже знаем, что OEP находится по адресу 0x23146E, но я могу найти её по другому. Я устанавливаю BP на ВЫПОЛНЕНИЕ, который охватывает всю первую секцию.

Теперь иду в начало секции по адресу 0x231000.


Здесь я вижу данные, которые принадлежат заголовку. Очевидно, адреса не совпадают из-за рандомизации. IB не равна 0x400000, но VIRTUAL SIZE такой же, как и был, и равен 0x7000 байт, т.е. размер секции в памяти совпадает, так как она начинается по адресу 0x231000, а заканчивается по адресу 0x238000. Это разница и составляет 0x7000 байт.

13.png

Теперь, в начале секции, я устанавливаю BP с помощью F2. В моём случае, это адрес 0x231000 или соответствующий адрес, который на Вашем компьютере имеет размер 0x7000.

14.png

Я удаляю все другие BP. Но оставляю только один этот и нажимая F9, для того, чтобы запустился отладчик.

15.png

Отладчик останавливается здесь и совпадает с адресом, который мы видели ранее, который принадлежит OEP. Сейчас удаляю BP, чтобы исчез красный фон.

16.png

Теперь, делаю правый щелчок в левом нижнем(верхнем?) углу, чтобы ПОВТОРИТЬ АНАЛИЗ.

17.png

В этом случае, отладчик оставляет этот блок таким, как будто это блок того же СТАБА. Поэтому отладчик не поместил префикс SUB_, а оставил префикс как LOC_.

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

18.png

Другими словами, IB в моём случае, находится по адресу 0x230000, а её конец 0x23B000.

19.png

Здесь, я меняю значения в скрипте и запускаю его через FILE → SCRIPT → FILE.

20.png

Отладчик сохраняет дамп в этой папке, так как скрипт запускается на ОСНОВНОЙ машине.

Я открываю этот файл с помощью PEEDITOR и выбираю пункт DUMPFIXER.

21.png

Теперь меняю расширение файла на EXE.

22.png

Вот у него появляется такая же иконка, как и у сжатого файла. Сейчас, открываю SCYLLA в ЦЕЛЕВОЙ системе и копирую туда сдампленный файл PACKED.EXE.

23.png

Пришло время нажать на кнопку IAT AUTOSEARCH.

24.png

Я меняю поле OEP на значение 0x23146E, которое мы нашли.

И вижу, что после нажатия IAT AUTOSEARCH и GET IMPORTS, остаётся только одна НЕДЕЙСТВИТЕЛЬНАЯ запись.

Складывая IB с адресом недействительной записи, получаю

Python>hex(0x230000+0x20D4)
0x2320D4

25.png

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

Видим, что этот указатель имеет ссылки.

26.png

27.png

Теперь посмотрим куда он ведёт.

28.png

Видим, что он заканчивается тем, что приходит в блок с инструкцией RET.

Для нас, настоящих хакеров, это не проблема. Так как указатель ведёт в фиксированное значение программы, которое равно RET, то это не API функция, поэтому на неправильной записи делаю ПРАВЫЙ ЩЕЛЧОК → CUT THUNK для удаления записи из IAT.

29.png

Сейчас, я нажимаю FIX DUMP на PACKED.EXE и у меня получается файл PACKED_SCY.EXE, однако он не запускается. Это происходит потому, что в дампе не перераспределены адреса, которые были созданы во время выполнения, которые не принадлежат IAT и всегда меняются при запуске. Поэтому, я буду удалять рандомизацию. Я открываю PACKED_SCY.EXE в IDA с помощью MANUAL LOAD, загружаю заголовок и перехожу в него.

30.png

В заголовке есть поле DLL CHARACTERISTICS. У Вас значение будет отличаться от нуля, потому что я уже изменил его.

31.png

Из меню EDIT → PATCH PROGRAM → CHANGE WORD меняем этот байт на нуль.

32.png

И потом сохраняем изменения с помощью APPLY PATCHES TO INPUT FILE.

Вот и всё ребята.

33.png

Наш файл из примера теперь распакован. В 18-той части мы начнём его реверсить.

До встрече в 18-той части.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Автор текста: Рикардо Нарваха - Ricardo Narvaja (@ricnar456)
Перевод на английский: IvinsonCLS (@IvinsonCLS)
Перевод на русский с испанского+английского: Яша_Добрый_Хакер(Ростовский фанат Нарвахи).
Перевод специально для форума системного и низкоуровневого программирования - WASM.IN
08.10.2017
Версия 1.0

15 11.214
yashechka

yashechka
Ростовский фанат Нарвахи

Регистрация:
2 янв 2012
Публикаций:
90

Комментарии


      1. DrVirus 2 дек 2022
        I don't know how to edit my earlier comment, so posting a new one. I tried to start with a new seesion today, and to my delight everything worked perfectly. I still don,t understand what mistake I was doing yesterday. I was able to disable the ASLR in dumped unpacked exe by changing "dw field of Dll Characteristics at RVA 0x0156" to 0x0. The final patched file worked flawlessly.
      2. DrVirus 1 дек 2022
        I tried to change the ASLR randomization by changing DLLCharacteristics flag to "dw 0". But the exe cannot be started anyway. The original flag for DLLCharacteristics in IMAGE_OPTIONAL_HEADER section was dw 8140h. But after editing it to as described in tutorial it stops executing. Any suggsetion sregarding this?
      3. yashechka 11 июл 2020
        Кофейник, спасибо тебе что оставляешь коммы, мне будет легче делать видеоуроки.
      4. кофейник 10 июл 2020
        Виртуальная машина не работала (WMWare Workstation 15.5.6 X5690). В Сети пишут, не предусмотрено с этим процессором. Разрулил установкой версии 12 и проблемами, решение которых детально описано в Сети. Получил рабочую виртуальню машину, с последующим апгрейдом до версии 14 и финальной 15. Повреждений в стволе не обнаружил.
        Описаный Нарвахой файл "win32_remote" находится по адресу: папка с установленной программой IDA > dbgsrv > win32_remote
        yashechka, еще раз спасибо за работу.
        yashechka нравится это.
      5. CrawlUp 24 дек 2018
        Танцы с бубном которые позволили подключиться к удалённому серверу, просто так даже и не опишешь. Пока на виртуальной машине в параметрах сети не появился ip адрес 192.168.56.101 и такой же адрес не появился при запуске в удалённом сервере, запуситить отладку не удавалось, лезли какие-то ошибки.
        yashechka нравится это.
      6. CrawlUp 24 дек 2018
        "Could not connect to 169.254.77.70:23946: Сделана попытка выполнить операцию на сокете при отключенной сети."- вот что пишет ida. Виртуальная машина Oracle VirtualBox.
        Хотя нет, немного танцев с бубном и дело пошло, теперь ищем VCRUNTIME140.dll
        yashechka нравится это.
      7. Sloneny 6 янв 2018
        Для пользователей VirtualBox:
        Если IDA плачет горькими слезами, и не может подключиться к виртуалке, а в Output Window пишет
        измените в настройках виртуалки (в разделе сеть) тип подключения на "Виртуальный адаптер хоста". И перезагрузите гостевую систему.
        CrawlUp и yashechka нравится это.
      8. yashechka 15 окт 2017
        [​IMG]

        делаю
      9. tfs_cradle 14 окт 2017
        :popcorm2:
        yashechka нравится это.
      10. yashechka 14 окт 2017
        "Подпишись на Яшу -> Будь в тренде " :lol: :lol: :lol:
        DzenGURU нравится это.
      11. Alexey 14 окт 2017
        Подписаться на новые статьи закоментино. Попробуй подписаться на самого яшу https://wasm.in/members/yashechka.20788/ там есть кнопка, если не сами статьи то возможно будет приходить то что он пишет ссылки на статьи в профайле своем
      12. G0r 9 окт 2017
        Спасибо за перевод. А можно как-нибудь подписаться на твои работы, чтобы при выходе новый главы приходило оповещение на почту, а то, например, я иногда забываю периодически заходить на этот сайт?
        yashechka нравится это.
      13. yashechka 9 окт 2017
        Я не понял? А хто лайкать будет?;)
        DzenGURU нравится это.
      14. yashechka 8 окт 2017
        Увидел ошибку - пиши:yes4:
      15. yashechka 8 окт 2017
        Как быстро идёт время :sorry: Не успел я выложить 16 главу, как нужно уже выкладывать 17-ю. Неделя прошла в лёт. Моей маме сегодня 55, как быстро жизнь идёт :no2:
        RET нравится это.