绕过web端定时操作检测

This commit is contained in:
小白猿
2023-06-19 21:42:50 +08:00
parent 72e25b5af7
commit 6f5ae1664b
+39 -2
View File
@@ -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;