Esempio n. 1
0
//--------------------------------------------------------------------------
// 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;
}
Esempio n. 2
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;
}