#include<stdio.h>
#include<iostream>
#include<windows.h>
using namespace std;
int main()
{
cout << "Enter the target's MainWindow name: ";
char* WindowName;
*WindowName = cin.get();
cout << endl;
cout << "Enter dll name: ";
char* DllName;
*DllName = cin.get();
HWND WindowHandle = FindWindow(NULL, WindowName);
DWORD* ProcId = new DWORD;
GetWindowThreadProcessId(WindowHandle, ProcId);
HANDLE ProcHandle = OpenProcess(PROCESS_CREATE_THREAD, FALSE, *ProcId);
LPVOID LoadLibraryAddress = (LPVOID)GetProcAddress(GetModuleHandle("kernel32.dll"), "LoadLibrary");
LPVOID RemoteStringAddress = (LPVOID)VirtualAllocEx(ProcHandle, NULL, strlen(DllName), MEM_RESERVE|MEM_COMMIT, PAGE_READWRITE);
WriteProcessMemory(ProcHandle, (LPVOID)RemoteStringAddress, DllName, strlen(DllName), NULL);
CreateRemoteThread(ProcHandle, NULL, NULL, (LPTHREAD_START_ROUTINE)LoadLibraryAddress, (LPVOID)RemoteStringAddress, NULL, NULL);
CloseHandle(ProcHandle);
return 0;
}
char* WindowName;
*WindowName = cin.get();
DWORD* ProcId = new DWORD;
GetWindowThreadProcessId(WindowHandle, ProcId);
DWORD dwProcId = 0;
GetWindowThreadProcessId(WindowHandle, &dwProcId);
LPVOID LoadLibraryAddress = (LPVOID)GetProcAddress(GetModuleHandle("kernel32.dll"), "LoadLibrary");
HANDLE ProcHandle = OpenProcess(PROCESS_CREATE_THREAD, FALSE, *ProcId);
HANDLE ProcHandle = OpenProcess(PROCESS_VM_OPERATION | PROCESS_VM_WRITE | PROCESS_CREATE_THREAD | PROCESS_QUERY_INFORMATION, PROCESS_VM_READ, FALSE, dwProcId);

BOOL Inject(DWORD pid, LPCSTR dllpath)
{
HANDLE hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
if (!hProc)
{
cout << "OpenProcess failed" << endl;
return FALSE;
}
VOID* remoteStr = VirtualAllocEx(hProc, NULL, strlen(dllpath+1), MEM_COMMIT|MEM_RESERVE, PAGE_READWRITE);
if (!remoteStr)
{
CloseHandle(hProc);
cout << "VirtualAllocEx failed" << endl;
return FALSE;
}
if (!WriteProcessMemory(hProc, remoteStr, dllpath, strlen(dllpath), NULL))
{
VirtualFreeEx(hProc, remoteStr, strlen(dllpath-1), MEM_RELEASE);
CloseHandle(hProc);
cout << "WriteProcessMemory failed" << endl;
return FALSE;
}
LPTHREAD_START_ROUTINE locLLA = (LPTHREAD_START_ROUTINE)GetProcAddress(GetModuleHandleA("kernel32.dll"), "LoadLibraryA");
if (!locLLA)
{
VirtualFreeEx(hProc, remoteStr, strlen(dllpath-1), MEM_RELEASE);
CloseHandle(hProc);
cout << "GetProcAddress failed" << endl;
return FALSE;
}
HANDLE hThread = CreateRemoteThread(hProc, NULL, 0, locLLA, remoteStr, 0, NULL);
if (!hThread)
{
VirtualFreeEx(hProc, remoteStr, strlen(dllpath-1), MEM_RELEASE);
CloseHandle(hProc);
cout << "CreateRemoteThread failed" << endl;
return FALSE;
}
WaitForSingleObject(hThread, INFINITE);
CloseHandle(hThread);
VirtualFreeEx(hProc, remoteStr, strlen(dllpath-1), MEM_RELEASE);
CloseHandle(hProc);
return TRUE;
}
int main()
{
char szWinName[100], szDllName[100];
cout << "Enter the target's MainWindow name: ";
cin << szWinName;
cout << endl
cout << "Enter dll name: ";
cin << szDllName;
cout << endl;
HWND hWnd = FindWindowA(NULL, szWinName);
if (!hWnd)
{
cout << "couldnt find window" << endl;
return 0;
}
DWORD dwID;
GetWindowThreadProcessId(hWnd, &dwID);
if (!dwID)
{
cout << "GetWindowThreadProcessId failed" << endl;
return 0;
}
if (Inject(dwID, szDllName))
{
cout << "injection succeeded" << endl;
}
return 0;
}
push seriesOfDwordsOfSuchThatYouWriteTheDllNameInMultiByte push esp call LoadLibraryA