Есть DLL во всех функциях которой статическая база EBP. стандартное начало функции c распознаной базой сегмента: arg_1C = dword ptr 20h arg_2A = word ptr 2Eh arg_34 = dword ptr 38h arg_3C = dword ptr 40h arg_XX Можно переименовать в понятную переменную из под этой функции вызываются езе 500 функций, у которых тажа база lea edx, [ebp+arg_51C6] jmp ds:off_990DEF74[eax*4] off_990DEF74: dd offset loc_9910982B dd offset sub_99108C52 dd offset sub_991096E6 dd offset sub_9910B0A1 dd offset sub_9910B2A9 ВОПРОС: Как втолдычить иде чтоб она распознавала все функции относительно материнской базы (другими словами чтоб подхватила для всех материнский Stack frame), или хотябы когда выбираеш распознать аргументы относительно базы подхватывала измененные имена, тоесть если есть arg_1C=dword ptr 20h она распознавала как hFile1=dword ptr 20h
Asterix Чтото похожее но не работает, может изза того что там описан метот в отладке. А у меня просто образ, и нужно какимто образом все функции привязать к одному и томуже Stack frame, чтоб один раз там проименовать переменные, и во всех функциях будут теже названия
В данном случае похоже Ида просто неправильно сконвертировала адреса переходов в отдельные функции. На самом деле sub_99108C52 и т.д. - это всё еще продолжение главной функции. Проще всего это исправить так: 1) ставишь якорь (Alt-L) сразу за неправильно определенным концом главной функции (скорее всего это у тебя будет sub_99108C52) 2) находишь самую последнюю из функций (скорее всего последняя запись в jump table) и переходишь в ее конец. 3) андефайнишь (U) всё это дело. 4) тут же определяешь настоящее окончание функции (E) 5) можно теперь сконвертировать все разандефайнутое обратно в код.
reverser Не все так просто 1) Если так ундефайнить то нужно уже весь код 2) Функций больше 500 они идут не по порядку, и разбросаны по разным частям кода, тоесть не все в одном месте. lea edx, [ebp+arg_51C6] jmp ds:off_990DEF74[eax*4] endp. ... some procedures ... off_990DEF74: dd offset loc_9910982B dd offset sub_99108C52 dd offset sub_991096E6 dd offset sub_9910B0A1 dd offset sub_9910B2A9 3) Есть такиеже материнские подфункции из под которых опятьже вызываются еще 100-150 функций такимже методом Мне нужно полностю все функции закрепить за одной базой (тогда я смогу отредактировать Stack frame как мне понравится), так как значение EBP не изменяется ни в одной функции или поразмечать подфункции как Start of function chunk for MATHER_FUNC End of function chunk for MATHER_FUNC Тогда ида определяет все нормально, только у меня она всего 3 подфункции сама распознала.
Вобщем отвечаю сам по своей проблеме если вдруг ктонибудь наткнется на туже проблему. Оказывается все решается как всегда элементарно, в моем случае через использование IDA структур. 1) открываем окно со структурой, нажимаем ins создаем новую структуру 00000000 wasm struc ; (sizeof=0x38) 00000000 AAA dd ? 00000004 BBB dd ? 00000008 CCC dd ? 0000000C field_C dd ? 00000010 field_10 dd ? 00000014 field_14 dd ? 00000018 field_18 dd ? 0000001C field_1C dd ? 00000020 field_20 dd ? 00000024 field_24 dd ? 00000028 field_28 dd ? 0000002C field_2C dd ? 00000030 field_30 dd ? 00000034 field_34 dd ? 00000038 wasm ends 2) выделяем необходимый код Код (Text): mov eax, [ebp+0] push edx mov edx, [ebp+10h] sub edx, 4 push edx add edx, [ebp+525Ah] call sub_6 pop dword ptr [ebp+10h] pop edx mov eax, [ebp+4] push edx mov edx, [ebp+10h] sub edx, 4 push edx add edx, [ebp+525Ah] call sub_6 pop dword ptr [ebp+10h] pop edx mov eax, [ebp+8] push edx mov edx, [ebp+10h] sub edx, 4 push edx add edx, [ebp+525Ah] call sub_6 3. Жмем T и выбираем из списка нужную структуру нужный регистр относительно которого будет применена структура и жмем ок и получаем понятный код Код (Text): mov eax, [ebp+wasm.AAA] push edx mov edx, [ebp+wasm.field_10] sub edx, 4 push edx add edx, [ebp+(wasm.field_18+5242h)] call sub_6 pop [ebp+wasm.field_10] pop edx mov eax, [ebp+wasm.BBB] push edx mov edx, [ebp+wasm.field_10] sub edx, 4 push edx add edx, [ebp+(wasm.field_18+5242h)] call sub_6 pop [ebp+wasm.field_10] pop edx mov eax, [ebp+wasm.CCC] push edx mov edx, [ebp+wasm.field_10] sub edx, 4 push edx add edx, [ebp+(wasm.field_18+5242h)] call sub_6