Pull to refresh
6
0
Алексей @gladkikh_aa

User

Send message

mov ss, xxx; mov sp, xxx+2; jmp yyy — "Вьетнамский флешбеки". В биосах такое очень любят, сам касался тоже Award BIOS, но очень давно.


Однажды вообще встретил прошивку, в которой она вся была выстроена на основе таких "вызовах" функций и была для процессора C166. Пришлось писать свой процессорный модуль, который собирал такие конструкции в "псевдо-вызов" CALL.

еще IntelliJ vs Visual Studio vs IDA Pro, когда кнопки дебага F7, F8, F9 у всех по разному :)

Я бы отметил еще кнопку n и; Наверное, еще и по этой причине к Гидре так и не дошел пока что. Без горячих кнопок вообще не представляю как реверсить, а если в Гидре все по другому — первое время будет просто адь.

Это уже не зависит от способа патчинга :)

Ни сколько не настаиваю, что так лучше :) Поэтому обычно пилим свои тулзовины, чтобы меньше отстреливать себе ноги

Так тоже можно сделать в ИДА, но только для x86/x64. Для других зависит от процессорного модуля, если он не поддерживает ассемблирование команд — то нельзя (для АРМа точно нельзя). Ни в коем случае не хочу сказать, что "ну раз нет ну и не надо", но сам очень опасливо к этому отношусь. Когда так патчишь бинарь команда может получиться короче-длиннее и потом это откатывать отдельная песня, когда нет CTRL+Z :). И вторая причина — если не обратить внимание можно зашить не совсем правильный патч и плясать после этого долгое время. То есть это добавляет еще одну "степень свободы" в куче неизвестных. Но это чисто мое мнение. Возможно это историческая профдеформация.

Есть, можно по ALT+Q назначать структуры в памяти. Если сами типы данных, то по Y — в декомпиле, по T — дизасме. Да, тоже часто пользовался при разборе контроллеров, когда есть UART, например, с пачкой регистров и таких UART'ов несколько штук. Делаю структуру с регистрами и назначаю на разные базовые адреса UART'ов. Аналогично для любой другой периферии.

По поводу патчинга у IDA есть такая функциональность — она касается пропатчить последовательность байт и при этом IDA даже сохранит у себя в базе все места патчинга. Но, честно, я этим никогда не пользовался. Когда надо было патчить не очень интенсивно (пару байтиков) находил нужный адрес в 010 Editor и там менял байт. Если же нужны серьезные патчи, то пилим свои тулзы, чтобы быстро вставлять большие патчи с возможностью их компиляции на Си.

Коллега пробовал Гидру, "я мимо крокодил" и мельком глянул на результат декомпиляции — не особо впечатлило, но после Вашего комментария очень захотелось по внимательней попробовать Гидру.


По Гидре, в минус ей могу сказать (ну кроме того, что если у Вас есть паранойя она Вам точно не подойдет), что в ней нет дебаггера. Тот модуль GDB, который прикрутили выглядит как-то не очень. Причем сам частенько гоняю прошивки в эмуляторе и без нормального GDB очень сложно.

Такое встречал для архитектуры MIPS — процессорный модуль, который по просто MIPS не дизассемблирует некоторые инструкции, однако если пройтись по доступным процессорным модулям нашел подходящий. В нём инструкции хорошо разбирались. Возможно если поискать среди доступных x86, Вы тоже сможете найти в котором эти инструкции есть.


Вообще возможен еще один вариант с помощью IDAPython. Для этого найти все не разобравшиеся инструкции и сделать add_cref_to для таких байтов референс по IDAPython. Тогда IDA хотя бы сможет построить нормально граф. Однако с учетом того, что это BIOS, я думаю там будет для графа еще очень много проблем :)

F5 — действительно знаменитая кнопка, но сейчас я бы сказал более популярен TAB. В отличие от F5, кнопка TAB не только формирует псевдокод (хотя я бы сказал сейчас IDA реально декомпилирует в Си), но и синхронизирует указатель в окне псевдокода и окне дизассемблера. То есть нажав на TAB у Вас указатель в окне псевдокода будет на том месте, которое соответствует месту, где указатель был в листинге ассемблера, и наоборот. Это намного удобней.
Чтобы тягать окошки, которые случайно «выпали» из главного окна необходимо навести на тонкую полосочку под именем окна. После этого появится под именем окна небольшая надпись «Drag this title to dock somewhere else» — потянув за неё можно снова прицепить окно к интерфейсу.

image

Про h и b, а также _ — тоже сам часто использую, но почему-то решил не перегружать cheatsheet :)
Лучше бы для кого, конкретно для вас? Вся информация, приведенная в статье бесполезна или неправильна? Исходя из вашей логики, любой cheat-sheet или учебник бесполезен. Более того, неполных (и полных) описаний эльфов достаточно много, нужно yet another one описание? Таких же cheat-sheet, как данная статья я не видел, чем она и примечательна. Автор, свою крутость явно показать не хотел. Если есть что рассказать о глубинах эльфов со всеми возможными вариантами динамической релокации для популярных процессорных архитектур (ARM, MIPS, x86, x86, PPC) со всеми их тонкостями и best-practice, будет очень интересно почитать. Автор же привел обзор тулов, которые работают с эльфами, чтобы для тех кому встретится такая задача, мог дальше выбрать тот инструмент, который подходит для его задачи. Кстати, сказать, многие программные библиотеки крайне плохо работают с эльфами и могут пропускать секции, что-то не поддерживать, в итоге работа превращается в сплошной ад. Хардкор есть в статьях по реверс-инжинирнигу, там и железки, и РТОС, и ВПО и немного эльфов)))

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Registered
Activity