diff options
Diffstat (limited to 'InjectionProxy64/main.cpp')
-rw-r--r-- | InjectionProxy64/main.cpp | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/InjectionProxy64/main.cpp b/InjectionProxy64/main.cpp new file mode 100644 index 00000000..f338f910 --- /dev/null +++ b/InjectionProxy64/main.cpp @@ -0,0 +1,40 @@ +#include <string> +#include <Windows.h> + +#define DLL_NAME L"Northstar.dll" + +int main(int argc, char** argv) +{ + // this a proxy process used for injecting into titanfall, since launchers are 32bit you can't inject from those into 64bit titanfall + // dont bother to do any error checking here, just assume it's getting called right + DWORD pid = std::stoi(argv[0]); + DWORD threadId = std::stoi(argv[1]); + + HANDLE process = OpenProcess(PROCESS_ALL_ACCESS, false, pid); + HANDLE thread = OpenThread(THREAD_ALL_ACCESS, false, threadId); + + HMODULE hKernel32 = GetModuleHandleW(L"kernel32.dll"); + LPTHREAD_START_ROUTINE pLoadLibraryW = (LPTHREAD_START_ROUTINE)GetProcAddress(hKernel32, "LoadLibraryW"); + + SIZE_T dwLength = (wcslen(DLL_NAME) + 1) * 2; + LPVOID lpLibName = VirtualAllocEx(process, NULL, dwLength, MEM_COMMIT, PAGE_READWRITE); + + SIZE_T written = 0; + WriteProcessMemory(process, lpLibName, DLL_NAME, dwLength, &written); + + HANDLE hThread = CreateRemoteThread(process, NULL, NULL, pLoadLibraryW, lpLibName, NULL, NULL); + + WaitForSingleObject(hThread, INFINITE); + + // TODO: need to call initialisenorthstar in the new process + // (this does not currently work!!! ) + //LPTHREAD_START_ROUTINE pInitNorthstar = (LPTHREAD_START_ROUTINE)GetProcAddress((HMODULE)lpLibName, "InitialiseNorthstar"); + //HANDLE hInitThread = CreateRemoteThread(processInfo.hProcess, NULL, NULL, pInitNorthstar, NULL, NULL, NULL); + //WaitForSingleObject(hInitThread, INFINITE); + //CloseHandle(hInitThread); + + ResumeThread(thread); + CloseHandle(hThread); + + VirtualFreeEx(process, lpLibName, dwLength, MEM_RELEASE); +}
\ No newline at end of file |