diff --git a/src/PBAnaly/PBAnaly.csproj b/src/PBAnaly/PBAnaly.csproj index f63fc37..1e6b7ac 100644 --- a/src/PBAnaly/PBAnaly.csproj +++ b/src/PBAnaly/PBAnaly.csproj @@ -184,6 +184,7 @@ SystemSettingForm.cs + DataProcessForm.cs diff --git a/src/PBAnaly/Program.cs b/src/PBAnaly/Program.cs index 9bb3ea1..1d8ba4d 100644 --- a/src/PBAnaly/Program.cs +++ b/src/PBAnaly/Program.cs @@ -61,30 +61,25 @@ namespace PBAnaly MessageBox.Show("应用程序已经在运行。", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } -#if true - string macAddress =util.GetMotherboardSerial(); - if (macAddress == "PM00P0209N000037" || macAddress == "07D4822_M81D023244" || macAddress == "YQ1711233HY01423" || macAddress == "S312NXCV0056AZMB" || macAddress == "PM82L0235P000452"|| macAddress == "MP2M55J0" - || macAddress == "S936NXCV000SJ2MB"|| macAddress == "S730NXCV009371MB" || macAddress == "/47Z87N3/CNFCW0023303RG/" || true) - { - Application.EnableVisualStyles(); - Application.SetCompatibleTextRenderingDefault(false); - //数据库操作 - string dbPath = "UserManage.db"; - string connectionString = $"Data Source={dbPath};Version=3;"; - UserManage.ConnectDb(); - AccessControl.LoadConfig();//加载权限 - var login = new LoginForm(); - login.StartPosition = FormStartPosition.CenterScreen; - Application.Run(new MainForm()); - - } - else + if (Util.ViKeySoft.Instance.CheckViKey() == false) { - MessageBox.Show("你没有权限"); + MessageBox.Show("你没有权限,请检查加密狗是否插入","警告"); return; } +#if true + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + + //数据库操作 + string dbPath = "UserManage.db"; + string connectionString = $"Data Source={dbPath};Version=3;"; + UserManage.ConnectDb(); + AccessControl.LoadConfig();//加载权限 + var login = new LoginForm(); + login.StartPosition = FormStartPosition.CenterScreen; + Application.Run(new MainForm()); #endif } diff --git a/src/PBAnaly/UI/AnalyzeDataForm.Designer.cs b/src/PBAnaly/UI/AnalyzeDataForm.Designer.cs index 4ed4139..3ccbabe 100644 --- a/src/PBAnaly/UI/AnalyzeDataForm.Designer.cs +++ b/src/PBAnaly/UI/AnalyzeDataForm.Designer.cs @@ -104,7 +104,7 @@ this.metroPanel1.Location = new System.Drawing.Point(0, 31); this.metroPanel1.Margin = new System.Windows.Forms.Padding(0); this.metroPanel1.Name = "metroPanel1"; - this.metroPanel1.Size = new System.Drawing.Size(1488, 36); + this.metroPanel1.Size = new System.Drawing.Size(1510, 36); this.metroPanel1.Style = ReaLTaiizor.Enum.Metro.Style.Custom; this.metroPanel1.StyleManager = null; this.metroPanel1.TabIndex = 3; @@ -137,7 +137,7 @@ this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 31F)); this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 36F)); this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel1.Size = new System.Drawing.Size(1488, 1328); + this.tableLayoutPanel1.Size = new System.Drawing.Size(1510, 1379); this.tableLayoutPanel1.TabIndex = 3; // // panel1 @@ -151,7 +151,7 @@ this.panel1.Margin = new System.Windows.Forms.Padding(4); this.panel1.Name = "panel1"; this.panel1.Padding = new System.Windows.Forms.Padding(7, 6, 7, 6); - this.panel1.Size = new System.Drawing.Size(1480, 1253); + this.panel1.Size = new System.Drawing.Size(1502, 1304); this.panel1.SmoothingType = System.Drawing.Drawing2D.SmoothingMode.HighQuality; this.panel1.TabIndex = 4; this.panel1.Text = "panel1"; @@ -165,14 +165,14 @@ this.dataGridView1.Name = "dataGridView1"; this.dataGridView1.RowHeadersWidth = 51; this.dataGridView1.RowTemplate.Height = 23; - this.dataGridView1.Size = new System.Drawing.Size(1466, 1241); + this.dataGridView1.Size = new System.Drawing.Size(1488, 1292); this.dataGridView1.TabIndex = 0; // // AnalyzeDataForm // this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 15F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(1496, 1362); + this.ClientSize = new System.Drawing.Size(1518, 1413); this.Controls.Add(this.tableLayoutPanel1); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; this.FormStyle = MaterialSkin.Controls.MaterialForm.FormStyles.ActionBar_None; diff --git a/src/PBAnaly/Util/ViKeySoft.cs b/src/PBAnaly/Util/ViKeySoft.cs new file mode 100644 index 0000000..f637c35 --- /dev/null +++ b/src/PBAnaly/Util/ViKeySoft.cs @@ -0,0 +1,280 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.InteropServices; +using System.Text; +using System.Threading.Tasks; + +namespace PBAnaly.Util +{ + public class ViKeySoft + { + private static ViKeySoft instance = null; + + public static ViKeySoft Instance + { + get + { + if (instance == null) + { + instance = new ViKeySoft(); + } + return instance; + } + } + + // 错误代码 + const long VIKEY_SUCCESS = 0x00000000; //成功 + const long VIKEY_ERROR_NO_VIKEY = 0x80000001; //没有找到ViKey加密锁 + const long VIKEY_ERROR_INVALID_PASSWORD = 0x80000002; //密码错误 + const long VIKEY_ERROR_NEED_FIND = 0x80000003; //请先查找加密锁 + const long VIKEY_ERROR_INVALID_INDEX = 0x80000004; //无效的句柄 + const long VIKEY_ERROR_INVALID_VALUE = 0x80000005; //数值错误 + const long VIKEY_ERROR_INVALID_KEY = 0x80000006; //秘钥无效 + const long VIKEY_ERROR_GET_VALUE = 0x80000007; //读取信息错误 + const long VIKEY_ERROR_SET_VALUE = 0x80000008; //设置信息错误 + const long VIKEY_ERROR_NO_CHANCE = 0x80000009; //没有机会 + const long VIKEY_ERROR_NO_TAUTHORITY = 0x8000000A; //权限不足 + const long VIKEY_ERROR_INVALID_ADDR_OR_SIZE = 0x8000000B; //地址或长度错误 + const long VIKEY_ERROR_RANDOM = 0x8000000C; //获取随机数错误 + const long VIKEY_ERROR_SEED = 0x8000000D; //获取种子错误 + const long VIKEY_ERROR_CONNECTION = 0x8000000E; //通信错误 + const long VIKEY_ERROR_CALCULATE = 0x8000000F; //算法或计算错误 + const long VIKEY_ERROR_MODULE = 0x80000010; //计数器错误 + const long VIKEY_ERROR_GENERATE_NEW_PASSWORD = 0x80000011; //产生密码错误 + const long VIKEY_ERROR_ENCRYPT_FAILED = 0x80000012; //加密数据错误 + const long VIKEY_ERROR_DECRYPT_FAILED = 0x80000013; //解密数据错误 + const long VIKEY_ERROR_ALREADY_LOCKED = 0x80000014; //ViKey加密锁已经被锁定 + const long VIKEY_ERROR_UNKNOWN_COMMAND = 0x80000015; //无效的命令 + const long VIKEY_ERROR_NO_SUPPORT = 0x80000016; //当前ViKey加密锁不支持此功能 + const long VIKEY_ERROR_CATCH = 0x80000017; //发生异常 + const long VIKEY_ERROR_GET_USBDATA = 0x80000018; //读取USB数据错误 + const long VIKEY_ERROR_SET_USBDATA = 0x80000019; //设置USB数据错误 + const long VIKEY_ERROR_TIME_MODULE = 0x8000001A; //硬件时钟模块异常 + const long VIKEY_ERROR_TIME_OUTAGE = 0x8000001B; //硬件时钟发生过断电,时钟可能不准确,需校准时钟 + const long VIKEY_ERROR_MAX_CONNECTION = 0x8000001C; //加密狗达到最大通信链接数 + const long VIKEY_ERROR_COMMUNICATION = 0x8000001D; //加密狗通信数据错误 + const long VIKEY_ERROR_TIME = 0x8000001E; //加密狗时钟错误 + const long VIKEY_ERROR_TIME_EXPIRE = 0x8000001F; //加密狗时钟限制已经到期 + const long VIKEY_ERROR_TIME_DISORDER = 0x80000020; //加密狗时钟失调 + const long VIKEY_ERROR_INIT_USB = 0x80000021; //安卓系统-初始化USB失败 + const long VIKEY_ERROR_OPEN_USB = 0x80000022; //安卓系统-打开USB设备失败 + const long VIKEY_ERROR_UNKNOWN_ERROR = 0xFFFFFFFF; //未知错误 + + //ViKey加密狗类型 VikeyGetType返回值代表的类型 + const uint ViKeyAPP = 0; //实用型加密狗ViKeyAPP + const uint ViKeySTD = 1; //标准型加密狗ViKeySTD + const uint ViKeyNET = 2; //网络型加密狗ViKeyNET + const uint ViKeyPRO = 3; //专业型加密狗ViKeyPRO + const uint ViKeyWEB = 4; //身份认证型加密狗ViKeyWEB + const uint ViKeyTIME = 5; //时间型加密狗ViKeyTIME + const uint ViKeyMultiFunctional = 10; //多功能加密狗 支持软件加密 支持文档加密 + const uint ViKeyMultiFunctionalTime = 11; //多功能时钟加密狗 + + //LED灯状态定义 + const uint LED_OFF = 0; //常灭 + const uint LED_ON = 1; //常亮 + const uint LED_BLINK = 2; //灯闪 + const uint LED_OFF_BLINK = 3; //平时常灭-通信时灯闪 + const uint LED_ON_BLINK = 4; //平时常亮-通信时灯闪 + + // 函数引用声明 + [DllImport("ViKey")] + public static extern uint VikeyGetLibraryVersion(Byte[] pVersion); + [DllImport("ViKey")] + public static extern uint VikeyFind(ref uint pdwCount); + [DllImport("ViKey")] + public static extern uint VikeyFindEx(ref uint pdwCount); + [DllImport("ViKey")] + public static extern uint VikeyUninitialization(); + [DllImport("ViKey")] + public static extern uint VikeyGetHID(ushort Index, ref uint pdwHID); + [DllImport("ViKey")] + public static extern uint VikeyGetType(ushort Index, ref uint pType); + [DllImport("ViKey")] + public static extern uint VikeyGetLevel(ushort Index, ref Byte pLevel); + [DllImport("ViKey")] + public static extern uint VikeyGetFirmVersion(Byte[] pVersion); + [DllImport("ViKey")] + public static extern uint VikeyGetUserDataSize(ushort Index, ref uint pBytes); + [DllImport("ViKey")] + public static extern uint VikeyGetAdminDataSize(ushort Index, ref uint pBytes); + [DllImport("ViKey")] + public static extern uint VikeyUserLogin(ushort Index, Byte[] pUserPassword); + [DllImport("ViKey")] + public static extern uint VikeyAdminLogin(ushort Index, Byte[] pAdminPassword); + [DllImport("ViKey")] + public static extern uint VikeyResetPassword(ushort Index, Byte[] pNewUserPassword, Byte[] pNewAdminPassword); + [DllImport("ViKey")] + public static extern uint VikeyLogoff(ushort Index); + [DllImport("ViKey")] + public static extern uint VikeyReadData(ushort Index, ushort pStartAddress, ushort pBufferLength, Byte[] pBuffer); + [DllImport("ViKey")] + public static extern uint VikeyWriteData(ushort Index, ushort pStartAddress, ushort pBufferLength, Byte[] pBuffer); + [DllImport("ViKey")] + public static extern uint ViKeyRandom(ushort Index, ref ushort pReturn1, ref ushort pReturn2, ref ushort pReturn3, ref ushort pReturn4); + [DllImport("ViKey")] + public static extern uint VikeySeed(ushort Index, ref uint pSeed, ref ushort pReturn1, ref ushort pReturn2, ref ushort pReturn3, ref ushort pReturn4); + [DllImport("ViKey")] + public static extern uint VikeySetSoftIDString(ushort Index, Byte[] SoftIDString); + [DllImport("ViKey")] + public static extern uint VikeyGetSoftIDString(ushort Index, Byte[] SoftIDString); + [DllImport("ViKey")] + public static extern uint ViKeySetModule(ushort Index, ushort ModelueIndex, ushort pValue, ushort pDecrease); + [DllImport("ViKey")] + public static extern uint ViKeyCheckModule(ushort Index, ushort ModelueIndex, ref ushort pIsZero, ref ushort pCanDecrase); + [DllImport("ViKey")] + public static extern uint ViKeyDecraseModule(ushort Index, ushort ModelueIndex); + + [DllImport("ViKey")] + public static extern uint VikeySetPtroductName(ushort Index, Byte[] szName); + [DllImport("ViKey")] + public static extern uint VikeyGetPtroductName(ushort Index, Byte[] szName); + [DllImport("ViKey")] + public static extern uint VikeyGetTime(ushort Index, Byte[] pTime); + + + + public bool CheckViKey() + { + + uint HID, Count, ViKeyType = 0; + Byte[] buffer = new Byte[256]; + uint retcode; + ushort j; + ushort Addr, Length; + ushort data1, data2, data3, data4; + + string str1 = "1234567890123456"; + string DefaultUserPassword = "wwwbgsgs"; + string DefaultAdminPassword = "wwwbgsgs"; + string strSoftIDString = "1234ABCD"; + + HID = Count = 0; + data1 = data2 = data3 = data4 = 0; + + //查找加密狗 + retcode = VikeyFind(ref Count); + if (retcode != 0) + { + System.Console.WriteLine("查找ViKey加密狗错误 error code: 0x{0:X4}", retcode); + return false; + } + + for (j = 0; j < Count; j++) + { + + //获取加密狗硬件序列号(HID) + retcode = VikeyGetHID(j, ref HID); + if (retcode != 0) + { + System.Console.WriteLine("获取硬件序列号错误 error code: 0x{0:x}", retcode); + return false; + } + System.Console.WriteLine("ViKey加密狗硬件序列号:" + HID); + + + retcode = VikeyGetType(j, ref ViKeyType); + if (retcode != 0) + { + System.Console.WriteLine("获取ViKey加密狗类型 error code: 0x{0:x}", retcode); + return false; + } + System.Console.WriteLine("获取ViKey加密狗类型:" + ViKeyType); + + + + + // 用户登录ViKey加密狗 + buffer = System.Text.Encoding.Default.GetBytes(DefaultUserPassword); // convert unicode to asccii + retcode = VikeyUserLogin(j, buffer); + if (retcode != 0) + { + System.Console.WriteLine("用户登陆ViKey加密狗失败 error code: ", retcode); + return false; + } + //管理员登陆加密狗 + + buffer = System.Text.Encoding.Default.GetBytes(DefaultAdminPassword); // convert unicode to asccii + retcode = VikeyAdminLogin(j, buffer); + if (retcode != 0) + { + System.Console.WriteLine("管理员登陆ViKey加密狗失败 error code: ", retcode); + return false; + } + + + + buffer = System.Text.Encoding.Default.GetBytes(str1); // convert unicode to asccii + // write data to Vikey + Addr = 0; + Length = 16; + retcode = VikeyWriteData(j, Addr, Length, buffer); + if (retcode != 0) + { + System.Console.WriteLine("写数据失败 error code: ", retcode); + return false; + } + System.Console.WriteLine("Write:" + str1); + + // p1 = 4; + // p2 = 26; + buffer = new Byte[str1.Length]; + + // read dongle memory + retcode = VikeyReadData(j, Addr, Length, buffer); + if (retcode != 0) + { + System.Console.WriteLine("读数据失败 error code: ", retcode); + return false; + } + str1 = System.Text.Encoding.ASCII.GetString(buffer); + System.Console.WriteLine("Read:" + str1); + + // random generation function + retcode = ViKeyRandom(j, ref data1, ref data2, ref data3, ref data4); + if (retcode != 0) + { + System.Console.WriteLine("获取随机数失败 error code: ", retcode); + return false; + } + System.Console.WriteLine("Random: " + data1); + + // write SoftID + buffer = System.Text.Encoding.Default.GetBytes(strSoftIDString); // convert unicode to asccii + + retcode = VikeySetSoftIDString(j, buffer); + if (retcode != 0) + { + System.Console.WriteLine("设置软件ID error code: ", retcode); + return false; + } + System.Console.WriteLine("设置软件ID: " + strSoftIDString); + + // read SoftID + buffer = new Byte[strSoftIDString.Length]; + retcode = VikeyGetSoftIDString(j, buffer); + if (retcode != 0) + { + System.Console.WriteLine("读取软件ID error code: ", retcode); + return false; + } + strSoftIDString = System.Text.Encoding.ASCII.GetString(buffer); + System.Console.WriteLine("读取软件ID: " + strSoftIDString); + + + + + // Logoff ViKey + retcode = VikeyLogoff(j); + if (retcode != 0) + { + System.Console.WriteLine("注销ViKey加密狗 error code: ", retcode); + return false; + } + } + + return true; + } + } +}