private static void ShowResults() { ChallengeSolver challengeSolver = new ChallengeSolver(); Console.WriteLine($"First challenge result: {challengeSolver.Solve(1, 2020)}"); Console.WriteLine($"Second challenge result: {challengeSolver.Solve(2, 2020)}"); }
private string CloudFlareChallengeSolverSolve(string challengePageContent, Uri uri) { var solution = ChallengeSolver.Solve(challengePageContent, uri.Host); string clearanceUri = uri.Scheme + Uri.SchemeDelimiter + uri.Host + ":" + uri.Port + solution.ClearanceQuery; return(clearanceUri); }
public void SolveReturnsClearancePage() { var pageContent = JavaScriptData + FormData; var solution = ChallengeSolver.Solve(pageContent, Host); Assert.AreEqual(ClearancePage, solution.ClearancePage); }
public void SolveReturnsPass() { var pageContent = JavaScriptData + FormData; var solution = ChallengeSolver.Solve(pageContent, Host); Assert.AreEqual(Pass, solution.Pass); }
public void SolveReturnsVerificationCode() { var pageContent = JavaScriptData + FormData; var solution = ChallengeSolver.Solve(pageContent, Host); Assert.AreEqual(VerificationCode, solution.VerificationCode); }
public void SolveReturnsValidAnswer() { var pageContent = JavaScriptData + FormData; var solution = ChallengeSolver.Solve(pageContent, Host); Assert.AreEqual(ValidAnswer, solution.Answer); }
public void SolveReturnsPass() { var pageContent = IntegerChallengeScript + Form; var solution = ChallengeSolver.Solve(pageContent, Host); Assert.AreEqual(Pass, solution.Pass); }
public void SolveReturnsValidFloatAnswer() { var pageContent = FloatChallengeScript + Form; var solution = ChallengeSolver.Solve(pageContent, Host); Assert.AreEqual(ValidFloatAnswer, solution.Answer); }
public void SolveReturnsValidClearanceQuery() { var pageContent = JavaScriptData + FormData; var solution = ChallengeSolver.Solve(pageContent, Host); Assert.AreEqual( $"{ClearancePage}?jschl_vc={VerificationCode}&pass={Pass}&jschl_answer={ValidAnswer}", solution.ClearanceQuery); }
public void SolveReturnsValidClearanceQuery() { var pageContent = IntegerChallengeScript + Form; var solution = ChallengeSolver.Solve(pageContent, Host); Assert.AreEqual( $"{ClearancePage}?s={Uri.EscapeDataString(S)}&jschl_vc={VerificationCode}&pass={Pass}&jschl_answer={ValidIntegerAnswer}", solution.ClearanceQuery); }
public void SolveReturnsValidIntegerAnswer() { var pageContent = IntegerChallengeScript + Form; var solution = ChallengeSolver.Solve(pageContent, Host); Assert.AreEqual(ValidIntegerAnswer, solution.Answer); var solutionCustomPort = ChallengeSolver.Solve(pageContent, Host, CustomPort); Assert.AreEqual(_validIntegerAnswerCustomPort, solutionCustomPort.Answer); }
/// <summary> /// Solve the CloudFlare challenge /// </summary> /// <param name="response">Response from the site</param> /// <param name="html">HTML text of response</param> /// <returns></returns> private async Task SolverCloudFlare(HttpWebResponse response, string html) { var scheme = response.ResponseUri.Scheme; var host = response.ResponseUri.Host; var port = response.ResponseUri.Port; var solution = ChallengeSolver.Solve(html, host); var clearanceUri = $"{scheme}://{host}:{port}{solution.ClearanceQuery}"; // Save the cookies from response SetTheCookie(response.Headers["Set-Cookie"]); await Task.Delay(5000); // Make the request to specific URL which should be solved var request = CreateRequest(clearanceUri); request.CookieContainer = null; // This one should return the ClearanceCookieName. Use them for new request using (HttpWebResponse clearanceResponse = (HttpWebResponse)request.GetResponse()) { SetTheCookie(clearanceResponse.Headers["Set-Cookie"]); } }
static async Task MainAsync() { Console.ForegroundColor = ConsoleColor.White; var client = new RestClient("http://htf2018.azurewebsites.net"); var request = new RestRequest("challenges", Method.GET); var response = await client.ExecuteTaskAsync <Challenge>(request); if (response.IsSuccessful) { if (response.Data.Identifier == Identifier.Challenge01) { var answer = new Answer { ChallengeId = response.Data.Id, Values = new List <Value> { new Value { Name = "name", Data = "DoodPaard" }, new Value { Name = "secret", Data = "levendpaard!" } } }; var postRequest = new RestRequest("challenges", Method.POST); postRequest.AddJsonBody(answer); var postResponse = await client.ExecuteTaskAsync <Response>(postRequest); if (postResponse.IsSuccessful) { Console.WriteLine($"{postResponse.Data.Identifier} - {postResponse.Data.Status}"); var identification = postResponse.Data.Identification; for (int i = 2; i < 20; i++) { await Task.Delay(1500); var overviewType = typeof(Overview); var challengePropertyName = $"Challenge{i:D2}"; var challengePropertyInfo = overviewType.GetProperty(challengePropertyName); var progress = (Progress)challengePropertyInfo.GetValue(postResponse.Data.Overview); var challengeUrl = progress.Entry.Replace("htf2018.azurewebsites.net/", ""); var challengeRequest = new RestRequest(challengeUrl, Method.GET); challengeRequest.AddHeader("htf-identification", identification); var challengeResponse = await client.ExecuteTaskAsync <Challenge>(challengeRequest); if (challengeResponse.IsSuccessful) { Console.WriteLine(); Console.WriteLine($"{challengeResponse.Data.Identifier}"); Console.WriteLine($"{challengeResponse.Data.Description}"); foreach (var inputValue in challengeResponse.Data.Question.InputValues) { Console.WriteLine($"INPUTVALUE: {inputValue.Name} - {inputValue.Data}"); } Console.WriteLine(); Console.WriteLine("EXAMPLE"); Console.WriteLine(); foreach (var inputValue in challengeResponse.Data.Example.Question.InputValues) { Console.WriteLine($"INPUTVALUE: {inputValue.Name} - {inputValue.Data}"); } foreach (var value in challengeResponse.Data.Example.Answer.Values) { Console.WriteLine($"OUTPUTVALUE: {value.Name} - {value.Data}"); } await Task.Delay(1500); var challengeAnswer = new Answer { ChallengeId = challengeResponse.Data.Id, Values = _solver.Solve(challengeResponse.Data.Identifier, challengeResponse.Data.Question.InputValues) }; var challengePostRequest = new RestRequest(challengeUrl, Method.POST); challengePostRequest.AddJsonBody(challengeAnswer); challengePostRequest.AddHeader("htf-identification", identification); var challengePostResponse = await client.ExecuteTaskAsync <Response>(challengePostRequest); if (challengePostResponse.IsSuccessful) { if (challengePostResponse.Data.Status == Status.Successful) { Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine($"{challengePostResponse.Data.Identifier} - {challengePostResponse.Data.Status}"); Console.ForegroundColor = ConsoleColor.White; } else { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine($"{challengePostResponse.Data.Identifier} - {challengePostResponse.Data.Status}"); Console.ForegroundColor = ConsoleColor.White; } } else { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine($"{challengeResponse.Data.Identifier} - ERROR"); Console.ForegroundColor = ConsoleColor.White; } } else { Console.WriteLine($"{challengeResponse.Data.Identifier} - ERROR"); } } } } } }