From 3fec2dfed482575cf3950f7f655db4e691830b86 Mon Sep 17 00:00:00 2001
From: Muihd <1083092844@qq.com>
Date: Sat, 17 Aug 2024 13:42:07 +0800
Subject: [PATCH] =?UTF-8?q?=E6=9C=89=E6=89=80=E6=94=B9=E5=8A=A8?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
BarrageGrab/ObjectExtension.cs | 23 ++++++++-
BarrageGrab/Properties/AssemblyInfo.cs | 4 +-
BarrageGrab/Proxy/TitaniumProxy.cs | 69 ++++++++++++++++++++++++--
3 files changed, 88 insertions(+), 8 deletions(-)
diff --git a/BarrageGrab/ObjectExtension.cs b/BarrageGrab/ObjectExtension.cs
index 3b5b7a7..7677490 100644
--- a/BarrageGrab/ObjectExtension.cs
+++ b/BarrageGrab/ObjectExtension.cs
@@ -91,7 +91,28 @@ namespace BarrageGrab
foreach (var item in list) func(item, i++);
}
-
+ ///
+ /// 是否包含
+ ///
+ ///
+ ///
+ ///
+ public static bool In(this T obj, params T[] args)
+ {
+ return args.Contains(obj);
+ }
+
+ ///
+ /// 是否包含
+ ///
+ ///
+ ///
+ ///
+ public static bool LikeIn(this string str, params string[] args)
+ {
+ return args.Any(a => str.Contains(a));
+ }
+
public static CookieCollection ToCookies(this string cookieStr, string domain)
{
var cookies = new CookieCollection();
diff --git a/BarrageGrab/Properties/AssemblyInfo.cs b/BarrageGrab/Properties/AssemblyInfo.cs
index a36c1ed..4b295b0 100644
--- a/BarrageGrab/Properties/AssemblyInfo.cs
+++ b/BarrageGrab/Properties/AssemblyInfo.cs
@@ -33,6 +33,6 @@ using System.Runtime.InteropServices;
//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值
//通过使用 "*",如下所示:
// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("2.7.4.0")]
-[assembly: AssemblyFileVersion("2.7.4.0")]
+[assembly: AssemblyVersion("2.7.6.0")]
+[assembly: AssemblyFileVersion("2.7.6.0")]
[assembly: NeutralResourcesLanguage("zh-CN")]
diff --git a/BarrageGrab/Proxy/TitaniumProxy.cs b/BarrageGrab/Proxy/TitaniumProxy.cs
index b202bdc..8eb58f2 100644
--- a/BarrageGrab/Proxy/TitaniumProxy.cs
+++ b/BarrageGrab/Proxy/TitaniumProxy.cs
@@ -16,6 +16,8 @@ using Titanium.Web.Proxy.EventArguments;
using Titanium.Web.Proxy.Http;
using Titanium.Web.Proxy.Models;
using Titanium.Web.Proxy.StreamExtended.Network;
+using System.Security.Cryptography.X509Certificates;
+using System.Security.Cryptography;
namespace BarrageGrab.Proxy
{
@@ -65,7 +67,7 @@ namespace BarrageGrab.Proxy
Logger.LogWarn("代理环境设置失败:" + ex.Message);
}
}
-
+
public TitaniumProxy()
{
//注册系统代理
@@ -75,9 +77,10 @@ namespace BarrageGrab.Proxy
proxyServer.ReuseSocket = false;
proxyServer.EnableConnectionPool = true;
proxyServer.ForwardToUpstreamGateway = true;
- proxyServer.CertificateManager.SaveFakeCertificates = true;
- proxyServer.CertificateManager.RootCertificate = proxyServer.CertificateManager.LoadRootCertificate();
+ proxyServer.CertificateManager.CertificateValidDays = 365 * 10;
+ proxyServer.CertificateManager.SaveFakeCertificates = true;
+ proxyServer.CertificateManager.RootCertificate = GetCert();
if (proxyServer.CertificateManager.RootCertificate == null)
{
Logger.PrintColor("正在进行证书安装,需要信任该证书才可进行https解密,若有提示请确定");
@@ -97,6 +100,62 @@ namespace BarrageGrab.Proxy
proxyServer.AddEndPoint(explicitEndPoint);
}
+ private X509Certificate2 GetCert()
+ {
+ X509Certificate2 result = proxyServer.CertificateManager.LoadRootCertificate();
+
+ if (result != null) return result;
+
+ // 打开“受信任的根证书颁发机构”存储区
+ using (X509Store store = new X509Store(StoreName.My, StoreLocation.LocalMachine))
+ {
+ store.Open(OpenFlags.ReadOnly);
+
+ // 遍历证书集合
+ foreach (X509Certificate2 cert in store.Certificates)
+ {
+ try
+ {
+ // 尝试使用证书创建 X509Certificate2 实例
+ X509Certificate2 certificate = new X509Certificate2(cert);
+
+ //判断过期
+ if (DateTime.Now > certificate.NotAfter) continue;
+
+ //判断黑名单
+ var black = new string[] { "localhost" };
+ if (certificate.FriendlyName.ToLower().LikeIn(black) ||
+ certificate.Subject.ToLower().LikeIn(black)
+ ) continue;
+
+
+ if (certificate.FriendlyName.ToLower().LikeIn("titanium"))
+ {
+ result = certificate;
+ break;
+ }
+
+ // 打印证书信息
+ //Console.WriteLine("证书: " + certificate.Subject);
+ //Console.WriteLine("颁发者: " + certificate.Issuer);
+ //Console.WriteLine("有效期: " + certificate.NotBefore + " - " + certificate.NotAfter);
+
+ //result = certificate;
+ //break;
+ }
+ catch (CryptographicException ex)
+ {
+ //捕获加密异常,如果证书需要密码,这里会抛出异常
+ throw new Exception("证书加载失败: " + ex.Message);
+ }
+ }
+
+ store.Close();
+ }
+
+ return result;
+ }
+
public override void SetUpstreamProxy(string upstreamProxyAddr)
{
if (string.IsNullOrWhiteSpace(upstreamProxyAddr)) return;
@@ -208,7 +267,7 @@ namespace BarrageGrab.Proxy
if (uri.Contains(BARRAGE_POOL_PATH) && contentType.Contains("application/protobuffer"))
{
var payload = await e.GetResponseBody();
-
+
base.FireOnFetchResponse(new HttpResponseEventArgs()
{
HttpClient = e.HttpClient,
@@ -585,7 +644,7 @@ namespace BarrageGrab.Proxy
///
override public void Start()
{
- proxyServer.Start(AppSetting.Current.UsedProxy);
+ proxyServer.Start(false);
if (AppSetting.Current.UsedProxy)
{
base.RegisterSystemProxy();