绕过web端定时操作检测
This commit is contained in:
@@ -8,6 +8,7 @@ using System.Runtime.InteropServices;
|
||||
using System.Security.Cryptography;
|
||||
using System.Security.Cryptography.X509Certificates;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading.Tasks;
|
||||
using BarrageGrab.Proxy.ProxyEventArgs;
|
||||
using Microsoft.Win32;
|
||||
@@ -47,7 +48,7 @@ namespace BarrageGrab.Proxy
|
||||
proxyServer.AfterResponse += ProxyServer_AfterResponse;
|
||||
|
||||
explicitEndPoint = new ExplicitProxyEndPoint(IPAddress.Any, ProxyPort, true);
|
||||
explicitEndPoint.BeforeTunnelConnectRequest += ExplicitEndPoint_BeforeTunnelConnectRequest;
|
||||
explicitEndPoint.BeforeTunnelConnectRequest += ExplicitEndPoint_BeforeTunnelConnectRequest;
|
||||
proxyServer.AddEndPoint(explicitEndPoint);
|
||||
}
|
||||
|
||||
@@ -73,22 +74,58 @@ namespace BarrageGrab.Proxy
|
||||
if (e.SslPolicyErrors == SslPolicyErrors.None)
|
||||
{
|
||||
e.IsValid = true;
|
||||
}
|
||||
}
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
private async Task ProxyServer_BeforeResponse(object sender, SessionEventArgs e)
|
||||
{
|
||||
string uri = e.HttpClient.Request.RequestUri.ToString();
|
||||
string hostname = e.HttpClient.Request.RequestUri.Host;
|
||||
if (e.HttpClient.ConnectRequest?.TunnelType == TunnelType.Websocket)
|
||||
{
|
||||
e.DataReceived += WebSocket_DataReceived;
|
||||
}
|
||||
|
||||
//判断响应内容是否为js application/javascript
|
||||
if (e.HttpClient.Response.ContentType != null &&
|
||||
e.HttpClient.Response.ContentType.Trim().ToLower().Contains("application/javascript") &&
|
||||
hostname == "lf-cdn-tos.bytescm.com"
|
||||
)
|
||||
{
|
||||
var js = await e.GetResponseBodyAsString();
|
||||
|
||||
//修改js,绕过页面无操作检测
|
||||
var reg1 = new Regex(@"start\(\)\{Dt\.enable\(\),this\.tracker&&this\.tracker\.enable\(\)\}");
|
||||
var match = reg1.Match(js);
|
||||
if (match.Success)
|
||||
{
|
||||
js = reg1.Replace(js, "start(){return;Dt.enable(),this.tracker&&this.tracker.enable()}");
|
||||
e.SetResponseBodyString(js);
|
||||
return;
|
||||
}
|
||||
|
||||
var reg2 = new Regex(@"if\(!N.DJ\(\)&&(?<variable>\S).current\)\{");
|
||||
match = reg2.Match(js);
|
||||
if (match.Success)
|
||||
{
|
||||
js = reg2.Replace(js, "if(!N.DJ()&&${variable}.current){return;");
|
||||
e.SetResponseBodyString(js);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private async Task ExplicitEndPoint_BeforeTunnelConnectRequest(object sender, TunnelConnectSessionEventArgs e)
|
||||
{
|
||||
string url = e.HttpClient.Request.RequestUri.ToString();
|
||||
string hostname = e.HttpClient.Request.RequestUri.Host;
|
||||
if (hostname == "lf-cdn-tos.bytescm.com")
|
||||
{
|
||||
e.DecryptSsl = true;
|
||||
return;
|
||||
}
|
||||
|
||||
if (!CheckHost(hostname))
|
||||
{
|
||||
e.DecryptSsl = false;
|
||||
|
||||
Reference in New Issue
Block a user