Сейчас на форуме: subword, rtsgreg1989, zds (+9 невидимых) |
eXeL@B —› Основной форум —› Автоматическое применение структур в IDA |
. 1 . 2 . >> |
Посл.ответ | Сообщение |
|
Создано: 13 января 2006 17:33 · Личное сообщение · #1 После дизассемблирования программы есть такие стоки:
при этом я знаю, что var_40 - это ни что иное, как объект TList, для которого я создаю структуру по смещению 8 байт которой хранится количество элементов. Вопрос: как один раз обозначить, что [ebp-var_40] - это адрес моей структуры, и все относительные ссылки автоматически заменить на что-то типа mov edx,[edx+pTList.Count]? |
|
Создано: 15 января 2006 00:43 · Личное сообщение · #2 |
|
Создано: 15 января 2006 00:54 · Личное сообщение · #3 |
|
Создано: 15 января 2006 07:41 · Личное сообщение · #4 Да, если попросить Иду применять различные сигнатуры, то иногда такого эффекта добиться можно, но не факт. Для того, чтобы Ида автоматически не применяла никаких сигнатур, во время открытия файла, отмени чекбокс "Analysis Enabled". А потом сам выбирай из списка сигнатуры и применяй. (Open signatures window) |
|
Создано: 15 января 2006 10:58 · Личное сообщение · #5 Ara пишет: Ну а навести мышь на var_40 и сделать Rename не катит разве? Речь не об этом.. Смотри, есть код:
Первая строка помещает в edx указатель на мою структуру. Структуру, которую я сам создал в ИДА, выглядит она приблизительно так: pTList struc ; (sizeof=0x10) field_0 dd ? field_4 dd ? Count dd ? field_C dd ? pTList ends Вторая строка, т.е. mov eax,[edx+8] помещает значение поля Count моей структуры в eax. var_40 я понятное дело переименую во что-то типа TList, но хочется показать иде, что в edx указатель на мою структуру и соответственно все обращения типа [edx+8] - это ни что иное, как обращение к полям моей структуры. Т.е. хочется добиться замены [edx+8] на pTList.Count причем не ручного а автоматического. |
|
Создано: 16 января 2006 13:14 · Личное сообщение · #6 Лично я делаю так: static Struct_TList() { auto sHandle, sHandle_TObject; auto error; auto STRUCTURE_NAME; auto ID, Address; auto EnumName; // Ïðîñìîòð ñòðóêòó íà íàëè÷èå TObject, åñëè íåò òî ñîçäàòü sHandle_TObject = GetStrucIdByName("TObject_obj"); if(sHandle_TObject == -1) { sHandle_TObject = Struct_TObject(); } STRUCTURE_NAME = "TList_obj"; sHandle = AddStrucEx(-1, STRUCTURE_NAME, 0); if(sHandle == -1) { sHandle = GetStrucIdByName(STRUCTURE_NAME); if(sHandle == -1) { WarningMessage("Unable to create the " + STRUCTURE_NAME + " structure!\n"); return -1; } return sHandle; } // AddStrucMember(sHandle, "pVTBL", 0x00, FF_DWRD, -1, 4); AddStrucMember(sHandle, "pVTBL", 0x00, FF_DWRD + FF_0OFF, -1, 4); AddStrucMember(sHandle, "Items", 0x04, FF_DWRD + FF_0OFF, -1, 4); AddStrucMember(sHandle, "Count", 0x08, FF_DWRD, -1, 4); AddStrucMember(sHandle, "Capacity", 0x0C, FF_DWRD, -1, 4); EnumName="EnumTList"; ID=AddEnum(0, EnumName, 0); if (ID != -1) { Address=0x00; AddConstEx(ID, "TList_Grow", Address, -1); Address=0x04; AddConstEx(ID, "TList_4", Address, -1); Address=0x08; AddConstEx(ID, "TList_8", Address, -1); Address=0x0C; AddConstEx(ID, "TList_10", Address, -1); } return sHandle; } затем просто выбираю из Sumbolic constant |
|
Создано: 16 января 2006 13:15 · Личное сообщение · #7 |
|
Создано: 16 января 2006 13:16 · Личное сообщение · #8 |
|
Создано: 16 января 2006 13:18 · Личное сообщение · #9 |
|
Создано: 26 января 2006 13:46 · Личное сообщение · #10 |
|
Создано: 01 апреля 2006 21:05 · Личное сообщение · #11 |
|
Создано: 01 апреля 2006 22:48 · Личное сообщение · #12 |
|
Создано: 02 апреля 2006 06:06 · Личное сообщение · #13 |
|
Создано: 02 апреля 2006 09:09 · Личное сообщение · #14 |
|
Создано: 02 апреля 2006 10:39 · Личное сообщение · #15 |
|
Создано: 02 апреля 2006 12:12 · Личное сообщение · #16 |
|
Создано: 02 апреля 2006 15:50 · Личное сообщение · #17 YoriCH Определим адрес ??? принадлежащий первому сегменту: long SegStart (long ea); // returns start of the segment // BADADDR if bad address passed получаем стартовый адресс сегмента. Хорошо бы знать как в ИДЕ вызвать перечисление всех сегментов или анализом загаловка файла вытащить порядок сегментов, но это много муторней, т.к. придется вручную анализировать все остальное (есть скрипт он анализирует заголовок и полько процедуру ЕР). dcac_IDA_PE_idc.rar.zip |
|
Создано: 02 апреля 2006 15:52 · Поправил: TretS · Личное сообщение · #18 |
|
Создано: 02 апреля 2006 17:21 · Личное сообщение · #19 |
|
Создано: 03 апреля 2006 00:02 · Личное сообщение · #20 |
|
Создано: 03 апреля 2006 00:11 · Личное сообщение · #21 TretS кстати, он формирует структуры данных для каждой Form. Я имею ввиду типа TForm1_Button3 = 388h TForm1_Label1 = 394h TForm1_Label2 = 3A4h TForm1_Label8 = 3A8h Но в самой программе они автоматически не встают. Их приходиться выставлять самостоятельно. Это было так задумано или просто не ставилась цель все автоматизировать? Сорри, если я слишком навязчиво по нему спрашиваю, просто идея очень хорошая и в первой редакции неплохо вышло, но хотелось бы автоматом многие вещи, чтобы не выставлять их. ----- Есть вопросы ко мне? В личку! |
|
Создано: 03 апреля 2006 13:10 · Личное сообщение · #22 |
|
Создано: 03 апреля 2006 18:30 · Личное сообщение · #23 |
|
Создано: 03 апреля 2006 21:18 · Личное сообщение · #24 YoriCH По поводу автоматической расстановки имен - это действительно (соответствует задумке автора) только на уровне пользовательского кода. Чем глубже в RTL тем все абстрактней. Поэтому по моему главная трудность в определении границы пользовательского кода. Компоненты вероятно попадают в определение пользовательского кода. |
|
Создано: 03 апреля 2006 22:07 · Личное сообщение · #25 TretS Однако только увидел проблему. У проги код разбросан по разным сегментам, так он обрабатывает только один. Прочитал, то что советовал И немного изменив. вроде добился, чтобы по всем сегментам искал. Но я думаю, это еще не все надо посмотреть вариант с прямым назначением имен из структуры данных, как я описывал выше. 92e4_03.04.2006_CRACKLAB.rU.tgz ----- Есть вопросы ко мне? В личку! |
|
Создано: 04 апреля 2006 09:38 · Личное сообщение · #26 |
|
Создано: 04 апреля 2006 09:47 · Личное сообщение · #27 |
|
Создано: 04 апреля 2006 10:55 · Личное сообщение · #28 |
|
Создано: 04 апреля 2006 17:39 · Личное сообщение · #29 |
|
Создано: 04 апреля 2006 19:52 · Поправил: TretS · Личное сообщение · #30 |
. 1 . 2 . >> |
eXeL@B —› Основной форум —› Автоматическое применение структур в IDA |