Реферат: Вызов функции в другом процессе

{

// Такой функции нет

return NULL;

}

// Индекс это ординал минус база

funcIndex = funcOrdinal - export.Base;

}

if ((funcIndex < 0) || (funcIndex >= export.NumberOfFunctions))

{

// Такой функции нет

return NULL;

}

// Читаем адрес

DWORD funcRVA;

ReadProcessMemory(

hProcess,

baseAddress + export.AddressOfFunctions + funcIndex * sizeof(DWORD),

&funcRVA,

sizeof(funcRVA),

NULL);

// Результат это базовый адрес + RVA

return (baseAddress + funcRVA);

}

ПРИМЕЧАНИЕ

Для оптимизации можно было бы сначала скопировать в свой процесс всю секцию экспорта (размер секции хранится в IMAGE_NT_HEADERS::OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].Size), а потом уже её разбирать. Но, поскольку заметных глазу задержек не возникает, я остановился на текущей реализации.

Пример

В качестве примера я написал три приложения: aggressor.exe, victim.exe и insider.dll. Victim и insider абсолютно пассивны, все действия выполняются aggressor-ом. Aggressor:

запускает victim.exe;

загружает в него insider.dll;

К-во Просмотров: 368
Бесплатно скачать Реферат: Вызов функции в другом процессе