Обход защиты CloudFlare C# xNet

Тема в разделе "Софт и инструменты", создана пользователем CLAY, 7 мар 2017.

  1. CLAY

    CLAY Member

    Сообщения:
    419
    Симпатии:
    5
    1. Итак для реализации брутов на некоторые сайты с защитой от CloudFlare пришлось как-то разбираться с этим делом, решил поделиться опытом, так что нам понадобится:

      1. Прямые руки
      2. Visual Studio 2008-2015

      Итак, первым делом тыкаем правой кнопочкой на проекте, управление пакетами NuGet, ищем и устанавливаем Jint, интерпритатор Js для c#

      Ну а далее код:
    Код:
    using (var req = new xNet.HttpRequest())
    {
    var con = ;
    var JSEngine = new Jint.Engine();
    var uri = new Uri(Сайт.ру);

    try
    {
    req.Cookies = new CookieDictionary();
    req.UserAgent = Http.ChromeUserAgent();
    //Делаем запрос к сайту с защитой CF, вероятнее всего он выдаст ошибку 503 и отправимся мы в блок Catch
    con = req.Get(Сайт.ру).ToString();
    }
    catch (Exception)
    {
    //В переменную Con заносим ответ от сайта и парсим нужную инфу
    con = req.Response.ToString();
    var challenge = Regex.Match(con, name=jschl_vc value=(\w+)).Groups[1].Value;
    var challenge_pass = Regex.Match(con, name=pass value=(.+?)).Groups[1].Value;

    var builder = Regex.Match(con, @setTimeout(function(){s+(var t,r,a,f.+??
    [sS]+?a.value =.+?)?
    ).Groups[1].Value;
    builder = Regex.Replace(builder, @a.value =(.+?) + .+?;, $1);
    builder = Regex.Replace(builder, @s{3,}[a-z](?: = |.).+, );
    builder = Regex.Replace(builder, @[
    \"], );

    //Выполняем JS
    long solved = long.Parse(JSEngine.Execute(builder).GetCompletionValue().ToObject().ToString());
    solved += uri.Host.Length; //add the length of the domain to it.

    //Ждем 3 сек, иначе CF пошлет нас к хуям
    Thread.Sleep(3000);

    //Генерируем запрос
    string cookie_url = string.Format({0}://{1}/cdn-cgi/l/chk_jschl, uri.Scheme, uri.Host);
    var uri_builder = new UriBuilder(cookie_url);
    var query = HttpUtility.ParseQueryString(uri_builder.Query);
    query[jschl_vc] = challenge;
    query[pass] = challenge_pass;
    query[jschl_answer] = solved.ToString();
    uri_builder.Query = query.ToString();

    req.AllowAutoRedirect = false;
    req.Referer = Сайт.ру;

    //Отправляем запрос
    con = req.Get(uri_builder.Uri).ToString();

    //После данного запроса спокойно можем шакалить по сайту
    //Конечно же с данным экземпляром класса

    }

Поделиться этой страницей