Ghidra + IDA не может обнаружить строку, но Radare2 может

Jan 15 2021

Я новичок в реверс-инжиниринге, и я пробовал Ghidra, IDA (Freeware) и Radare2 с простым CrackMe, проблема в том, что ни Ghidra, ни IDA не могли обнаружить строку, в то время как Radare2 (с использованием графического интерфейса Cutter) мог определить имя. Я использовал анализ по умолчанию для всех 3. Что-то мне не хватает? потому что даже команда 'strings' действительно может найти строку, которую я ищу.

Гидра:

ИДА:

Radare2 (резак):

Ответы

6 R4444 Jan 15 2021 at 22:05

Я не знаю точной длины строки. Но здесь следует отметить несколько вещей:

  1. Ghidra и IDA имеют минимальный предел размера строки для восстановления правильного типа (ghidra имеет ограничение - или нижнюю границу 5).
  2. Это необходимо, чтобы избежать ложных срабатываний или противоречивых типов. И восстановить правильные типы, не помечая указатель как строку. Посмотрите этот рисунок для справки. Создано с использованием автоматизированного анализа Ghidra.

В Ghidra вы можете изменить это ограничение (минимум 4) в разделе анализа.

  1. Stringsкоманда выводит печатные символы с минимальным размером 4 (плюс она не использует сложные алгоритмы восстановления типов, такие как ghidra или Ida). Я считаю, что у вас есть строка с длиной меньше 5, и я предполагаю, что она должна быть 4, чтобы быть точным.
  2. строки обычно определяются в .rodataразделе. Если вы дважды щелкните DAT_xxxx, вы попадете в то место, где определена эта строка. Там вы увидите последовательные байты, сгруппированные вместе Ghidra или IDA (как показано на рисунке 1). Но тип не разрешается как «строка».
  3. В Ghidra быстрый способ исправить это, изменив тип данных метки DAT_xxxx: щелкните правой кнопкой мыши -> Данные -> Выберите тип данных -> выберите строку

Ссылки:

  • См. Мой вопрос здесь - https://github.com/NationalSecurityAgency/ghidra/issues/2274
  • руководство по струнам - https://linux.die.net/man/1/strings
  • ida pro - Как сделать так, чтобы IDA увидела ссылку на строку?