//! Startup entry-point. int main(int argc, char *argv[]) { char szMircFilename[MAX_PATH], szStunTourFilename[MAX_PATH]; char *filepart; if ((!GetFullPathName("mirc.exe", sizeof(szMircFilename), szMircFilename, &filepart) && !GetFullPathName("mirc32.exe", sizeof(szMircFilename), szMircFilename, &filepart)) || GetFileAttributes(szMircFilename) == -1L) { MessageBox(NULL, "Could not locate MIRC.EXE or MIRC32.EXE executable.", "Unable to start", MB_OK | MB_ICONERROR); return -1; } if (!GetFullPathName("stuntour.dll", sizeof(szStunTourFilename), szStunTourFilename, &filepart) || GetFileAttributes(szMircFilename) == -1L) { MessageBox(NULL, "Could not locate STUNTOUR.DLL interception library.", "Unable to start", MB_OK | MB_ICONERROR); return -1; } STARTUPINFO si; PROCESS_INFORMATION pi; memset(&si, 0, sizeof(STARTUPINFO)); memset(&pi, 0, sizeof(PROCESS_INFORMATION)); si.cb = sizeof(STARTUPINFO); if (!DetourCreateProcessWithDllA(szMircFilename, NULL, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi, szStunTourFilename, NULL)) { MessageBox(NULL, "Unable to launch mIRC with an injected library.", "Unable to start", MB_OK | MB_ICONERROR); return 1; } return 0; }
bool injectDLL(std::string processPath, std::string dllPath) { STARTUPINFOA _StartupInfo; PROCESS_INFORMATION _Information; ZeroMemory(&_StartupInfo, sizeof(STARTUPINFOA)); ZeroMemory(&_Information, sizeof(PROCESS_INFORMATION)); _StartupInfo.cb = sizeof(STARTUPINFOA); TCHAR pwd[MAX_PATH]; GetCurrentDirectory(MAX_PATH, pwd); if (DetourCreateProcessWithDllA(processPath.c_str(), NULL, NULL, NULL, TRUE, CREATE_DEFAULT_ERROR_MODE, NULL, pwd, &_StartupInfo, &_Information, dllPath.c_str(), NULL)) { return 1; } else { return 0; } }