1.技术实现背景
在C++代码中, 如果要实现将一个Dll高效的注入到多个进程中, 可以定义一个HashMap结构, 在该结构中, 键名用来保存多个进程的名称, 而对应的键值可以对应的保存一个或多个DLL路径, 这个HashMap结构定义如下:
unordered_map injectionMap;
而向其填充的键和键值参考如下:
injectionMap["taskmgr.exe"] = { "C:\Users\Public\mscde.dll","C:\Users\Public\msc23.dll"};
injectionMap["explorer.exe"] = { "C:\Users\Public\mscde.dll" };
injectionMap["regedit.exe"] = { "C:\Users\Public\mscde.dll" };
injectionMap["notepad.exe"] = { "C:\Users\Public\mscde.dll" };
在该结构中, 每个进程可以对应注入的一个或多个Dll, 实际上键值是一个字符串数组。
这里设计一个多DLL注入器的函数如下:
int injectDlls(unordered_map injectionMap) {
for (auto& injectRow : injectionMap) {
for (auto& vectorDLL : injectRow.second) {
injectDLL(vectorDLL, getPIDbyProcName(injectRow.first));
}
cout