Допустим есть прошивка, или не прошивка, не суть, некий исполняемый дамп безо всяких заголовков, либо заголовки совсем не PE. Допустим известно, по какому адресу какая часть грузится, процессор и прочие параметры. Какие есть варианты автоматизировать загрузку в IDA или гидру? Может есть не особо сложный способ сделать ELF например, или скриптами?
ИДА же по-моему поддерживает загрузку RAW-файлов. Ну а проверить архитектуру IA32/не IA32 можно в Olly. Есть еще такой самопальный дебагер, называется GikDbg (на основе ольги). Он предназначен для дебага под Android/IOS (ARM). В силу того, что он основан на ольге - там так же присутствует возможность загрузки RAW дампов. В зависимости от того, насколько успешно были предприняты попытки дизассемблирования можно судить об архитектуре содержимого, с точностью да/нет и от этого отталкиваться.
Проблема на пустом месте. Загрузка исполняемого файла в дизасм это когда дизасм парсит заголовки ради адресов секций и точек входа. Ну и отладочные символы, если такое счастье свалилось, тоже в принципе полезно интерпретировать. А лепить исполняемый файл из дампа ради того, чтоб таким способом передать дизасму базовый адрес и одну точку входа, это какой-то прям нетрадиционный подход.
Что-то только сейчас понял, что ничего не понял. То есть, ТС не пытается выяснить, что за бинарь к нему попал - он пытается создать какое-то неведомое сшитое чудовище ? Пытаюсь понять: есть то, не знаю что, но что-то исполняемое. Хорошо, такое бывает. При этом знаю, в каких условиях это "то, не знаю что" должно работать. Это вообще для меня загадка, что значит "автоматизировать" ? Не особо сложный способ есть - сформировать заголовок на основе имеющихся данных и скрестить ежа и ужа. P.S. Говори прямо - о чём речь и что конкретно требуется ?
Попробую пояснить суть проблемы на примере. Бинарник считывается небольшими блоками, при этом заранее о распределении адресов мало что известно. Также неизвестно, обрабатывается ли ошибка доступа к памяти, и восстанавливается ли исполнение после такой ошибки. Поэтому план на данный момент считывать блок который точно считывается, доставать адреса и идти уже по ним. Вручную грузить каждый раз в иду напрягает, хотелось бы автоматизировать. --- Сообщение объединено, 26 июн 2022 --- Автоматизировать - сиречь избежать необходимости выбора процессора и создания сегментов при каждой загрузке свежеобновленного бинаря.
И много там в коде абсолютных адресов? (вопрос риторический) Даже если память виртуальная (писи чтоли?), вероятней всего память с адрес_блока&(~0x0000ffff) доступна, а уже докуда доступна можно в процессе сориентироваться, дизассемблер для этого не нужен. Но если этой автоматизацией зачем-то заниматься, есть headless ghidra и (о боже) radare2.
А что нужно? Мой уровень дзена не позволяет глядя в хекс дамп арма извлекать адреса, к сожалению. Не соблаговолит ли уважаемый каких-нибудь подробностей?
Дожили, мануалы по заявкам читаю. У тебя будет что-то типа: Код (Text): 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): codeViewerService=state.getTool().getService(CodeViewerService.class); state.getTool().execute(new AddFileBytesMemoryBlockCmd(blockName, comment, source, startAddr, length,isRead, isWrite, isExecute, isVolatile, fileBytes, fileBytesOffset, isOverlay),codeViewerService.getCurrentLocation().getProgram()); Ну а по части самой нагрузки, что будешь анализировать и как, думай сам.
В общем действительно все оказалось проще и быстрее чем планировалось. IDA позволяет догрузку бинарников в уже имеющуюся базу (File -> Load file -> Additional binary file), при этом можно замещать уже загруженные адреса и вроде даже добавленные имена при этом сохраняются.