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

Статья Введение в Cutter

вавилонец

CPU register
Пользователь
Регистрация
17.06.2021
Сообщения
1 116
Реакции
1 265
Intro-To-Cutter.jpg

ОРИГИНАЛЬНАЯ СТАТЬЯ
ПЕРЕВЕДЕНО СПЕЦИАЛЬНО ДЛЯ xss.pro
$600 ---> bc1qhavqpqvfwasuhf53xnaypvqhhvz966upnk8zy7 для поддержания анонимной ноды ETHEREUM - main и тестов

Большинство моих предыдущих сообщений посвящено реверсированию двоичных файлов с помощью Radare2/Rizin из командной строки. Хотя это отличный вариант, недавно я перешел на использование альтернативного графического интерфейса: Cutter. Эта заметка будет введением в этот инструмент и как его использовать.




Что такое Cutter

Cutter - это графический интерфейс для дизассемблера Rizin. Изначально Cutter использовался в Radare2, поэтому, когда Radare2 развился в Rizin, Cutter тоже перешел.
Cutter объединяет множество сложных функций команд Rizin в простой в использовании интерфейс, но при этом обеспечивает доступ к командной строке для более опытных пользователей. Это идеальный вариант для новичков, но и опытные пользователи Rizin/Radare2 могут успешно работать с этим инструментом.

Пользовательский интерфейс Cutter

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

cutter-ui-example.png


Добавление новых вкладок

Наряду с представлениями декомпилятора и дизассемблера, Cutter позволяет добавлять на экран другие инструменты для облегчения анализа. Эти инструменты включают в себя строки, обзор графиков, информацию о пользовательских типах, консоль Rizin, функцию поиска и многие другие. Чтобы добавить новое окно к текущему макету, перейдите в меню Windows и выберите дисплей, который вы хотите разместить. Затем вы можете перетащить окно по приложению и разместить его в любом месте пользовательского интерфейса. Например, пользователь может добавить новую вкладку разборки к текущему окну, перейдя в Windows и нажав Add Disassembly.

add-disassembly.png


Это добавит новую вкладку в нижнюю часть текущего окна.

new-disassembly-tab.png


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

moving-window.webp


Просмотр дизассемблера

Окно дизассемблера показывает разборку текущей функции, которую вы просматриваете. Оно также позволяет "десинхронизировать" текущее окно с другими открытыми окнами дизассемблирования. Это позволяет просматривать несколько функций одновременно, не изменяя вид других открытых окон. После того как появятся два окна дизассемблирования, вы можете заметить, что они оба "синхронизированы", что означает, что при нажатии на одно окно изменяется вид другого и наоборот. Чтобы разсинхронизировать эти окна, вы можете щелкнуть правой кнопкой мыши в одном из них и выбрать опцию синхронизации/разсинхронизации смещения.

unsyncing-offset.webp


Теперь можно открывать различные функции в нашем новом окне дизассемблирования, не затрагивая исходное представление функции. Это чрезвычайно полезно при анализе двоичного файла с несколькими вызовами функций. Другие возможности в окне разборки включают: возможность изменять имена функций, переменных и получать ссылки на определенные адреса. Все это доступно, если щелкнуть правой кнопкой мыши на инструкции ассемблера или переменной, о которой вы хотите получить информацию. Например, вы можете изменить имя переменной, щелкнув ее правой кнопкой мыши и выбрав Переименовать local..... Cutter отобразит меню, позволяющее переименовать переменную. Вы также можете изменить информацию о типе переменной, чтобы она лучше соответствовала реальному коду.

changing-variables.webp


Просмотр графики

Как и большинство дизассемблеров, Cutter предлагает графическое представление текущей функции. Это позволяет аналитику видеть ветви, возникающие в функции из операторов if, и обеспечивает более удобную навигацию по сравнению со стандартным представлением дизассемблирования. Вы можете добавить представление графика, перейдя в раздел Windows и нажав кнопку Добавить график.

cutter-graph-view.png


Еще одной полезной функцией является обзор графика, который дает высокоуровневый вид всего графика функции. Этот вид позволяет легко перемещаться по графику, а также дает возможность видеть, где находится курсор по сравнению со всей функцией. Чтобы добавить обзор графика, перейдите на вкладку Windows, а затем выберите Graph Overview. Вы можете перетащить этот виджет в любое место окна. Мне нравится размещать его под списком функций.

graph-overview.png


