Моя цель - выполнить перехват IAT. Я хочу заменить LoadLibraryA
(LLA) своей функцией ModifiedLLA
.
Я пробирался через формат PE и смог найти имена функций для каждого импортированного файла DLL.
Считайте, что это будет моя функция замены:
DWORD ModifiedLLA(char* str){
printf("test\n");
return 0;
}
Рассмотрим следующий код внутри основной функции:
...
//IAT & ILTs have been assigned previously
//Declare pointer to our own function
DWORD(WINAPI *procPtr)(char*);
procPtr = ModifiedLLA;
while(ilt->u1.AddressOfData){
namedata = (PIMAGE_IMPORT_BY_NAME)((DWORD_PTR)imagebase +
(DWORD)ilt->u1.AddressOfData);
//We have found the LoadLibraryA function.
if(strcmp(namedata->Name, "LoadLibraryA") == 0){
//Here we must replace the original LoadLibraryA with procPtr;
break;
}
ilt++;
alt++;
}
...
Вопрос в том, «как я могу назначить procPtr
на адрес LLA »?
Я читал, что когда IMAGE_ORDINAL_FLAG
не установлен, адрес LoadLibraryA
становится iat->u1.Function + namedata
.
Однако я не уверен, какой тип данных мне следует преобразовать (DWORD_PTR)namedata + (DWORD)iat->u1.Function
к. Пробовал закинуть на DWORD_PTR
. Когда я пытаюсь назначить адрес procPtr, я получаю ошибки, такие как: недопустимый аргумент типа унарного '*' (имеет 'DWORD_PTR' {aka 'long long unsigned int'})