Загрузка RAW бинарника в дизассемблер

Тема в разделе "WASM.RESEARCH", создана пользователем ormoulu, 25 июн 2022.

  1. ormoulu

    ormoulu Active Member

    Публикаций:
    0
    Регистрация:
    24 янв 2011
    Сообщения:
    1.000
    Допустим есть прошивка, или не прошивка, не суть, некий исполняемый дамп безо всяких заголовков, либо заголовки совсем не PE.
    Допустим известно, по какому адресу какая часть грузится, процессор и прочие параметры.
    Какие есть варианты автоматизировать загрузку в IDA или гидру? Может есть не особо сложный способ сделать ELF например, или скриптами?
     
  2. HESH

    HESH Active Member

    Публикаций:
    2
    Регистрация:
    20 мар 2008
    Сообщения:
    109
    ИДА же по-моему поддерживает загрузку RAW-файлов. Ну а проверить архитектуру IA32/не IA32 можно в Olly. Есть еще такой самопальный дебагер, называется GikDbg (на основе ольги). Он предназначен для дебага под Android/IOS (ARM). В силу того, что он основан на ольге - там так же присутствует возможность загрузки RAW дампов. В зависимости от того, насколько успешно были предприняты попытки дизассемблирования можно судить об архитектуре содержимого, с точностью да/нет и от этого отталкиваться.
     
  3. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.786
    Проблема на пустом месте. Загрузка исполняемого файла в дизасм это когда дизасм парсит заголовки ради адресов секций и точек входа. Ну и отладочные символы, если такое счастье свалилось, тоже в принципе полезно интерпретировать. А лепить исполняемый файл из дампа ради того, чтоб таким способом передать дизасму базовый адрес и одну точку входа, это какой-то прям нетрадиционный подход.
     
  4. HESH

    HESH Active Member

    Публикаций:
    2
    Регистрация:
    20 мар 2008
    Сообщения:
    109
    Что-то только сейчас понял, что ничего не понял. То есть, ТС не пытается выяснить, что за бинарь к нему попал - он пытается создать какое-то неведомое сшитое чудовище ?

    Пытаюсь понять: есть то, не знаю что, но что-то исполняемое. Хорошо, такое бывает.

    При этом знаю, в каких условиях это "то, не знаю что" должно работать.

    Это вообще для меня загадка, что значит "автоматизировать" ?

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

    P.S. Говори прямо - о чём речь и что конкретно требуется ?
     
  5. ormoulu

    ormoulu Active Member

    Публикаций:
    0
    Регистрация:
    24 янв 2011
    Сообщения:
    1.000
    Попробую пояснить суть проблемы на примере. Бинарник считывается небольшими блоками, при этом заранее о распределении адресов мало что известно. Также неизвестно, обрабатывается ли ошибка доступа к памяти, и восстанавливается ли исполнение после такой ошибки. Поэтому план на данный момент считывать блок который точно считывается, доставать адреса и идти уже по ним. Вручную грузить каждый раз в иду напрягает, хотелось бы автоматизировать.
    --- Сообщение объединено, 26 июн 2022 ---
    Автоматизировать - сиречь избежать необходимости выбора процессора и создания сегментов при каждой загрузке свежеобновленного бинаря.
     
  6. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.786
    И много там в коде абсолютных адресов? (вопрос риторический) Даже если память виртуальная (писи чтоли?), вероятней всего память с адрес_блока&(~0x0000ffff) доступна, а уже докуда доступна можно в процессе сориентироваться, дизассемблер для этого не нужен. Но если этой автоматизацией зачем-то заниматься, есть headless ghidra и (о боже) radare2.
     
  7. ormoulu

    ormoulu Active Member

    Публикаций:
    0
    Регистрация:
    24 янв 2011
    Сообщения:
    1.000
    А что нужно? Мой уровень дзена не позволяет глядя в хекс дамп арма извлекать адреса, к сожалению.

    Не соблаговолит ли уважаемый каких-нибудь подробностей?
     
  8. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.786
    Дожили, мануалы по заявкам читаю. У тебя будет что-то типа:
    Код (Text):
    1. support/analyzeHeadless.bat . project1 -import dummy.bin -processor ARM:LE:32:v8 -postScript script1.java -deleteProject
    Гидра создаст в текущей папке проект project1, поместит в него dummy.bin (ключ -import по всей видимости тупенький и базовый адрес ему некуда подставить, грузить сам бинарник надо из скрипта). После исполнения скрипта проект сам удалится. Скрипт должен быть класса HeadlessScript, пример лежит в ghidra-master\Ghidra\Features\Base\src\main\java\ghidra\app\util\headless\HeadlessScript.java, апи у него описаны в ghidra-master\Ghidra\Features\Base\src\main\java\ghidra\program\flatapi\FlatProgramAPI.java
    В скрипте должно быть что-то типа (аргументы подставишь):
    Код (Text):
    1. codeViewerService=state.getTool().getService(CodeViewerService.class);
    2. state.getTool().execute(new AddFileBytesMemoryBlockCmd(blockName, comment, source, startAddr, length,isRead, isWrite, isExecute, isVolatile, fileBytes, fileBytesOffset, isOverlay),codeViewerService.getCurrentLocation().getProgram());
    Ну а по части самой нагрузки, что будешь анализировать и как, думай сам.
     
  9. ormoulu

    ormoulu Active Member

    Публикаций:
    0
    Регистрация:
    24 янв 2011
    Сообщения:
    1.000
    Благодарю, буду пробовать. Может заодно освою гидру наконец.
     
  10. ormoulu

    ormoulu Active Member

    Публикаций:
    0
    Регистрация:
    24 янв 2011
    Сообщения:
    1.000
    В общем действительно все оказалось проще и быстрее чем планировалось. IDA позволяет догрузку бинарников в уже имеющуюся базу (File -> Load file -> Additional binary file), при этом можно замещать уже загруженные адреса и вроде даже добавленные имена при этом сохраняются.
     
  11. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.786
    Как бы в гидре оно тоже есть, и где в этом автоматизация?
     
  12. ormoulu

    ormoulu Active Member

    Публикаций:
    0
    Регистрация:
    24 янв 2011
    Сообщения:
    1.000
    Обошлось без автоматизации на этот раз, все равно спасибо, пригодится на будущее я думаю.