Еще одной полезной функцией представления графика является возможность выделения блоков. Это позволит изменить цвет фона основного блока, чтобы его было легче найти. Это также отображается в обзоре графика, что значительно упрощает навигацию! Чтобы выделить блок, щелкните правой кнопкой мыши на нужном блоке и выберите Выделить блок. Cutter отобразит цветовое колесо, позволяющее выбрать нужный цвет для блока.

Block-highlighting.webp


Функции

Виджет функций содержит список функций, имеющихся в бинарном файле, и позволяет пользователю перейти к определенной функции, дважды щелкнув по ней. Виджет также имеет строку поиска, которая поможет пользователю быстро найти нужную функцию.

functions-list.png


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

function-info.png


Декомпилятор

По умолчанию Cutter поставляется с двумя декомпиляторами: jsdec и Ghidra. Декомпилятор jsdec является более низкоуровневым, чем Ghidra, предоставляя более простую версию дизассемблирования, а не представление кода на языке C.

jsdec-vs-ghidra.png


Вывод декомпилятора, показывающий разницу между jsdec (слева) и Ghidra (справа)

Как вы можете видеть, вывод Ghidra ближе к реальному представлению кода на языке Си, чем вывод jsdec. Чтобы добавить представление декомпилятора, перейдите на вкладку Windows и нажмите Добавить декомпилятор. Он обладает теми же функциями, что и окно дизассемблирования, включая возможность синхронизировать/рассинхронизировать окно, чтобы вы могли просматривать несколько функций одновременно.

Hexdump

Окно Hexdump интересно тем, что обеспечивает гибкость просмотра двоичного файла на уровне байт за байтом. Это позволяет пользователю просматривать различные хэш-значения для набора байтов, разбирать набор байтов как дизассемблер и экспортировать их в различные языки, такие как Python. Панель в правой части окна обеспечивает эту функциональность. Значения хэшей для выбранного набора байтов отображаются на вкладке Информация. Отображаются следующие хэши: MD5, SHA1, SHA256 и CRC32. На этой вкладке также отображается энтропия для выбранных данных.

hexdump-information.png


Вкладка Parsing позволяет пользователю отображать выбранные байты в различных форматах. Например, если вам нужно, чтобы байты были отформатированы как байтовый массив Python, этот инструмент может сделать это, выбрав Python в выпадающем меню.

hexdump-parsing.png


Можно выбрать и другие форматы данных:

  • Преобразование байтов в инструкции ассемблера
  • Строка
  • Массив ассемблера
  • Массив байтов C
  • Слова на языке C (половинные и двойные)
  • Массив байтов Python
  • JSON
  • Массив байтов JavaScript
  • Правило Yara



Функциональность поиска

Функция поиска в Cutter позволяет пользователю искать в двоичном файле все, что угодно, от строк до гаджетов объектного программирования (ROP). Функция поиска Cutter является чрезвычайно мощным инструментом для реверс-инжиниринга. Я использую этот инструмент для поиска интересных строк, ссылок на определенные адреса памяти и инструкций по сборке, которые могут указывать на интересные функции, такие как шифрование. Чтобы добавить новое окно поиска, откройте вкладку Windows, затем нажмите Поиск. Для поиска с помощью этого инструмента выберите тип объекта, который вы хотите найти (строка, инструкция сборки и т.д.) в поле Поиск, затем выберите область для поиска (текущий отображаемый раздел, все разделы, текущий блок, необработанные двоичные файлы и т.д.). Затем введите искомое и нажмите Enter.

string-search.png

Поиск строки Hello в двоичном формате с помощью поиска строки

asm-search.png

Поиск ассемблерного кода lea rax в двоичном коде с помощью поиска по коду

Консоль
Консоль - моя любимая утилита в Cutter. Она позволяет использовать команды Rizin из интерфейса GUI, создавая лучшее из двух миров! По умолчанию консоль не отображается. Ее можно открыть в разделе Windows, а затем щелкнуть на Console.

console-example.png


Любая функция Rizin, недоступная в интерфейсе Cutter, может быть доступна через эту консоль. Например, вы можете редактировать все конфигурационные переменные в Rizin с помощью команды e, но, похоже, нет способа сделать это в самом графическом интерфейсе. Если вам нужно изменить конкретную настройку, проще сделать это из консоли.

console-configuration-editor.png


Заключение

В целом, Cutter - это мощный инструмент, когда речь идет о реверс-инжиниринге. Я предпочитаю его обычному CLI, так как он дает лучшее из двух миров с консольным инструментом. Есть и другие возможности, которые не были рассмотрены в этой статье, включая новую функциональность Yara. Также можно изучить множество плагинов, которые помогут в анализе. Вы можете найти полную документацию на сайте Cutter.

Спасибо за прочтение и счастливого реверса
 


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