向其他程序注入DLL的原理比较简单
就是调用几个windowsAPI,在目标程序中开启一个线程,在这个线程中加载动态库,动态库被加载时会执行初始化的函数,我们就可以在这个初始化函数中对目标程序做任何想做的事情。。。或者让目标程序代替你的程序做一些事情。。
当目标程序注入DLL后,这个负责注入的程序就可以关闭了。
就是调用几个windowsAPI,在目标程序中开启一个线程,在这个线程中加载动态库,动态库被加载时会执行初始化的函数,我们就可以在这个初始化函数中对目标程序做任何想做的事情。。。或者让目标程序代替你的程序做一些事情。。
当目标程序注入DLL后,这个负责注入的程序就可以关闭了。
下面是一个简单的函数,传入目标程序的句柄和要注入的动态库的全路径。
void InjectDLL(HANDLE hProcess, PCWSTR dllFilePathName)
{
int cch = 1 + lstrlenW(dllFilePathName);
int cb = cch * sizeof(wchar_t);
PWSTR PszLibFileRemote = (PWSTR)VirtualAllocEx(hProcess, NULL, cb, MEM_COMMIT, PAGE_READWRITE);
WriteProcessMemory(hProcess, PszLibFileRemote, (PVOID)dllFilePathName, cb, NULL);
HANDLE hThread = CreateRemoteThread(hProcess, NULL, 0, (PTHREAD_START_ROUTINE)LoadLibrary, PszLibFileRemote, 0, NULL);
WaitForSingleObject(hThread, INFINITE);
}
目标程序句柄hProcess获取方法: