//-------------------------------------------------------------------------- // main program int _tmain(int argc, _TCHAR* argv[]) { if (argc<2) { PrintUsage(); return 0; } // get the full path of ropguarddll.dll char dllpath[1000]; char *filename; if (!GetModuleFileName(NULL, dllpath, 980)) { printf("Error: could not obtain current executable path\n"); return 0; } filename = strrchr(dllpath,'\\'); if(!filename) { printf("Error: could not obtain current executable path\n"); return 0; } filename++; strcpy(filename, "ropsettings.txt"); ropSettings = new ROPSettings(); ReadROPSettings(dllpath); strcpy(filename, "ropguarddll.dll"); //if the first argument is a number it's considered to be a PID if (IsNumeric(argv[1])) { //protect existing process GuardExistingProcess(atol(argv[1]), dllpath); } else { // create new protected process if (GetROPSettings()->waitEntryPoint) { CreateProcessWithDll(argv[1], dllpath, true); } else { CreateProcessWithDll(argv[1], dllpath, false); } } return 0; }
int __cdecl main(int argc, char **argv) { BOOLEAN fNeedHelp = FALSE; PCHAR pszScript = NULL; char szDllName[MAX_PATH]; for (int arg = 1; arg < argc && (argv[arg][0] == '-' || argv[arg][0] == '/'); arg++) { CHAR *argn = argv[arg] + 1; CHAR *argp = argn; while (*argp && *argp != ':') argp++; if (*argp == ':') *argp++ = '\0'; switch (argn[0]) { case 'p': case 'P': pszScript = argp; puts( pszScript ); break; case 'h': case 'H': case '?': fNeedHelp = TRUE; break; default: fNeedHelp = TRUE; printf("withdll.exe: Bad argument: %s\n", argv[arg]); break; } } if (arg >= argc) { fNeedHelp = TRUE; } if (fNeedHelp) { PrintUsage(); return 1; } ////////////////////////////////////////////////////////////////////////// STARTUPINFO si; PROCESS_INFORMATION pi; CHAR szCommand[2048]; CHAR szExe[1024]; CHAR szFullExe[1024] = "\0"; PCHAR pszFileExe = NULL; ZeroMemory(&si, sizeof(si)); ZeroMemory(&pi, sizeof(pi)); si.cb = sizeof(si); szCommand[0] = L'\0'; strcpy(szExe, argv[arg]); for (; arg < argc; arg++) { if (strchr(argv[arg], ' ') != NULL || strchr(argv[arg], '\t') != NULL) { strcat(szCommand, "\""); strcat(szCommand, argv[arg]); strcat(szCommand, "\""); } else { strcat(szCommand, argv[arg]); } if (arg + 1 < argc) strcat(szCommand, " "); } printf("adderload.exe: Starting: `%s'\n\n", szCommand); fflush(stdout); SetLastError(0); SearchPath(NULL, szExe, ".exe", arrayof(szFullExe), szFullExe, &pszFileExe); GetModuleFileName(NULL, szDllName, MAX_PATH - 1); std::string dllName = std::string( szDllName ); dllName.erase( dllName.rfind("\\"), dllName.size() ); dllName.append( "\\DLLs\\_adder.dll" ); if (!CreateProcessWithDll(szFullExe[0] ? szFullExe : NULL, szCommand, NULL, NULL, TRUE, CREATE_DEFAULT_ERROR_MODE, NULL, NULL, &si, &pi, dllName.c_str(), "AdderProcessStartup", pszScript, NULL)) { printf("adderload.exe: CreateProcessWithDll failed: %d\n", GetLastError()); ExitProcess(2); } WaitForSingleObject(pi.hProcess, INFINITE); DWORD dwResult = 0; if (!GetExitCodeProcess(pi.hProcess, &dwResult)) { printf("adderload.exe: GetExitCodeProcess failed: %d\n", GetLastError()); dwResult = 3; } return dwResult; }