From d0ded5cd9bf5070a120bad58b5be21fe2ac6a4ff Mon Sep 17 00:00:00 2001
From: C3032 <C3032@BC3032>
Date: 星期六, 20 十二月 2025 16:41:09 +0800
Subject: [PATCH] test

---
 IDViewer_2D/LBProtect.cs |  134 ++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 134 insertions(+), 0 deletions(-)

diff --git a/IDViewer_2D/LBProtect.cs b/IDViewer_2D/LBProtect.cs
new file mode 100644
index 0000000..da53fdb
--- /dev/null
+++ b/IDViewer_2D/LBProtect.cs
@@ -0,0 +1,134 @@
+锘縰sing Microsoft.Win32;
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.IO;
+using System.Linq;
+using System.Management;
+using System.Security.Cryptography;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace SmartScanner
+{
+    class LBProtect
+    {
+        //绉侀挜
+        private static readonly string privateKey = "<RSAKeyValue><Modulus>zM7HeOAK8nORTQ56zl4IInkg7Y5k3Zf2FtXaHwu4nSCJOdWmABnbIbTlIt9y9gmLnDHG0maUXlaxZrbUGeAScrmI6kD4qlDypf9qKO7iB5K9xf0MD7ecioeljLXJtG8ahPo6pqiyg9Sx0Czue2pg672ssPtbGL81iFrgwy+Zgok=</Modulus><Exponent>AQAB</Exponent><P>zUb5vO3p4iqncynb+WGVyO1d73M/bXrqLG7cCaZN4gk7XxeWWyfIk2flCCI2veAdp4MKpdG3j4W+Y7+8xq5fzw==</P><Q>/2oalvvC/i1YtJNGCZk4+k83asfBZZpElTp/t+U4FC8vGGKE8slfBzflSps8PTJ67/MKZ8sgD0pW9Vp2e4j2Jw==</Q><DP>sU5v4edh0C9liUyLq2DFvtKAA5Z5H7g+UnjC6DbUKLwuoxk9jqjTT7c6lYbv35uYIZtHdCirs3UjGQeBJ99v8w==</DP><DQ>taKxEhosSzHYWWI6dmz+dhOLp2YzBJw2laEqXo6l2MTNSxwUy8ukxq9bYjkPF74kayt9hN6RCA6n1Ifmpmd6FQ==</DQ><InverseQ>AxT3HFNQY9mBI/fe68ACR56ARDIUCXb62REnjbJDA0/7Ti/n5NN+yaELwVDZpw2LVlqePyYdmMJgUAJGBjHl4A==</InverseQ><D>YtiRsScAYY+hWv1YC+2aI3kuiTimOcSzwsWnpkAz87HWSRFyMq5H8nap+DC7/T8SIGptuPJFPVq9+ALZTzuz6siESv1EtND58nyrR6HnUKXlhiGuoG9vXL2rP71BnZA+H+lnIFrG48orFKP/8kA2Hy9cP9l4b1pBXEZJHQHG1hk=</D></RSAKeyValue>";
+
+        private static readonly RSACryptoServiceProvider cryptoServiceProvider = new RSACryptoServiceProvider();
+
+        // 瑙e瘑
+        public static string RsaDecrypt(string textRsa)
+        {
+            cryptoServiceProvider.FromXmlString(privateKey);
+            byte[] inputBytes = Convert.FromBase64String(textRsa);
+            byte[] decryptedBytes = cryptoServiceProvider.Decrypt(inputBytes, false);
+            return Encoding.UTF8.GetString(decryptedBytes);
+        }
+
+
+        // 鑾峰彇纭欢鎸囩汗
+        public static string GetHardwareFingerprint()
+        {
+            StringBuilder sb = new StringBuilder();
+
+            // CPU ID
+            sb.Append(GetWmiInfo("Win32_Processor", "ProcessorId"));
+
+            // 涓绘澘搴忓垪鍙�
+            sb.Append(GetWmiInfo("Win32_BaseBoard", "SerialNumber"));
+
+            // 涓荤‖鐩樺簭鍒楀彿
+            sb.Append(GetFixedDiskSerialNumber());
+
+            // 璁$畻SHA256鍝堝笇
+            using (SHA256 sha256 = SHA256.Create())
+            {
+                byte[] hash = sha256.ComputeHash(Encoding.UTF8.GetBytes(sb.ToString()));
+                return BitConverter.ToString(hash).Replace("-", "").Substring(0, 16);
+            }
+        }
+
+        private static string GetWmiInfo(string className, string propertyName)
+        {
+            try
+            {
+                using (ManagementClass mc = new ManagementClass(className))
+                using (ManagementObjectCollection moc = mc.GetInstances())
+                {
+                    foreach (ManagementObject mo in moc)
+                    {
+                        return mo[propertyName]?.ToString() ?? string.Empty;
+                    }
+                }
+            }
+            catch { }
+            return string.Empty;
+        }
+
+        // 楠岃瘉纭欢鎸囩汗
+        public static bool ValidateFingerprint()
+        {
+            string sRsaVal = "";
+            string currentConfigDirectory = Directory.GetCurrentDirectory() + "\\config";
+            string currentFingerprint = GetHardwareFingerprint();
+
+            try
+            {
+                if (!Directory.Exists(currentConfigDirectory))
+                    Directory.CreateDirectory(currentConfigDirectory);
+
+                string sRsa = File.ReadAllText(currentConfigDirectory + "\\" + currentFingerprint + ".lic");
+                sRsaVal = RsaDecrypt(sRsa);
+            }
+            catch
+            { }
+
+            bool bSame = true;
+            if (currentFingerprint != sRsaVal)
+            {
+                bSame = false;
+                File.WriteAllText(currentConfigDirectory + "\\MachineId.txt", currentFingerprint);
+            }
+
+
+            return bSame;
+        }
+        // 鑾峰彇鍥哄畾纭洏搴忓垪鍙凤紙鎺掗櫎鍙Щ鍔ㄨ澶囷級
+        private static string GetFixedDiskSerialNumber()
+        {
+            try
+            {
+                // 鏌ユ壘鍥哄畾纭洏
+                using (ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT SerialNumber, MediaType FROM Win32_DiskDrive WHERE MediaType = 'Fixed hard disk media'"))
+                using (ManagementObjectCollection moc = searcher.Get())
+                {
+                    foreach (ManagementObject mo in moc)
+                    {
+                        string serialNumber = mo["SerialNumber"]?.ToString()?.Trim() ?? string.Empty;
+                        if (!string.IsNullOrEmpty(serialNumber))
+                            return serialNumber;
+                    }
+                }
+
+                // 鏌ユ壘闈濽SB鎺ュ彛鐨勮澶�
+                using (ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT SerialNumber, InterfaceType FROM Win32_DiskDrive WHERE InterfaceType != 'USB'"))
+                using (ManagementObjectCollection moc = searcher.Get())
+                {
+                    foreach (ManagementObject mo in moc)
+                    {
+                        string serialNumber = mo["SerialNumber"]?.ToString()?.Trim() ?? string.Empty;
+                        if (!string.IsNullOrEmpty(serialNumber))
+                            return serialNumber;
+                    }
+                }
+            }
+            catch { }
+
+            return string.Empty;
+        }
+
+
+    }
+}

--
Gitblit v1.9.3