C3032
2025-12-20 d0ded5cd9bf5070a120bad58b5be21fe2ac6a4ff
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
using 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();
 
        // 解密
        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;
                    }
                }
 
                // 查找非USB接口的设备
                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;
        }
 
 
    }
}