Подскажите какие изменения в Import Address Table на x64 по сравнению с x86? Вот этот кусок кода под x86 работает отлично : Код (Text): while ( pImportDesc->FirstThunk ) { IMAGE_THUNK_DATA* pThunk = (IMAGE_THUNK_DATA*)((BYTE*)hMod + pImportDesc->OriginalFirstThunk); int n = 0; while ( pThunk->u1.Function ) { char* pszFunName = (char*)((BYTE*)hMod + (DWORD)pThunk->u1.AddressOfData + 2); PDWORD lpAddr = (DWORD*)((BYTE*)hMod + pImportDesc->FirstThunk) + n; if(strcmp(pszFunName, funcName) == 0) { DWORD ret = *lpAddr; *(DWORD *)lpAddr = newFunc; return ret; } ++n; ++pThunk; } ++pImportDesc; } Но под x64 я получаю неверный адрес lpAddr для заданной функции pszFunName...Конкретно для ZombifyActCtx я получаю адрес GetCurrentProcessId...
Нет разницы кроме NT_HEADER_64 (OptionalHeader) Ты не правильно парсиш импорт, почитайте или возьмите готовый .
Подскажите пожалуйста как захучить API в IAT из dll,подгружаемой в процесс? Вроде делаю всё верно,но в некоторых модулях перехватываются не все API,а в некоторых и вовсе ни одной не могу перехватить... Суть проблемы : в dll_attach получаю базу модуля через GetModuleHandle(NULL) и от неё начинаю шаманство с IAT,функции нужные находятся,адреса валидные...Точно знаю,что целевой процесс вызывает те API,которые пытаюсь перехватить,но...безуспешно...Если же перехватываю API по тому же алгоритму,но только пишу EXEшник,то всё отлично работает...
Короче проблема такая - с целью полного контроля вызова API заменяю её адрес в IAT КАЖДОГО ЗАГРУЖЕННОГО В АП ПРОЦЕССА МОДУЛЯ на свой адрес...НО при это приложение начинает работать нестабильно - пропадают элементы GUI и т.п...Как можно решить эту проблему?