#include "pch.h" #include "INJECT.h" #include <fstream>
void _stdcall INJECTCode() { unsigned address = 0xCCCCCCCC; PREMOTE_DATA p = (PREMOTE_DATA)address; p->f_LoadLibrary(p->dllName); }
BOOL INJECT::StartProcess(const wchar_t* GameExe, const wchar_t* GamePath, wchar_t* GameCmds, PROCESS_INFORMATION* LPinfo) { STARTUPINFO si{}; si.cb = sizeof(si);
return CreateProcess( GameExe, GameCmds, NULL, NULL, TRUE, CREATE_SUSPENDED, NULL, GamePath, &si, LPinfo ); }
void INJECT::UnloadImage(void* _data) { delete[] _data; }
DWORD INJECT::GetEntryPoint(const wchar_t* filename) { void* image = ImageLoad(filename);
IMAGE_DOS_HEADER* dosHeader = (IMAGE_DOS_HEADER*)image; unsigned PEAddress = dosHeader->e_lfanew + unsigned(image);
IMAGE_NT_HEADERS* ntHeader = (IMAGE_NT_HEADERS*)PEAddress; DWORD dEntryPoint = ntHeader->OptionalHeader.AddressOfEntryPoint;
UnloadImage(image); return dEntryPoint; }
BOOL INJECT::CreateRemoteData(HANDLE hProcess, const wchar_t* dllName) { LPVOID adrRemote = VirtualAllocEx(hProcess, 0, 0x3000, MEM_COMMIT, PAGE_EXECUTE_READWRITE); SIZE_T lwt; LPVOID adrRemoteData = LPVOID((unsigned)adrRemote + 0x2000); _REMOTE_DATA remoteData{}; CodeRemoteData(&remoteData, dllName); WriteProcessMemory(hProcess, adrRemoteData, &remoteData, sizeof(remoteData), &lwt); char _code[0x200]; memcpy(_code, INJECTCode, sizeof(_code)); for (int i = 0; i < 0x100; i++) { unsigned* pcode = (unsigned*)(&_code[i]); if (pcode[0] == 0xCCCCCCCC) { pcode[0] = (unsigned)adrRemoteData; break; } }
WriteProcessMemory(hProcess, adrRemote, _code, 0x200, &lwt); DWORD dwThreadId; HANDLE remoteHd1 = CreateRemoteThread(hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)adrRemote, NULL, 0, &dwThreadId); WaitForSingleObject(remoteHd1, INFINITE); return 0; }
void INJECT::CodeRemoteData(PREMOTE_DATA _data, const wchar_t* dllName) { short length{}; for (length = 0; dllName[length]; length++);
HMODULE hKernel = LoadLibrary(_T("kernel32.dll")); _data->f_LoadLibrary = (_LoadLibrary)GetProcAddress(hKernel, "LoadLibraryW"); memcpy(_data->dllName, dllName, (length + 1) * 2);
}
void* INJECT::ImageLoad(const wchar_t* filename) { std::ifstream streamReader(filename, std::ios::binary); streamReader.seekg(0, std::ios::end); unsigned filesize = streamReader.tellg(); char* _data = new char[filesize]; streamReader.seekg(0, std::ios::beg); streamReader.read(_data, filesize); streamReader.close(); return _data; }
|