mirror of
https://github.com/openbullet/openbullet.git
synced 2023-10-21 07:33:42 -05:00
Change CLoudflare Lib back to Leaf.xnet
This commit is contained in:
@@ -31,7 +31,7 @@
|
||||
This block only works with HTTP proxies for now.
|
||||
<LineBreak/><LineBreak/>
|
||||
If the Cloudflare challenge needs a reCaptcha to be solved,
|
||||
this block will check if you defined a 2captcha or anti-captcha API Key. If
|
||||
this block will check if you defined a 2captcha API Key. If
|
||||
it finds one, it will be used to solve the challenges. <LineBreak/><LineBreak/>
|
||||
<Span Foreground="{DynamicResource ForegroundCustom}"><Bold>WARNING!</Bold><LineBreak/>
|
||||
This can quickly drain your captcha account if done by mistake!<LineBreak/>
|
||||
|
||||
@@ -5,11 +5,10 @@ using System.Text.RegularExpressions;
|
||||
using System.Windows.Media;
|
||||
using System.Threading;
|
||||
using Jint;
|
||||
using Leaf.xNet;
|
||||
using System.Net;
|
||||
using CloudflareSolverRe;
|
||||
using System.Net.Http;
|
||||
using CloudflareSolverRe.Types;
|
||||
using CloudflareSolverRe.CaptchaProviders;
|
||||
using Leaf.xNet.Services.Cloudflare;
|
||||
using Leaf.xNet.Services.Captcha;
|
||||
|
||||
namespace RuriLib
|
||||
{
|
||||
@@ -76,102 +75,64 @@ namespace RuriLib
|
||||
// If the clearance info is already set and we're not getting it fresh each time, skip
|
||||
if (data.UseProxies)
|
||||
{
|
||||
if(data.Proxy.Clearance != "" && !data.GlobalSettings.Proxies.AlwaysGetClearance)
|
||||
if (data.Proxy.Clearance != "" && data.Proxy.Cfduid != "" && !data.GlobalSettings.Proxies.AlwaysGetClearance)
|
||||
{
|
||||
data.Log(new LogEntry("Skipping CF Bypass because there is already a valid cookie", Colors.White));
|
||||
data.Cookies.Add("cf_clearance", data.Proxy.Clearance);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
var localUrl = ReplaceValues(url, data);
|
||||
var uri = new Uri(localUrl);
|
||||
|
||||
var timeout = data.GlobalSettings.General.RequestTimeout * 1000;
|
||||
|
||||
// We initialize the solver basing on the captcha service available
|
||||
CloudflareSolver cf = null;
|
||||
switch (data.GlobalSettings.Captchas.CurrentService)
|
||||
{
|
||||
case BlockCaptcha.CaptchaService.AntiCaptcha:
|
||||
cf = new CloudflareSolver(new AntiCaptchaProvider(data.GlobalSettings.Captchas.AntiCapToken));
|
||||
break;
|
||||
|
||||
case BlockCaptcha.CaptchaService.TwoCaptcha:
|
||||
cf = new CloudflareSolver(new TwoCaptchaProvider(data.GlobalSettings.Captchas.TwoCapToken));
|
||||
break;
|
||||
|
||||
default:
|
||||
cf = new CloudflareSolver();
|
||||
break;
|
||||
}
|
||||
cf.MaxTries = 3;
|
||||
cf.ClearanceDelay = 3000;
|
||||
|
||||
// Initialize the handler with the Proxy and the previous cookies
|
||||
HttpClientHandler handler = null;
|
||||
|
||||
CookieContainer cookies = new CookieContainer();
|
||||
var request = new HttpRequest();
|
||||
request.IgnoreProtocolErrors = true;
|
||||
request.ConnectTimeout = timeout;
|
||||
request.ReadWriteTimeout = timeout;
|
||||
request.Cookies = new CookieStorage();
|
||||
foreach (var cookie in data.Cookies)
|
||||
cookies.Add(new Cookie(cookie.Key, cookie.Value, "/", uri.Host));
|
||||
request.Cookies.Add(new Cookie(cookie.Key, cookie.Value));
|
||||
|
||||
if (data.UseProxies)
|
||||
{
|
||||
if (data.Proxy.Type != Extreme.Net.ProxyType.Http)
|
||||
switch (data.Proxy.Type)
|
||||
{
|
||||
throw new Exception($"The proxy type {data.Proxy.Type} is not supported by this block yet");
|
||||
case Extreme.Net.ProxyType.Http:
|
||||
request.Proxy = HttpProxyClient.Parse(data.Proxy.Proxy);
|
||||
break;
|
||||
|
||||
case Extreme.Net.ProxyType.Socks4:
|
||||
request.Proxy = Socks4ProxyClient.Parse(data.Proxy.Proxy);
|
||||
break;
|
||||
|
||||
case Extreme.Net.ProxyType.Socks4a:
|
||||
request.Proxy = Socks4AProxyClient.Parse(data.Proxy.Proxy);
|
||||
break;
|
||||
|
||||
case Extreme.Net.ProxyType.Socks5:
|
||||
request.Proxy = Socks5ProxyClient.Parse(data.Proxy.Proxy);
|
||||
break;
|
||||
|
||||
case Extreme.Net.ProxyType.Chain:
|
||||
throw new Exception("The Chain Proxy Type is not supported in Leaf.xNet (used for CF Bypass).");
|
||||
}
|
||||
|
||||
var proxy = new WebProxy(data.Proxy.Proxy, false);
|
||||
|
||||
if (data.Proxy.Username != "")
|
||||
{
|
||||
proxy.Credentials = new NetworkCredential(data.Proxy.Username, data.Proxy.Password);
|
||||
}
|
||||
|
||||
handler = new HttpClientHandler()
|
||||
{
|
||||
Proxy = proxy,
|
||||
CookieContainer = cookies,
|
||||
AllowAutoRedirect = true,
|
||||
AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate
|
||||
};
|
||||
}
|
||||
else
|
||||
{
|
||||
handler = new HttpClientHandler()
|
||||
{
|
||||
CookieContainer = cookies,
|
||||
AllowAutoRedirect = true,
|
||||
AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate
|
||||
};
|
||||
}
|
||||
|
||||
// Initialize the HttpClient with the given handler, timeout, user-agent
|
||||
HttpClient httpClient = new HttpClient(handler);
|
||||
httpClient.Timeout = TimeSpan.FromMinutes(timeout);
|
||||
httpClient.DefaultRequestHeaders.Add("User-Agent", ReplaceValues(userAgent, data));
|
||||
|
||||
// Solve the CF challenge
|
||||
var result = cf.Solve(httpClient, handler, uri, userAgent: ReplaceValues(userAgent, data)).Result;
|
||||
if (result.Success)
|
||||
{
|
||||
data.Log(new LogEntry($"[Success] Protection bypassed: {result.DetectResult.Protection}", Colors.GreenYellow));
|
||||
}
|
||||
else if (result.DetectResult.Protection == CloudflareProtection.Unknown)
|
||||
{
|
||||
data.Log(new LogEntry("Unknown protection, skipping the bypass!", Colors.Tomato));
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new Exception($"CF Bypass Failed: {result.FailReason}");
|
||||
request.Proxy.ReadWriteTimeout = timeout;
|
||||
request.Proxy.ConnectTimeout = timeout;
|
||||
request.Proxy.Username = data.Proxy.Username;
|
||||
request.Proxy.Password = data.Proxy.Password;
|
||||
}
|
||||
|
||||
// Once the protection has been bypassed we can use that httpClient to send the requests as usual
|
||||
var response = httpClient.GetAsync(uri).Result;
|
||||
request.UserAgent = ReplaceValues(userAgent, data);
|
||||
|
||||
var twoCapToken = data.GlobalSettings.Captchas.TwoCapToken;
|
||||
if (twoCapToken != "") request.CaptchaSolver = new TwoCaptchaSolver() { ApiKey = data.GlobalSettings.Captchas.TwoCapToken };
|
||||
|
||||
var response = request.GetThroughCloudflare(new Uri(localUrl));
|
||||
|
||||
// Save the cookies
|
||||
var ck = cookies.GetCookies(uri);
|
||||
var ck = response.Cookies.GetCookies(localUrl);
|
||||
|
||||
var clearance = "";
|
||||
var cfduid = "";
|
||||
@@ -202,31 +163,25 @@ namespace RuriLib
|
||||
// Get headers
|
||||
data.Log(new LogEntry("Received headers:", Colors.DeepPink));
|
||||
var headerList = new List<KeyValuePair<string, string>>();
|
||||
var receivedHeaders = response.Headers.GetEnumerator();
|
||||
var receivedHeaders = response.EnumerateHeaders();
|
||||
data.ResponseHeaders.Clear();
|
||||
|
||||
while (receivedHeaders.MoveNext())
|
||||
{
|
||||
var header = receivedHeaders.Current;
|
||||
var value = header.Value.GetEnumerator();
|
||||
if (value.MoveNext())
|
||||
{
|
||||
data.ResponseHeaders.Add(header.Key, value.Current);
|
||||
data.Log(new LogEntry(header.Key + ": " + value.Current, Colors.LightPink));
|
||||
}
|
||||
data.ResponseHeaders.Add(header.Key, header.Value);
|
||||
data.Log(new LogEntry(header.Key + ": " + header.Value, Colors.LightPink));
|
||||
}
|
||||
|
||||
// Get cookies
|
||||
data.Log(new LogEntry("Received cookies:", Colors.Goldenrod));
|
||||
foreach (Cookie cookie in ck)
|
||||
foreach (Cookie cookie in response.Cookies.GetCookies(localUrl))
|
||||
{
|
||||
if (data.Cookies.ContainsKey(cookie.Name)) data.Cookies[cookie.Name] = cookie.Value;
|
||||
else data.Cookies.Add(cookie.Name, cookie.Value);
|
||||
data.Log(new LogEntry(cookie.Name + ": " + cookie.Value, Colors.LightGoldenrodYellow));
|
||||
}
|
||||
|
||||
// Save the content
|
||||
data.ResponseSource = response.Content.ReadAsStringAsync().Result;
|
||||
data.ResponseSource = response.ToString();
|
||||
data.Log(new LogEntry("Response Source:", Colors.Green));
|
||||
data.Log(new LogEntry(data.ResponseSource, Colors.GreenYellow));
|
||||
}
|
||||
|
||||
@@ -43,12 +43,6 @@
|
||||
<Reference Include="AntiCaptcha, Version=1.1.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\AntiCaptchaAPI.1.1.0\lib\netstandard2.0\AntiCaptcha.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="CloudflareSolverRe, Version=1.0.5.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\CloudflareSolverRe.1.0.5\lib\netstandard1.1\CloudflareSolverRe.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="CloudflareSolverRe.Captcha, Version=1.0.5.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\CloudflareSolverRe.Captcha.1.0.5\lib\netstandard1.1\CloudflareSolverRe.Captcha.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Extreme.Net, Version=1.1.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\Extreme.Net.dll</HintPath>
|
||||
@@ -68,6 +62,9 @@
|
||||
<Reference Include="Jint, Version=0.0.0.0, Culture=neutral, PublicKeyToken=2e92ba9c8d81157f, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Jint.2.11.58\lib\net451\Jint.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Leaf.xNet, Version=5.1.83.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Leaf.xNet.5.1.83\lib\net472\Leaf.xNet.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="LiteDB, Version=4.1.4.0, Culture=neutral, PublicKeyToken=4ee40123013c9f27, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\LiteDB.4.1.4\lib\net40\LiteDB.dll</HintPath>
|
||||
</Reference>
|
||||
|
||||
@@ -3,11 +3,10 @@
|
||||
<package id="2CaptchaAPI" version="1.4.0" targetFramework="net472" />
|
||||
<package id="AngleSharp" version="0.13.0" targetFramework="net472" />
|
||||
<package id="AntiCaptchaAPI" version="1.1.0" targetFramework="net461" />
|
||||
<package id="CloudflareSolverRe" version="1.0.5" targetFramework="net461" />
|
||||
<package id="CloudflareSolverRe.Captcha" version="1.0.5" targetFramework="net461" />
|
||||
<package id="DynamicLanguageRuntime" version="1.2.2" targetFramework="net461" />
|
||||
<package id="IronPython" version="2.7.9" targetFramework="net461" />
|
||||
<package id="Jint" version="2.11.58" targetFramework="net461" />
|
||||
<package id="Leaf.xNet" version="5.1.83" targetFramework="net472" />
|
||||
<package id="LiteDB" version="4.1.4" targetFramework="net461" />
|
||||
<package id="Microsoft.NETCore.Platforms" version="2.2.3" targetFramework="net472" />
|
||||
<package id="Microsoft.Owin" version="4.0.1" targetFramework="net461" />
|
||||
|
||||
Reference in New Issue
Block a user