Сейчас на форуме: -Sanchez- (+8 невидимых) |
eXeL@B —› Основной форум —› Неочевидные фичи иды |
Посл.ответ | Сообщение |
|
Создано: 18 января 2009 15:36 · Личное сообщение · #1 В IDA есть много прикольных штук, которые добавляются втихую. И натыкаешься на них только случайно. Давайте постить всякие неочевидные фичи иды сюда. Только с пояснениями как пользоваться, а не просто названия меню. Фича номер раз: "Create Struct from Data" Позволяет создать структуру (в окне структур) по данным. Например были данные: RAM:300A0E58 DCW 0x203 RAM:300A0E5A DCD 0x4050102 RAM:300A0E5E DCW 0x304 RAM:300A0E60 DCD 0x2030304 Выделяем эти данные и заходим в меню "edit" - "structs" - "Create Struct from Data". Вуаля! Получаем структуру: 00000000 struct_0 struc ; (sizeof=0xC) 00000000 anonymous_0 DCW ? 00000002 anonymous_1 DCD ? 00000006 anonymous_2 DCW ? 00000008 anonymous_3 DCD ? 0000000C struct_0 ends Остается только проименовать поля. Офигенно помагает когда нужно восставливать таблицу виртуальных функций. Выделил весь массив - и готово. Не надо руками вбивать. ----- Реверсивная инженерия - написание кода идентичного натуральному |
|
Создано: 19 января 2009 15:59 · Поправил: Hexxx · Личное сообщение · #2 Фича номер два: "Manual operand" Казалось бы ну нафига нужно вбивать операнды вручную? Что это дает? Ну изменится отображение, а дальше? А дальше оказывается что IDA анализирует manual operand'ы на предмет имен уже встречающихся в базе. То есть если сделать Manual Operand и в качестве текста вбить имя ASCII константы, имя глобальной переменной или имя функции, то IDA автоматом проставит XREF. А для ASCII проставит комент. Как это работает: Ставим курсор на операнд и нажимаем Alt-F1. Вылазит окно куда можно вбить текст операнда. Пример. Есть вот такой код: Code:
Здесь через R0 передают указатель на текст дебажного сообщения, но адрес текста вычисляется относительно адреса какой-то строковой константы. В нашем случае идет обращение к строке по адресу 0x102DD6F4 + 0x3C = 0x102DD730 Вот собственно строка: 102DD730 aSmErr_allocfreeunitNlun_0 DCB "[SM :ERR] _AllocFreeUnit(nLun:%d, nVun:%d) : Erase fail!",0xD Имя у этой константы = aSmErr_allocfreeunitNlun_0 Теперь сделаем Manual Operand вот такой: ADD R0, aSmErr_allocfreeunitNlun_0 На выходе получаем: Code:
+ автоматом был проставлен xref на адрес 102DD730 с 11308BDA ----- Реверсивная инженерия - написание кода идентичного натуральному |
|
Создано: 19 января 2009 22:43 · Личное сообщение · #3 |
|
Создано: 19 января 2009 23:38 · Личное сообщение · #4 [wl] пишет: как сделать настройку Options/Demangled names.../(о) Names, [x] Assume GCC v3.x names - настройкой по умолчанию? В ida.cfg сделай вот так: ShortNameForm = 0x0EA3BE6F LongNameForm = 0x0640000F DemangleNames = DEMNAM_NAME ----- Реверсивная инженерия - написание кода идентичного натуральному |
|
Создано: 20 января 2009 01:34 · Личное сообщение · #5 Потому что я аццкий флудер, и постю всякую херню ради рейтинга. Жжошь ваще А если по делу, не мог бы ты описать тут такую неочевидную фичу как "создание битовых поля". Помню ты говорил что разобрался с ними по мануалам, я думаю многим было бы интересно (у мну так и не вышло). P.S. Тебе кстати ваще уже пора книгу по IDA писать типа "IDA Unleashed" или "ПоIDAние бинарников"... ----- Get busy living or get busy dying © |
|
Создано: 20 января 2009 05:27 · Личное сообщение · #6 не в тему немного January 20, 2009 IDA v5.4 release is not that far away I'm happy to inform you that we are entering the beta stage of IDA v5.4! In addition to numerous small and not that small improvements, the new version will have hree debugger modules: bochs, gdb, and windbg, selectable on the fly (the active debugger session will be closed, though ;)) With the bochs debugger, we offer three different worlds: run-any-code-snippet facility, windows-like-environment for PE files, and any-bochs-image bare-bone machine emulation mode. You can read more about this module in our blog: hexblog.com/2008/11/bochs_plugin_goes_alpha.html With gdb, x86 and arm targets are supported. Among other things, it is possible to connect IDA to QEMU or debug a virtual machine inside VMWare. We tried it iPhone as well. However, while it works in some curcimstances, there were some problems on the gdbserver side. With windbg, user and kernel mode debugging is available. The debugger engine from Microsoft, which is currently the only choice for driver and kernel mode debugging, can be used from IDA. It can automatically load required PDB files and populate the listing with meaningful names, types, etc. Speaking of PDB files, IDA imports more information from them: local function variables and types are retrieved too, c++ base classes are handled, etc. The gdb and windbg debugger modules support local and remote debugging. We tried to make the debugger modules as open as possible: target-specific commands can be sent to all backend engines in a very easy and user-friendly way. As usual, better analysis and many minor changes have been made. If you spend plenty of time analyzing gcc generated binaries, you'll certainly appreciate that IDA handles its weird way of preparing outgoing function arguments. Now it can trace and find arguments copies to the stack with mov statements. The new IDA will support Python out of box, thanks to Gergely Erdelyi, who kindly agreed the Python plugin to be included in the official distribution. In fact, the main IDA window will have a command line to enter any python (or other language) expressions and immediately get a result in the message window. We will prepare the detailed list of improvements later this week. Posted by Ilfak Guilfanov at 01:29 AM |
|
Создано: 20 января 2009 15:56 · Поправил: Hexxx · Личное сообщение · #7 Фича номер три: "Bitfield и маски" Полезная штука, только очень криво реализована, потому почти никто ей непользуется Битовое поле в IDA сделать очень просто, надо при создании enum'a просто указать птичку "Bitfield". Дальше IDA будет следить за тем, чтобы каждое поле такого энума было степенью двойки. Т.е. возможнные значения для полей будут 1, 2, 4, 8, 16, 32 и т.д. Например есть код: Code:
поле IO_STACK_LOCATION.Control - это битовое поле. Если загрузить соответствующий энум: Code:
То можем наблюдать отображение вот в таком виде: Code:
Мне например такое отображение не нравится. Я хочу чтобы вместо трех значений было одно. Хочу чтобы была маска SL_INVOKE_ALWAYS = SL_INVOKE_ON_CANCEL or SL_INVOKE_ON_SUCCESS or SL_INVOKE_ON_ERROR. Как сделать такую маску? Для существующего enum'a сделать такую маску уже не получится. Потому что маску надо создавать первой, до создания самих элементов которые в нее входят. Вот такое ограничение в IDA. Поэтому придетcя делать новый битфилд. Создавать битфилд надо начинать с создания маски. Создаем новый энум и добавлем поле самой маски. Делается это вот так: Code:
Если не ясно см скриншот: Получится вот такой битфилд: Code:
Дальше добиваем остальные части битфилда. Для каждого из полей которые входят в маску надо указывать: Mask: 0xE0 Mask Name: SL_INVOKE_ALWAYS_MASK Если не ясно см скриншот: Какие поля попадают в маску? В нашем случае это SL_INVOKE_ON_CANCEL, SL_INVOKE_ON_SUCCESS и SL_INVOKE_ON_ERROR. Поле SL_PENDING_RETURNED не входит в маску 0xE0. Потому что 1 & 0xE0 = 0. В маску входят долько поля для которых "логическое и" с 0xE0 = само значение поля. То есть: 0x20 & 0xE0 = 0x20 0x40 & 0xE0 = 0x40 0x80 & 0xE0 = 0x80 Я все это к тому, что для поля SL_PENDING_RETURNED маску не ставим. Получается вот такой enum: Code:
Применяем: Code:
проверяем, как работают другие части энума. Если применить наш энум на значении 0xE1, то IDA отобразит его вот так: Code:
Но что будет если попытаться применить энум на значении 0xA0? Поидее должно бы показать: Code:
Но фиг вам! Просто пометит красным, как будто мы применили энум на значении, которого нет в энуме. Так и есть, когда мы указали маску, IDA перестает совмещать значения, которые находятся в пределах маски SL_INVOKE_ALWAYS_MASK. Значение 0xA0 - как раз входит в маску 0xE0. И чтобы 0xA0 хоть как-то отображалось придется создать еще одно поле в энуме: Code:
p.s. Судя по IDA 5.4 Ильфака подменили. Я думал что все фишки в 5.3 - это редкое озарение. А тут снова столько всяких полезных вещей добавил 0_o. Даже купить захотелось Но я крепкий и сдержусь ----- Реверсивная инженерия - написание кода идентичного натуральному |
|
Создано: 20 января 2009 18:00 · Личное сообщение · #8 |
|
Создано: 20 января 2009 22:39 · Личное сообщение · #9 |
|
Создано: 20 января 2009 23:02 · Личное сообщение · #10 |
|
Создано: 03 февраля 2009 14:54 · Поправил: Hexxx · Личное сообщение · #11 Фича №4. Русские символы. Поумолчанию IDA заточена для буржуинов. Поэтому вместо русского языка, можно наблюдать вот такое: Code:
Не весело вообще. Исправляется через правку таблицы перекодирования в файле ida.cfg: По умолчанию там стоит вот эта: Code:
ее надо всю закоментить, т.е. добавить // вначале каждой строки. И раскоментить следующую таблицу: Code:
После этого можно будет видеть русские символы: Code:
----- Реверсивная инженерия - написание кода идентичного натуральному |
|
Создано: 27 января 2010 01:35 · Поправил: vptrlx · Личное сообщение · #12 >>Фича номер два: "Manual operand" (Может я конечно расскажу о велосипеде, но) есть ещё одна похожая фича: пусть есть кодес типа такого: Code:
Но мы знаем, что функция sub_12345 - это jmp ReadFile, хотя как такая не определяется например из-за того, что код - это нерабочий дамп какого-нибудь прота без восстановленного импорта и тп. Если теперь выделить sub_12345, нажать "n" и написать название ReadFile, а затем, когда ида спросит, не хотим ли мы добавить к столь необычному названию "a numerical suffix", согласиться с предложением, то (в данном случае) она автоматом добавит комментарии, а если бы я выбрал пример поудачнее, то и переменные бы переименовала и функцию бы подправила: Code:
|
|
Создано: 27 января 2010 05:32 · Личное сообщение · #13 Такой вопрос к Вам, о гуру ИДЫ: Допустим есть такой участок кода: Code:
Можно ли при создании асм-файла(File->Produce file...->asm file) заставить иду захватывать и функции которые вызываются из выделенного участка. В данном случае это 004300D2 E8 04397D71 CALL 71C039DB. А то уж очень не приятно по кусочкам (: |
|
Создано: 27 января 2010 11:43 · Личное сообщение · #14 s0l пишет: Можно ли при создании асм-файла(File->Produce file...->asm file) заставить иду захватывать и функции которые вызываются из выделенного участка. Только если сделать скрипт, который будет рекурсивно это(вывод асма в файл) делать. Я когда-то такой делал, он по инету разошелся. ----- Реверсивная инженерия - написание кода идентичного натуральному |
|
Создано: 12 мая 2010 21:28 · Личное сообщение · #15 теперь не найти. Но в общем там ничего сложного: идешь по функции, собираешь все ее ветвления и xref'ы на данные, и дальше через GenerateFile(OFILE_ASM,...) выписываешь по порядку все подфункции и данные. Чтобы не было повторов ставишь на пройденой функции коммент, например "1". Когда заходишь в функцию, проверяешь есть ли у нее комент "1", если есть - скипаешь, если нет - выписываешь в файл. Еще я делал чтобы код писался в один файл, а данные в другой. А потом их соединял. Так проще, чтобы не трахаться с объявлениями. ----- Реверсивная инженерия - написание кода идентичного натуральному |
|
Создано: 13 мая 2010 06:54 · Личное сообщение · #16 |
|
Создано: 09 марта 2011 02:00 · Поправил: Hexxx · Личное сообщение · #17 Фича номер пять: "местное переименование регистра" Если выбрать регистр в пределах фунции и нажать на нем 'N', то можно его переименовать. И в пределах всей функции вместо привычного esi будет This: Code:
Про это знают все. И это вообще никак не помогает в случае, когда сначала регистр используется для хранения указателя на одну структуру, а потом на другую, и все в пределах одной функции. Для этого используется фича "местного переименования": 1) выделяем нужный кусок кода 2) нажимаем 'V', вылазит окно "Rename Register" 3) в поле Old Name - пишем имя регистра, который надо переименовать 4) в поле New Name - новое имя получаем: Code:
edi был переименован в AppleKeychainExtra после jz short @@end, и переименование актуально до @@end ----- Реверсивная инженерия - написание кода идентичного натуральному | Сообщение посчитали полезным: Vintersorg, Fallout, rr222, mak, int 26h, V0ldemAr, _ruzmaz_, kp0m |
|
Создано: 16 марта 2011 02:11 · Поправил: Hexxx · Личное сообщение · #18 Фича номер шесть: "событие срабатывания брейкпоинта под свои нужды" Думаю все видели в окошке, которое вылазит при установке брейкпоинта, есть поле Condition. В нем предлагается писать условие срабатывания брейкпоинта, типа "EAX==0xDEAD". Ну и в Help'e есть такая приписочка, что эта строчка может быть любым IDC выражением. Вот и хорошо Есть в IDA\idc файл ida.idc, в который можно дописывать свои функции, или инклюдить из других idc, и они будут доступны из редактора скриптов, а кроме того из того самого поля Condition. Или вообще их можно поставить на hotkey, гуглите "Associating IDC Scripts with Hotkeys" и вам откроется истина. Короче, пишем в ida.idc свою функцию вида: Code:
"return 1" нужно для того, чтобы брейкпоинт срабатывал всегда. Ставим брейк поинт на инструкцию call в коде: Code:
В поле condition пишем: Code:
убираем у брейк поинта птичку "Break" и получаем самый настоящий логгер аргументов: Code:
Можно пойти дальше, и дописать дамп данных: Code:
И получаем полноценный API логгер ----- Реверсивная инженерия - написание кода идентичного натуральному | Сообщение посчитали полезным: NikolayD, r_e, OKOB, mak, Getorix, _ruzmaz_, Bad_guy, ximerus |
|
Создано: 16 марта 2011 12:19 · Личное сообщение · #19 |
|
Создано: 16 марта 2011 12:42 · Личное сообщение · #20 |
|
Создано: 16 марта 2011 23:27 · Личное сообщение · #21 Hexxx пишет: Code:
Лучше так: Code:
|
|
Создано: 16 марта 2011 23:31 · Личное сообщение · #22 |
eXeL@B —› Основной форум —› Неочевидные фичи иды |