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