• XSS.stack #1 – первый литературный журнал от юзеров форума

Статья Преобразование двоичных файлов прошивки (Ghidra)

NokZKH

Переводчик
Забанен
Регистрация
09.02.2019
Сообщения
99
Реакции
121
Пожалуйста, обратите внимание, что пользователь заблокирован
Эта небольшая статья покажет вам, как анализировать двоичный код прошивки в Ghidra.

Подготовка к работе в Binwalk
Недавно я исследовал несколько старых образов Cisco IOS. Эти образы представлены в виде одного двоичного двоичного объекта без каких-либо заголовков ELF, Mach-o или PE.

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

В моем случае, всё тяжело, так как Ghidra не имеет ни малейшего представления, какой тип ISA требуется для его разборки и декомпиляции.

Ниже приведено несколько вещей, которые я узнал, пытаясь декомпилировать образ Cisco IOS в Ghidra.

Сначала я должен был извлечь изображение. Я достал образ прошивки с коммутатора, который я недавно купил через TFTP. Оказывается, что первые 112 байтов являются своего рода фирменным заголовком Cisco, и они для нас бесполезны. Нам нужно извлечь интересный архив bzip2. Самый простой способ сделать это - binwalk:

Код:
binwalk -eM c3750-ipservicesk9-mz.122-50.SE3.bin

Это создаст каталог _c3750-ipservicesk9-mz.122-55.SE.bin.extracted, в котором будет файл с именем 70.

Теперь нам нужно выяснить процессор ISA. Для этого мы снова используем binwalk:

Код:
binwalk -m /usr/local/lib/python2.7/dist-packages/binwalk/magic/binarch _c3750-ipservicesk9-mz.122-55.SE.bin.extracted / 70

Команда выведет много полезного, поэтому давайте посмотрим на результат:

Код:
DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
24            0x18            PowerPC big endian instructions, function prologue
1360          0x550           PowerPC big endian instructions, function epilogue
1364          0x554           PowerPC big endian instructions, function epilogue
1372          0x55C           PowerPC big endian instructions, function epilogue
1380          0x564           PowerPC big endian instructions, function epilogue
1388          0x56C           PowerPC big endian instructions, function prologue
1612          0x64C           PowerPC big endian instructions, function epilogue
1648          0x670           PowerPC big endian instructions, function epilogue
1656          0x678           PowerPC big endian instructions, function prologue
3224          0xC98           PowerPC big endian instructions, function epilogue
3232          0xCA0           PowerPC big endian instructions, function prologue
6772          0x1A74          PowerPC big endian instructions, function epilogue
6780          0x1A7C          PowerPC big endian instructions, function prologue
[...]

Здесь, мы видим, что в двоичном файле есть функции Big Endian PowerPC, которые являются прологами, за которыми следуют эпилоги. (Вспоминаем Русский язык) Это показатель того, что образ прошивки ISA - это PowerPC Big Endian.



Теперь, когда мы знаем ISA, нам нужно знать смещение текстовой базы и смещение базы данных в образе прошивки. Лучший способ понять это - загрузить прошивку на фактическое устройство и загрузить.


Чтобы получить base адрес (fileOffset), запустите команду show version на коммутаторе Cisco:

Код:
Switchy>
Switchy>enable
Password:
Switchy#show version
Cisco IOS Software, C3750 Software (C3750-IPSERVICESK9-M), Version 12.2(55)SE, RELEASE SOFTWARE (fc2)
Technical Support: http://www.cisco.com/techsupport
Copyright (c) 1986-2010 by Cisco Systems, Inc.
Compiled Sat 07-Aug-10 22:45 by prod_rel_team
Image text-base: 0x01000000, data-base: 0x02F00000

ROM: Bootstrap program is C3750 boot loader
BOOTLDR: C3750 Boot Loader (C3750-HBOOT-M) Version 12.2(44)SE5, RELEASE SOFTWARE (fc1)
[...]

Это выдаст строку: Image text-base: 0x01000000, data-base: 0x02F00000,
Оба эти адреса важны, поэтому запишите их и сохраните на потом.

Гидра
Теперь откройте файл 70 в гидре. Опять же, поскольку нет стандартизированного двоичного формата для двоичного файла, вам придется импортировать файл как Raw Binary и затем установить архитектуру кода на PowerPC Big Endian 4xx, Далее, нажмите кнопку параметров и установите для базы смещения изображения значение, которое мы получаем из команды show version: 0x01000000. Затем выполниет импорт.

1.png


Гидра преобразует двоичный файл, и когда процесс завершится, строки будут преобразованы в метки внутри декомпилятора. Это связано с тем, что области меток в памяти помечены в гидре как Read/Write. Мы преобразуем эти метки в строки для того, чтобы их было проще использовать.

2.png


В Гидре перейдите к адресу базы данных 0x02f00000 - 0x01000000. В этой части двоичного объекта находятся все строки, на которые есть ссылки в коде. Фактическое местоположение, где начинаются эти строки, немного ниже, чем 0x02f00000 - 0x01000000. Нам нужно будет вручную проверить двоичный файл, чтобы увидеть, где они находятся. Скорее всего, это связано с некоторым смещением в текстовой базе, о котором я просто не знаю. Я придумал место DAT_02de33d8 (0x02de33d8). Мы не обязательно должны найти точное местоположение.

3.png


Откройте Window->Memory Map и нажмите кнопку Split в правом верхнем углу. Разделить файл вам нужно будет по адресу 0x02f00000 базы данных, а затем пометить область памяти базы данных как Read Only.

4.png


5.png


После того, как вы выполнили эти шаги, метки должны преобразоваться в строки, и вы сможете легко начать свою деятельность:smile6:.

6.png
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх