예제 #1
0
        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)}");
        }
예제 #2
0
        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);
        }
예제 #8
0
        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);
        }
예제 #12
0
        /// <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"]);
            }
        }
예제 #13
0
        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");
                            }
                        }
                    }
                }
            }
        }