Moze wstrzykniecie przy odpalaniu? Kiedys taki maly loader sobie zrobilem. Calkiem dobrze sie sprawowal.
Kopiuj
#include "stdafx.h"
#include <iostream>
#include <algorithm>
using namespace std;
#define MAXNAMESIZE 255
string buildFilePath(string path, string fileName) {
string tmp = path + "\\" + fileName, result;
for (int i = 0; i < tmp.size(); i++) {
if (tmp[i] == '\\') {
result += "\\";
result += "\\";
}
else {
result += tmp[i];
}
}
return tmp;
}
PROCESS_INFORMATION startProcess(string exeFilePath, string params) {
STARTUPINFOA lpStartupInfo = { sizeof(lpStartupInfo) };
PROCESS_INFORMATION lpProcessInfo;
memset(&lpStartupInfo, 0, sizeof(lpStartupInfo));
memset(&lpProcessInfo, 0, sizeof(lpProcessInfo));
CreateProcessA(exeFilePath.c_str(),
(LPSTR) params.c_str(), NULL, NULL,
NULL, NULL, NULL, NULL,
&lpStartupInfo,
&lpProcessInfo);
return lpProcessInfo;
}
int main() {
char folderPath[MAX_PATH], dllName[MAXNAMESIZE], exeName[MAXNAMESIZE], params[MAXNAMESIZE];
GetCurrentDirectoryA(MAX_PATH, folderPath);
string configFilePath = buildFilePath(folderPath, "loader.cfg");
GetPrivateProfileStringA("Loader", "dllName", "", dllName, MAXNAMESIZE, configFilePath.c_str());
GetPrivateProfileStringA("Loader", "exeName", "", exeName, MAXNAMESIZE, configFilePath.c_str());
GetPrivateProfileStringA("Loader", "params", "", params, MAXNAMESIZE, configFilePath.c_str());
string exeFilePath = buildFilePath(folderPath, exeName);
string dllFilePath = buildFilePath(folderPath, dllName);
if (exeName[0] == '\0') {
cerr << "Unable to load config file.\n" + configFilePath + '\n';
system("pause");
return -1;
}
PROCESS_INFORMATION pInfo = startProcess(exeFilePath, params);
HMODULE hKernel32 = GetModuleHandleA("KERNEL32");
void* pLibRemote;
pLibRemote = VirtualAllocEx(pInfo.hProcess, NULL, MAXNAMESIZE, MEM_COMMIT, PAGE_READWRITE);
WriteProcessMemory(pInfo.hProcess, pLibRemote, (void*) dllFilePath.c_str(), MAXNAMESIZE, NULL);
CreateRemoteThread(pInfo.hProcess, NULL, 0, (LPTHREAD_START_ROUTINE) GetProcAddress(hKernel32, "LoadLibraryA"), pLibRemote, 0, NULL);
return 0;
}
Programik wraz z loader.cfg wrzuca sie do folderu z gra i z niego odpala.
Moznaby rozszerzyc na podpinanie pod procesy pochodne procesu startowanego rowniez. Steama tym odpalalem na przyklad ;) W procesy ktore potem steam odpala mozna wpiac sie rowniez.