Пожалуйста, обратите внимание, что пользователь заблокирован
Эта небольшая статья покажет вам, как анализировать двоичный код прошивки в Ghidra.
Подготовка к работе в Binwalk
Недавно я исследовал несколько старых образов Cisco IOS. Эти образы представлены в виде одного двоичного двоичного объекта без каких-либо заголовков ELF, Mach-o или PE.
По аналогии, как я исследую образы Cisco IOS, в этом примере, вы также можете использовать этот способ анализа к другим образам.
В моем случае, всё тяжело, так как Ghidra не имеет ни малейшего представления, какой тип ISA требуется для его разборки и декомпиляции.
Ниже приведено несколько вещей, которые я узнал, пытаясь декомпилировать образ Cisco IOS в Ghidra.
Сначала я должен был извлечь изображение. Я достал образ прошивки с коммутатора, который я недавно купил через TFTP. Оказывается, что первые 112 байтов являются своего рода фирменным заголовком Cisco, и они для нас бесполезны. Нам нужно извлечь интересный архив bzip2. Самый простой способ сделать это - binwalk:
Это создаст каталог
Теперь нам нужно выяснить процессор ISA. Для этого мы снова используем binwalk:
Команда выведет много полезного, поэтому давайте посмотрим на результат:
Здесь, мы видим, что в двоичном файле есть функции Big Endian PowerPC, которые являются прологами, за которыми следуют эпилоги. (Вспоминаем Русский язык) Это показатель того, что образ прошивки ISA - это PowerPC Big Endian.
Теперь, когда мы знаем ISA, нам нужно знать смещение текстовой базы и смещение базы данных в образе прошивки. Лучший способ понять это - загрузить прошивку на фактическое устройство и загрузить.
Чтобы получить base адрес (fileOffset), запустите команду
Это выдаст строку:
Оба эти адреса важны, поэтому запишите их и сохраните на потом.
Гидра
Теперь откройте файл
Гидра преобразует двоичный файл, и когда процесс завершится, строки будут преобразованы в метки внутри декомпилятора. Это связано с тем, что области меток в памяти помечены в гидре как Read/Write. Мы преобразуем эти метки в строки для того, чтобы их было проще использовать.
В Гидре перейдите к адресу базы данных
Откройте
После того, как вы выполнили эти шаги, метки должны преобразоваться в строки, и вы сможете легко начать свою деятельность:smile6:.
Подготовка к работе в 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. Затем выполниет импорт.
Гидра преобразует двоичный файл, и когда процесс завершится, строки будут преобразованы в метки внутри декомпилятора. Это связано с тем, что области меток в памяти помечены в гидре как Read/Write. Мы преобразуем эти метки в строки для того, чтобы их было проще использовать.
В Гидре перейдите к адресу базы данных
0x02f00000 - 0x01000000. В этой части двоичного объекта находятся все строки, на которые есть ссылки в коде. Фактическое местоположение, где начинаются эти строки, немного ниже, чем 0x02f00000 - 0x01000000. Нам нужно будет вручную проверить двоичный файл, чтобы увидеть, где они находятся. Скорее всего, это связано с некоторым смещением в текстовой базе, о котором я просто не знаю. Я придумал место DAT_02de33d8 (0x02de33d8). Мы не обязательно должны найти точное местоположение.
Откройте
Window->Memory Map и нажмите кнопку Split в правом верхнем углу. Разделить файл вам нужно будет по адресу 0x02f00000 базы данных, а затем пометить область памяти базы данных как Read Only.
После того, как вы выполнили эти шаги, метки должны преобразоваться в строки, и вы сможете легко начать свою деятельность:smile6:.