Реферат: Жесткое внедрение DLL в Windows-программы

return;

}

else

Log->Lines->Add("Достаточно свободного \

места для занесения дополнительной информации.");

Application->ProcessMessages();

5. Финальная часть: Создаем в файле новую таблицу импорта и структуру IMAGE_IMPORT_BY_NAME. Записываем в файл строки с именем нашей библиотеки и импортируемой функции. Вычисляем все необходимые адреса, заносим их в структуры IMAGE_IMPORT_DESCRIPTOR, IMAGE_IMPORT_BY_NAME. Заносим в заголовок новый адрес таблицы импорта.

//1. Копируем старую таблицу импорта в новое место

memcpy(FreePtr, ImportTable, sizeof(IMAGE_IMPORT_DESCRIPTOR)*DLLCounter);

//2.1 Сохраняем строку с именем нашей DLL в старой таблице импорта

//(для экономии места)

memcpy(ImportTable, OUR_DLL_NAME, strlen(OUR_DLL_NAME));

LPDWORD zeroPtr;

(DWORD)zeroPtr = (DWORD)ImportTable + strlen(OUR_DLL_NAME);

//2.2 Сохраняем структуру IMAGE_IMPORT_BY_NAME в старой таблице импорта.

//(так же для экономии места)

IMAGE_IMPORT_BY_NAME myName;

myName.Hint = 0x00;

myName.Name[0] = 0x00;

WORD Hint = 0;

char myFuncName[] = OUR_FUNC_NAME;

hackRec patch;

patch.ZeroDword = NULL;

patch.IAT = ImportRVA + strlen(OUR_DLL_NAME) + sizeof(hackRec);

patch.IATEnd = NULL;

DWORD IIBN_Table;

memcpy(zeroPtr, &patch, sizeof(patch)); (DWORD)zeroPtr += sizeof(patch);

memcpy(zeroPtr, &Hint, sizeof(WORD)); (DWORD)zeroPtr += sizeof(WORD);

memcpy(zeroPtr, myFuncName, strlen(myFuncName)+1 );

К-во Просмотров: 2265
Бесплатно скачать Реферат: Жесткое внедрение DLL в Windows-программы