Метод, которым я больше всего знаком, был w как описано Джеффери Рихтером в Programming Applications for Microsoft Windows. Я упоминаю об этом, потому что, даже если вы не получите доступ к самой книге, вероятно, есть образец кода, плавающий вокруг. Я думаю, он, возможно, также написал несколько журнальных статей. Он также упоминает пару альтернативных подходов, о которых я опишу только один, из памяти. Он также, возможно, написал некоторые статьи MSJ/MSDN, которые имеют отношение к делу.
В любом случае, основная идея состоит в том, чтобы вызвать процесс, который вы хотите загрузить в DLL, для вызова вызова LoadLibrary
. Это делается с использованием CreateRemoteThread
с адресом LoadLibary
для lpStartAddress
и адресом строки, назвавшей вашу DLL для lpParameter
. Организация и определение строки выполняется с помощью VirtualAllocEx
для выделения некоторой памяти в удаленном процессе и WriteProcessMemory
, чтобы заполнить ее строкой.
псевдокод:
void InjectDllIntoProcess(DWORD processId, char *dllName)
{
HANDLE hRemoteProcess = OpenProcess(
// Assumes that dll and function addresses are the same in different processes
// on the same system. I think that this is true even with ASLR, only issue I
// can think of is to make sure that the source and target process are both 32
// or both 64 bit, not a mixture.
// Note that it is asking for the ASCII version
HMODULE hDll = LoadLibrary(_T("Kernel32.dll"));
void *loadLibAddr = GetProcAddress(hDll, _T("LoadLibraryA"));
// Inject the DLL name
char * remoteAddr =
(char *)VirtualAllocEx(hRemoteProcess, NULL, strlen(dllName) + 1, ...
WriteProcessMemory(hRemoteProcess, remoteAddr, dllName, strlen(dllName) + 1 ...
CreateRemoteThread(hRemoteProcess, ??, 0, loadLibAddr, remoteAddr, ...
}
ИТАК, если он загружает мой DLL он будет работать мой код, как если бы это был его собственным? – blood
Все, что будет, это загрузить библиотеку. Это означает, что он будет вызывать DLL DllMain для инициализации. Оттуда вы можете сделать все, что вам нужно. Поток, который вы создаете для вызова LoadLibrary, умрет после вызова вызова LoadLibrary. – torak
Хм хороший xD тоже все это в этой книге? http://www.amazon.com/Programming-Applications-Microsoft-Windows-General/dp/1572319968 Я мог бы купить его, если у него все это, что еще у него есть? – blood