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; }
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; }