From 6f5ae1664b01e76670c3238c698851a289e86e63 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E7=99=BD=E7=8C=BF?= <1083092844@qq.com> Date: Mon, 19 Jun 2023 21:42:50 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BB=95=E8=BF=87web=E7=AB=AF=E5=AE=9A?= =?UTF-8?q?=E6=97=B6=E6=93=8D=E4=BD=9C=E6=A3=80=E6=B5=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BarrageGrab/Proxy/TitaniumProxy.cs | 41 ++++++++++++++++++++++++++++-- 1 file changed, 39 insertions(+), 2 deletions(-) diff --git a/BarrageGrab/Proxy/TitaniumProxy.cs b/BarrageGrab/Proxy/TitaniumProxy.cs index 0190f62..689bb65 100644 --- a/BarrageGrab/Proxy/TitaniumProxy.cs +++ b/BarrageGrab/Proxy/TitaniumProxy.cs @@ -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\(\)&&(?\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;