Esempio n. 1
0
int
main(int argc, char **argv, char **envp)
{
	struct Session session;
	time_t	t1, t2;

	int tmp = 0;

	if(RegisterHandlers() == -1)
	{
		fprintf(stderr, "[!] Cannot register signal handlers, aborting\n");
		goto cleanup;
	}
	
	InitSession(&session, envp, argv);

	if(ParseArguments(argc, argv, &session) == -1)
	{
		PrintHelp(argv[0]);
		goto cleanup;
	}

	if(OpenLogFile(&session) == -1)
	{
		fprintf(stderr, "[!] Cannot open %s for logging, aborting\n",
			session.logfilename);

		goto cleanup;
	}

	if(PrepareArgv(&session) == -1)
	{
		fprintf(stderr, "[!] Cannot parse arguments\n");
		goto cleanup;
	}
	
	if(InitFuzzingStrings(&session) == -1)
	{
		fprintf(stderr, "[!] Error initializing fuzzing variables\n");
		goto cleanup;
	}

	switch(session.mode)
	{
		/* Smart mode read the file structure from a file */ 
		case MODE_SMART:
		{
			fprintf(stdout, "[%%] Reading headers structure from %s\n",
			session.headers);

			session.headercount = Extract_DataFields(&session);
			break;
		}
		/* ASCII mode read a file and tries to get the right file structure =) */
		case MODE_ASCII:
		{
			fprintf(stdout, "[%%] Reading ASCII structure from %s\n",
				session.input);
			
			session.headercount = Extract_ASCII_Structure(&session);
			break;
		}
	}

	if((session.mode == MODE_ASCII) || (session.mode == MODE_SMART))
	{
		if(!session.headercount)
		{
			fprintf(stderr, "[!] Error loading Offsets from input file\n");
			goto cleanup;
		}

		session.range.low   = 0;
		session.range.high  = session.headercount;
		
		fprintf(stdout, "[%%] Loaded %d fields in headers\n",
			session.headercount);
	}

	tmp = CountFuzzingStrings(&session);
	
	fprintf(stdout, "[%%] Loaded %d fuzzing variables\n", tmp);
	fprintf(stdout, "[%%] Fuzzing from %d to %d\n",	session.range.low,
		session.range.high);
	
	if(session.mode == MODE_BRUTE)
	{
		session.byte = session.range.low;
		tmp         *= session.range.high - session.range.low + 1;
	}
	else
	{
		session.curfield = session.d;
		session.byte     = session.curfield->offset;
		tmp             *= session.headercount;
	}

	PrintLogHeader(&session);

	fprintf(stdout, "[%%] Number of files to be generated %d\n", tmp);
	fprintf(stdout, "[%%] Proceding with fuzzing\n");

	time(&t1);
	StartSession(&session);
	time(&t2);

	fprintf(stdout, "[%%] Time elapsed %f\n", difftime(t2, t1));
	fprintf(stdout, "[%%] Number of succesful executions %d\n", session.exec);
	fprintf(stdout, "[%%] Skipped executions due to fuzzing string size %d\n", session.skipped);
	fprintf(stdout, "[%%] Number of \"bugs\" found: %d\n", session.bugs);
	
	/* Cleanup Resources */
	cleanup:
	{
		FreeFuzzingList(session.f);
		FreeMaps(session.maps);
		CloseLogFile(&session);
	}
	
	return 0;
}
Esempio n. 2
0
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
	int   result    = 0;
	int   test_mode = 0;
	int   do_server = 0;

	if (strstr(lpCmdLine, "-server"))
		ErrLog = fopen("serverlog.txt", "w");
	else
		ErrLog = fopen("errlog.txt", "w");

	PrintLogHeader();

	if (strstr(lpCmdLine, "-test")) {
		Print("  Request TEST mode\n");
		test_mode = 1;
	}

	if (strstr(lpCmdLine, "-fps")) {
		HUDView::ShowFPS(true);
	}

	if (strstr(lpCmdLine, "-dump")) {
		Print("  Request dump dynamic missions\n");
		dump_missions = 1;
	}

	if (strstr(lpCmdLine, "-lan")) {
		Print("  Request LAN ONLY mode\n");
		NetBrokerClient::Disable();
	}

	if (strstr(lpCmdLine, "-server")) {
		do_server = 1;
		Print("  Request Standalone Server Mode\n");
	}

	char* d3dinfo = strstr(lpCmdLine, "-d3d");
	if (d3dinfo) {
		int n = d3dinfo[4] - '0';

		if (n >= 0 && n <= 5)
		VD3D_describe_things = n;

		Print("  D3D Info Level: %d\n", VD3D_describe_things);
	}
	else {
		VD3D_describe_things = 0;
	}


	// FREE VERSION - AUTHORIZATION DISABLED
	/*
::Print("  Checking authorization codes...\n");
if (!Authorization::IsUserAuthorized()) {
	if (!DataLoader::GetLoader()) {
		DataLoader::Initialize();
		DataLoader::GetLoader()->EnableDatafile("content.dat");
	}

	Game* game = new Game();
	game->InitContent();

	MessageBox(0, FormatTextEscape(Game::GetText("main.auth-invalid")).data(), 
					Game::GetText("main.title.error").data(), MB_OK);
	::Print("  Not authorized.\n");

	delete game;
	DataLoader::Close();
}
else {
	::Print("  Authorized\n");
	*/
	try {
		NetLayer net;

		if (do_server) {
			StarServer* server = new(__FILE__,__LINE__) StarServer();

			if (server->Init(hInstance, hPrevInstance, lpCmdLine, nCmdShow))
			result = server->Run();

			Print("\n+====================================================================+\n");
			Print("  Begin Shutdown...\n");

			delete server;
		}

		else {
			Starshatter* stars = 0;
			
			stars = new(__FILE__,__LINE__) Starshatter;
			stars->SetTestMode(test_mode);

			if (stars->Init(hInstance, hPrevInstance, lpCmdLine, nCmdShow))
			result = stars->Run();

			Print("\n+====================================================================+\n");
			Print("  Begin Shutdown...\n");

			delete stars;
		}

		Token::close();

		if (*Game::GetPanicMessage())
		MessageBox(0, Game::GetPanicMessage(), "Starshatter - Error", MB_OK);
	}

	catch (const char* msg) {
		Print("  FATAL EXCEPTION: '%s'\n", msg);
	}
	/* } */

	Memory::Stats();
	Memory::DumpLeaks();
	Memory::CloseLog();

	Print("+====================================================================+\n");
	Print(" END OF LINE.\n");

	fclose(ErrLog);

	return result;
}