diff --git a/BarrageGrab/ObjectExtension.cs b/BarrageGrab/ObjectExtension.cs
index a6f76ea..9bf9569 100644
--- a/BarrageGrab/ObjectExtension.cs
+++ b/BarrageGrab/ObjectExtension.cs
@@ -7,6 +7,7 @@ using System.Threading.Tasks;
using System.Web;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
+using static ProtoBuf.Serializer;
namespace BarrageGrab
{
@@ -359,4 +360,75 @@ namespace BarrageGrab
}
}
+
+ ///
+ /// 模式匹配相关扩展方法
+ ///
+ public static class PatternMatchExtensions
+ {
+ ///
+ /// 判断是否匹配任意一个通配符
+ ///
+ /// 要匹配的字符串
+ /// 通配符表达式数组
+ /// 是否匹配
+ public static bool WildcardMatchAny(this string str, params string[] patterns)
+ {
+ return patterns.Any(x => x.WildcardMatch(str));
+ }
+
+ ///
+ /// 判断是否匹配通配符
+ ///
+ /// 通配符表达式
+ /// 要匹配的字符串
+ /// 是否忽略大小写
+ /// 是否匹配
+ public static bool WildcardMatch(this string wildcard, string s, bool ignoreCase = false)
+ {
+ return wildcard.WildcardMatch(s, 0, 0, ignoreCase);
+ }
+
+ // 递归匹配通配符
+ private static bool WildcardMatch(this string wildcard, string s, int wildcardIndex, int sIndex, bool ignoreCase)
+ {
+ while (wildcardIndex != wildcard.Length)
+ {
+ char c = wildcard[wildcardIndex];
+ switch (c)
+ {
+ case '*':
+ if (wildcardIndex == wildcard.Length - 1)
+ {
+ return true;
+ }
+
+ return Enumerable.Range(sIndex, s.Length - sIndex).Any((int i) => wildcard.WildcardMatch(s, wildcardIndex + 1, i, ignoreCase));
+ default:
+ {
+ char c2 = (ignoreCase ? char.ToLower(c) : c);
+ if (s.Length == sIndex)
+ {
+ return false;
+ }
+
+ char c3 = (ignoreCase ? char.ToLower(s[sIndex]) : s[sIndex]);
+ if (c2 != c3)
+ {
+ return false;
+ }
+
+ break;
+ }
+ case '?':
+ break;
+ }
+
+ wildcardIndex++;
+ sIndex++;
+ }
+
+ return sIndex == s.Length;
+ }
+ }
}
diff --git a/BarrageGrab/Proxy/TitaniumProxy.cs b/BarrageGrab/Proxy/TitaniumProxy.cs
index 40c6b85..11ae57a 100644
--- a/BarrageGrab/Proxy/TitaniumProxy.cs
+++ b/BarrageGrab/Proxy/TitaniumProxy.cs
@@ -37,7 +37,7 @@ namespace BarrageGrab.Proxy
List rinfoRequestings = new List();
const string SCRIPT_HOST = "lf-cdn-tos.bytescm.com";
- const string LIVE_HOST = "live.douyin.com";
+ const string LIVE_HOST = "live.douyin.com";
const string DOUYIN_HOST = "www.douyin.com";
const string USER_INFO_PATH = "/webcast/user/me/";
const string BARRAGE_POOL_PATH = "/webcast/im/fetch";
@@ -548,21 +548,20 @@ namespace BarrageGrab.Proxy
if (!contentType.Trim().ToLower().Contains("application/javascript")) return;
if (e.HttpClient.Response.StatusCode != 200) return;
+ //https://lf-webcast-platform.bytetos.com/obj/webcast-platform-cdn/webcast/douyin_live/chunks/island_a74ce.b55095a0.js
//判断响应内容是否为js application/javascript
- if (hostname == SCRIPT_HOST
- //这俩个进程不需要注入
- && processName != "直播伴侣" && processName != "douyin"
+ if (processName != "直播伴侣" && processName != "douyin"
&& fileName.StartsWith("island")
)
{
var js = await e.GetResponseBodyAsString();
- var reg2 = new Regex(@"if\(!\((?\d,\w{1,2})\.DJ\)\(\)&&");
- var match = reg2.Match(js);
+ var reg = new Regex(@"if\(!\(\d{1,},\w{1,}\.DJ\)\(\).+\w{1,}\.includes\(""live""\)\)\)\{");
+ var match = reg.Match(js);
if (match.Success)
{
- js = reg2.Replace(js, "if(false &&");
+ js = reg.Replace(js, "if(false){");
e.SetResponseBodyString(js);
- Logger.PrintColor($"已成功绕过页面无操作检测\n", ConsoleColor.Green);
+ Logger.PrintColor($"已成功绕过JS页面无操作检测 {urlNoQuery}\n", ConsoleColor.Green);
}
}
@@ -627,9 +626,15 @@ namespace BarrageGrab.Proxy
SCRIPT_HOST,
LIVE_HOST,
WEBCAST_AMEMV_HOST , //直播伴侣开播请求地址
- };
+ "*-webcast-platform.bytetos.com" //新的脚本地址
+ };
if (decryptSsls.Contains(hostname))
+ {
+ return true;
+ }
+
+ if (hostname.WildcardMatchAny(decryptSsls))
{
return true;
}