修复绕过无操作检测失效的问题
This commit is contained in:
@@ -7,6 +7,7 @@ using System.Threading.Tasks;
|
|||||||
using System.Web;
|
using System.Web;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
using Newtonsoft.Json.Linq;
|
using Newtonsoft.Json.Linq;
|
||||||
|
using static ProtoBuf.Serializer;
|
||||||
|
|
||||||
namespace BarrageGrab
|
namespace BarrageGrab
|
||||||
{
|
{
|
||||||
@@ -359,4 +360,75 @@ namespace BarrageGrab
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 模式匹配相关扩展方法
|
||||||
|
/// </summary>
|
||||||
|
public static class PatternMatchExtensions
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 判断是否匹配任意一个通配符
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="str">要匹配的字符串</param>
|
||||||
|
/// <param name="patterns">通配符表达式数组</param>
|
||||||
|
/// <returns>是否匹配</returns>
|
||||||
|
public static bool WildcardMatchAny(this string str, params string[] patterns)
|
||||||
|
{
|
||||||
|
return patterns.Any(x => x.WildcardMatch(str));
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 判断是否匹配通配符
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="wildcard">通配符表达式</param>
|
||||||
|
/// <param name="s">要匹配的字符串</param>
|
||||||
|
/// <param name="ignoreCase">是否忽略大小写</param>
|
||||||
|
/// <returns>是否匹配</returns>
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ namespace BarrageGrab.Proxy
|
|||||||
List<string> rinfoRequestings = new List<string>();
|
List<string> rinfoRequestings = new List<string>();
|
||||||
|
|
||||||
const string SCRIPT_HOST = "lf-cdn-tos.bytescm.com";
|
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 DOUYIN_HOST = "www.douyin.com";
|
||||||
const string USER_INFO_PATH = "/webcast/user/me/";
|
const string USER_INFO_PATH = "/webcast/user/me/";
|
||||||
const string BARRAGE_POOL_PATH = "/webcast/im/fetch";
|
const string BARRAGE_POOL_PATH = "/webcast/im/fetch";
|
||||||
@@ -548,21 +548,20 @@ namespace BarrageGrab.Proxy
|
|||||||
if (!contentType.Trim().ToLower().Contains("application/javascript")) return;
|
if (!contentType.Trim().ToLower().Contains("application/javascript")) return;
|
||||||
if (e.HttpClient.Response.StatusCode != 200) 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
|
//判断响应内容是否为js application/javascript
|
||||||
if (hostname == SCRIPT_HOST
|
if (processName != "直播伴侣" && processName != "douyin"
|
||||||
//这俩个进程不需要注入
|
|
||||||
&& processName != "直播伴侣" && processName != "douyin"
|
|
||||||
&& fileName.StartsWith("island")
|
&& fileName.StartsWith("island")
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
var js = await e.GetResponseBodyAsString();
|
var js = await e.GetResponseBodyAsString();
|
||||||
var reg2 = new Regex(@"if\(!\((?<v1>\d,\w{1,2})\.DJ\)\(\)&&");
|
var reg = new Regex(@"if\(!\(\d{1,},\w{1,}\.DJ\)\(\).+\w{1,}\.includes\(""live""\)\)\)\{");
|
||||||
var match = reg2.Match(js);
|
var match = reg.Match(js);
|
||||||
if (match.Success)
|
if (match.Success)
|
||||||
{
|
{
|
||||||
js = reg2.Replace(js, "if(false &&");
|
js = reg.Replace(js, "if(false){");
|
||||||
e.SetResponseBodyString(js);
|
e.SetResponseBodyString(js);
|
||||||
Logger.PrintColor($"已成功绕过页面无操作检测\n", ConsoleColor.Green);
|
Logger.PrintColor($"已成功绕过JS页面无操作检测 {urlNoQuery}\n", ConsoleColor.Green);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -627,9 +626,15 @@ namespace BarrageGrab.Proxy
|
|||||||
SCRIPT_HOST,
|
SCRIPT_HOST,
|
||||||
LIVE_HOST,
|
LIVE_HOST,
|
||||||
WEBCAST_AMEMV_HOST , //直播伴侣开播请求地址
|
WEBCAST_AMEMV_HOST , //直播伴侣开播请求地址
|
||||||
};
|
"*-webcast-platform.bytetos.com" //新的脚本地址
|
||||||
|
};
|
||||||
|
|
||||||
if (decryptSsls.Contains(hostname))
|
if (decryptSsls.Contains(hostname))
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (hostname.WildcardMatchAny(decryptSsls))
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user