Rocho.J

人脑是不可靠的, 随时记录感悟并且经常重复!

 

[转载]计算机起码需要的方法

//生成机器码所需要的方法

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Management;
using System.Runtime.InteropServices;

namespace ConsoleAppTest
{
    class WMI
    {
        public static string Disk = "Win32_DiskDrive";
        public static string BIOS = "Win32_BIOS";
        public static string Network = "Win32_NetworkAdapter";
        public static string Board = "Win32_BaseBoard";
        public static string CPU = "Win32_Processor";
        public static string Memory = "Win32_MemoryDevice";
        public static string PhysicalMedia = "Win32_PhysicalMedia";
        public static string LogicalDisk = "Win32_LogicalDisk";
        public static string BoardDevice = "Win32_OnBoardDevice";
        public static string PhysicalMemory = "Win32_PhysicalMemory";

        public static string id()
        {
            string str = AtapiDevice.GetHddInfo(0).SerialNumber;
            str += PropertyValue(Disk, "Caption") + "\r\n";
            str += PropertyValue(BIOS, "ReleaseDate") +
                PropertyValue(BIOS, "SerialNumber") +
                PropertyValue(BIOS, "Manufacturer") +
                PropertyValue(BIOS, "SMBIOSBIOSVersion") +
                PropertyValue(BIOS, "SMBIOSMajorVersion") +
                PropertyValue(BIOS, "SMBIOSMinorVersio") + "\r\n";

            str += PropertyValue(Network, "MACAddress") + "\r\n";
            str += PropertyValue(Board, "Manufacturer") +
                PropertyValue(Board, "SerialNumber") +
                PropertyValue(Board, "Product") +
                PropertyValue(Board, "Version") + "\r\n";
            str += PropertyValue(CPU, "ProcessorId") + PropertyValue(CPU, "Version") + "\r\n";
            str += PropertyValue(LogicalDisk, "VolumeSerialNumber");

            return str;
        }
        public static string AllKnownValues()
        {
            string str = null;
            Type t = typeof(WMI);
            System.Reflection.FieldInfo[] fs = t.GetFields(System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.Public);
            foreach (System.Reflection.FieldInfo f in fs)
            {

                str += PropertyValues((string)f.GetValue(null));
            }
            return str;
        }

        public static string PropertyValues(string typeName)
        {
            ManagementObjectSearcher s =
                                        new ManagementObjectSearcher(
                                        "root\\CIMV2",
                                        "SELECT * FROM " + typeName,
                                        new EnumerationOptions(
                                        null, System.TimeSpan.MaxValue,
                                        1, true, true, true,
                                        true, false, true, true));


            ManagementClass m = new ManagementClass(new ManagementPath(typeName));

            string data = "-------------------------------" + typeName + "--------------------------------\r\n";

            foreach (ManagementObject o in s.Get())
            {
                foreach (PropertyData p in o.Properties)
                {
                    try
                    {
                        data += p.Name + "=" + getArrayValues(o, p.Name) + "\r\n";
                    }
                    catch { }
                }
            }
            return data;
        }

        private static string getArrayValues(ManagementObject m, string PropertyName)
        {

            string tmp = "";
            try
            {
                object oo = m.GetPropertyValue(PropertyName);
                if (oo == null)
                    return tmp;

                if (oo is Array)
                {
                    foreach (object ooo in (Array)oo)
                    {
                        if (tmp == null)
                            tmp = ooo.ToString();
                        else
                            tmp += " -- " + ooo.ToString();
                    }
                }
                else
                    tmp = oo.ToString();
            }
            catch (Exception e)
            {
                tmp = "";
            }
            if (tmp == null)
                tmp = "";
            return tmp;
        }
        public static string PropertyValue(string typeName, string PropertyName)
        {

            ManagementClass m = new ManagementClass(new ManagementPath(typeName));

            string data = null;
            foreach (ManagementObject o in m.GetInstances())
            {
                try
                {
                    object ob = getArrayValues(o, PropertyName);
                    if (ob == null || ob.ToString().Trim() == "")
                        continue;
                    if (data == null)
                        data = ob.ToString();
                    else
                        data += "\t" + ob.ToString();
                }
                catch { }
            }
            return data;
        }

        [Serializable]
        public struct HardDiskInfo
        {
            /// <summary>
            /// 型号
            /// </summary>
            public string ModuleNumber;
            /// <summary>
            /// 固件版本
            /// </summary>
            public string Firmware;
            /// <summary>
            /// 序列号
            /// </summary>
            public string SerialNumber;
            /// <summary>
            /// 容量,以M为单位
            /// </summary>
            public uint Capacity;
        }

        #region Internal Structs

        [StructLayout(LayoutKind.Sequential, Pack = 1)]
        internal struct GetVersionOutParams
        {
            public byte bVersion;
            public byte bRevision;
            public byte bReserved;
            public byte bIDEDeviceMap;
            public uint fCapabilities;
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
            public uint[] dwReserved; // For future use.
        }

        [StructLayout(LayoutKind.Sequential, Pack = 1)]
        internal struct IdeRegs
        {
            public byte bFeaturesReg;
            public byte bSectorCountReg;
            public byte bSectorNumberReg;
            public byte bCylLowReg;
            public byte bCylHighReg;
            public byte bDriveHeadReg;
            public byte bCommandReg;
            public byte bReserved;
        }

        [StructLayout(LayoutKind.Sequential, Pack = 1)]
        internal struct SendCmdInParams
        {
            public uint cBufferSize;
            public IdeRegs irDriveRegs;
            public byte bDriveNumber;
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
            public byte[] bReserved;
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
            public uint[] dwReserved;
            public byte bBuffer;
        }

        [StructLayout(LayoutKind.Sequential, Pack = 1)]
        internal struct DriverStatus
        {
            public byte bDriverError;
            public byte bIDEStatus;
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]
            public byte[] bReserved;
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]
            public uint[] dwReserved;
        }

        [StructLayout(LayoutKind.Sequential, Pack = 1)]
        internal struct SendCmdOutParams
        {
            public uint cBufferSize;
            public DriverStatus DriverStatus;
            public IdSector bBuffer;
        }

        [StructLayout(LayoutKind.Sequential, Pack = 1, Size = 512)]
        internal struct IdSector
        {
            public ushort wGenConfig;
            public ushort wNumCyls;
            public ushort wReserved;
            public ushort wNumHeads;
            public ushort wBytesPerTrack;
            public ushort wBytesPerSector;
            public ushort wSectorsPerTrack;
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
            public ushort[] wVendorUnique;
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 20)]
            public byte[] sSerialNumber;
            public ushort wBufferType;
            public ushort wBufferSize;
            public ushort wECCSize;
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)]
            public byte[] sFirmwareRev;
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 40)]
            public byte[] sModelNumber;
            public ushort wMoreVendorUnique;
            public ushort wDoubleWordIO;
            public ushort wCapabilities;
            public ushort wReserved1;
            public ushort wPIOTiming;
            public ushort wDMATiming;
            public ushort wBS;
            public ushort wNumCurrentCyls;
            public ushort wNumCurrentHeads;
            public ushort wNumCurrentSectorsPerTrack;
            public uint ulCurrentSectorCapacity;
            public ushort wMultSectorStuff;
            public uint ulTotalAddressableSectors;
            public ushort wSingleWordDMA;
            public ushort wMultiWordDMA;
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 128)]
            public byte[] bReserved;
        }

        #endregion

        /// <summary>
        /// ATAPI驱动器相关
        /// </summary>
        public class AtapiDevice
        {

            #region DllImport

            [DllImport("kernel32.dll", SetLastError = true)]
            static extern int CloseHandle(IntPtr hObject);

            [DllImport("kernel32.dll", SetLastError = true)]
            static extern IntPtr CreateFile(
                string lpFileName,
                uint dwDesiredAccess,
                uint dwShareMode,
                IntPtr lpSecurityAttributes,
                uint dwCreationDisposition,
                uint dwFlagsAndAttributes,
                IntPtr hTemplateFile);

            [DllImport("kernel32.dll")]
            static extern int DeviceIoControl(
                IntPtr hDevice,
                uint dwIoControlCode,
                IntPtr lpInBuffer,
                uint nInBufferSize,
                ref GetVersionOutParams lpOutBuffer,
                uint nOutBufferSize,
                ref uint lpBytesReturned,
                [Out] IntPtr lpOverlapped);

            [DllImport("kernel32.dll")]
            static extern int DeviceIoControl(
                IntPtr hDevice,
                uint dwIoControlCode,
                ref SendCmdInParams lpInBuffer,
                uint nInBufferSize,
                ref SendCmdOutParams lpOutBuffer,
                uint nOutBufferSize,
                ref uint lpBytesReturned,
                [Out] IntPtr lpOverlapped);

            const uint DFP_GET_VERSION = 0x00074080;
            const uint DFP_SEND_DRIVE_COMMAND = 0x0007c084;
            const uint DFP_RECEIVE_DRIVE_DATA = 0x0007c088;

            const uint GENERIC_READ = 0x80000000;
            const uint GENERIC_WRITE = 0x40000000;
            const uint FILE_SHARE_READ = 0x00000001;
            const uint FILE_SHARE_WRITE = 0x00000002;
            const uint CREATE_NEW = 1;
            const uint OPEN_EXISTING = 3;

            #endregion

            #region GetHddInfo

            /// <summary>
            /// 获得硬盘信息
            /// </summary>
            /// <param name="driveIndex">硬盘序号</param>
            /// <returns>硬盘信息</returns>
            /// <remarks>
            /// 参考lu0的文章:http://lu0s1.3322.org/App/2k1103.html
            /// by sunmast for everyone
            /// thanks lu0 for his great works
            /// 在Windows 98/ME中,S.M.A.R.T并不缺省安装,请将SMARTVSD.VXD拷贝到%SYSTEM%\IOSUBSYS目录下。
            /// 在Windows 2000/2003下,需要Administrators组的权限。
            /// </remarks>
            /// <example>
            /// AtapiDevice.GetHddInfo()
            /// </example>
            public static HardDiskInfo GetHddInfo(byte driveIndex)
            {
                switch (Environment.OSVersion.Platform)
                {
                    case PlatformID.Win32Windows:
                        return GetHddInfo9x(driveIndex);
                    case PlatformID.Win32NT:
                        return GetHddInfoNT(driveIndex);
                    case PlatformID.Win32S:
                        throw new NotSupportedException("Win32s is not supported.");
                    case PlatformID.WinCE:
                        throw new NotSupportedException("WinCE is not supported.");
                    default:
                        throw new NotSupportedException("Unknown Platform.");
                }
            }

            #region GetHddInfo9x

            private static HardDiskInfo GetHddInfo9x(byte driveIndex)
            {
                GetVersionOutParams vers = new GetVersionOutParams();
                SendCmdInParams inParam = new SendCmdInParams();
                SendCmdOutParams outParam = new SendCmdOutParams();
                uint bytesReturned = 0;

                IntPtr hDevice = CreateFile(
                    @"\\.\Smartvsd",
                    0,
                    0,
                    IntPtr.Zero,
                    CREATE_NEW,
                    0,
                    IntPtr.Zero);
                if (hDevice == IntPtr.Zero)
                {
                    throw new Exception("Open smartvsd.vxd failed.");
                }
                if (0 == DeviceIoControl(
                    hDevice,
                    DFP_GET_VERSION,
                    IntPtr.Zero,
                    0,
                    ref vers,
                    (uint)Marshal.SizeOf(vers),
                    ref bytesReturned,
                    IntPtr.Zero))
                {
                    CloseHandle(hDevice);
                    throw new Exception("DeviceIoControl failed:DFP_GET_VERSION");
                }
                // If IDE identify command not supported, fails
                if (0 == (vers.fCapabilities & 1))
                {
                    CloseHandle(hDevice);
                    throw new Exception("Error: IDE identify command not supported.");
                }
                if (0 != (driveIndex & 1))
                {
                    inParam.irDriveRegs.bDriveHeadReg = 0xb0;
                }
                else
                {
                    inParam.irDriveRegs.bDriveHeadReg = 0xa0;
                }
                if (0 != (vers.fCapabilities & (16 >> driveIndex)))
                {
                    // We don't detect a ATAPI device.
                    CloseHandle(hDevice);
                    throw new Exception(string.Format("Drive {0} is a ATAPI device, we don't detect it", driveIndex + 1));
                }
                else
                {
                    inParam.irDriveRegs.bCommandReg = 0xec;
                }
                inParam.bDriveNumber = driveIndex;
                inParam.irDriveRegs.bSectorCountReg = 1;
                inParam.irDriveRegs.bSectorNumberReg = 1;
                inParam.cBufferSize = 512;
                if (0 == DeviceIoControl(
                    hDevice,
                    DFP_RECEIVE_DRIVE_DATA,
                    ref inParam,
                    (uint)Marshal.SizeOf(inParam),
                    ref outParam,
                    (uint)Marshal.SizeOf(outParam),
                    ref bytesReturned,
                    IntPtr.Zero))
                {
                    CloseHandle(hDevice);
                    throw new Exception("DeviceIoControl failed: DFP_RECEIVE_DRIVE_DATA");
                }
                CloseHandle(hDevice);

                return GetHardDiskInfo(outParam.bBuffer);
            }

            #endregion

            #region GetHddInfoNT

            private static HardDiskInfo GetHddInfoNT(byte driveIndex)
            {
                GetVersionOutParams vers = new GetVersionOutParams();
                SendCmdInParams inParam = new SendCmdInParams();
                SendCmdOutParams outParam = new SendCmdOutParams();
                uint bytesReturned = 0;

                // We start in NT/Win2000
                IntPtr hDevice = CreateFile(
                    string.Format(@"\\.\PhysicalDrive{0}", driveIndex),
                    GENERIC_READ | GENERIC_WRITE,
                    FILE_SHARE_READ | FILE_SHARE_WRITE,
                    IntPtr.Zero,
                    OPEN_EXISTING,
                    0,
                    IntPtr.Zero);
                if (hDevice == IntPtr.Zero)
                {
                    throw new Exception("CreateFile faild.");
                }
                if (0 == DeviceIoControl(
                    hDevice,
                    DFP_GET_VERSION,
                    IntPtr.Zero,
                    0,
                    ref vers,
                    (uint)Marshal.SizeOf(vers),
                    ref bytesReturned,
                    IntPtr.Zero))
                {
                    CloseHandle(hDevice);
                    throw new Exception(string.Format("Drive {0} may not exists.", driveIndex + 1));
                }
                // If IDE identify command not supported, fails
                if (0 == (vers.fCapabilities & 1))
                {
                    CloseHandle(hDevice);
                    throw new Exception("Error: IDE identify command not supported.");
                }
                // Identify the IDE drives
                if (0 != (driveIndex & 1))
                {
                    inParam.irDriveRegs.bDriveHeadReg = 0xb0;
                }
                else
                {
                    inParam.irDriveRegs.bDriveHeadReg = 0xa0;
                }
                if (0 != (vers.fCapabilities & (16 >> driveIndex)))
                {
                    // We don't detect a ATAPI device.
                    CloseHandle(hDevice);
                    throw new Exception(string.Format("Drive {0} is a ATAPI device, we don't detect it.", driveIndex + 1));
                }
                else
                {
                    inParam.irDriveRegs.bCommandReg = 0xec;
                }
                inParam.bDriveNumber = driveIndex;
                inParam.irDriveRegs.bSectorCountReg = 1;
                inParam.irDriveRegs.bSectorNumberReg = 1;
                inParam.cBufferSize = 512;

                if (0 == DeviceIoControl(
                    hDevice,
                    DFP_RECEIVE_DRIVE_DATA,
                    ref inParam,
                    (uint)Marshal.SizeOf(inParam),
                    ref outParam,
                    (uint)Marshal.SizeOf(outParam),
                    ref bytesReturned,
                    IntPtr.Zero))
                {
                    CloseHandle(hDevice);
                    throw new Exception("DeviceIoControl failed: DFP_RECEIVE_DRIVE_DATA");
                }
                CloseHandle(hDevice);

                return GetHardDiskInfo(outParam.bBuffer);
            }

            #endregion

            private static HardDiskInfo GetHardDiskInfo(IdSector phdinfo)
            {
                HardDiskInfo hddInfo = new HardDiskInfo();

                ChangeByteOrder(phdinfo.sModelNumber);
                hddInfo.ModuleNumber = Encoding.ASCII.GetString(phdinfo.sModelNumber).Trim();

                ChangeByteOrder(phdinfo.sFirmwareRev);
                hddInfo.Firmware = Encoding.ASCII.GetString(phdinfo.sFirmwareRev).Trim();

                ChangeByteOrder(phdinfo.sSerialNumber);
                hddInfo.SerialNumber = Encoding.ASCII.GetString(phdinfo.sSerialNumber).Trim();

                hddInfo.Capacity = phdinfo.ulTotalAddressableSectors / 2 / 1024;

                return hddInfo;
            }

            private static void ChangeByteOrder(byte[] charArray)
            {
                byte temp;
                for (int i = 0; i < charArray.Length; i += 2)
                {
                    temp = charArray[i];
                    charArray[i] = charArray[i + 1];
                    charArray[i + 1] = temp;
                }
            }

            #endregion
        }
    }
    /*
    public class GenMachineKeyEx
    {
        public const string idKey = "{88E21C21-4C57-440e-8121-76C7E6D465E8}";
        static string GenID
        {
            get
            {
                string id = WMI.id();
                byte[] bs = CHATool.getMD5(id);
                if (bs.Length > 16)
                {
                    Array.Resize(ref bs, 16);
                }

                id = HEXString.ToString(bs);
                bs = EM.SymmetricAlgorithmTool.EncryptData(bs, idKey);
                id = HEXString.ToString(bs);
                return id;
            }
        }

        public static string CreateMachineCode()
        {
            string id = GenMachineKeyEx.GenID;
            byte[] bs = EM.CHATool.getMD5(id);
            string str = HEXString.ToString(bs);
            return str;
        }
    }

    public class GenMachineKey
    {
        public const string idKey = "{88E21C21-4C57-440e-8121-76C7E6D465E8}";
        public const string signKey = "0001000000ffffffff01000000000000000601000000084578706f6e656e740b0001000000ffffffff010000000000000004010000000c53797374656d2e496e74333201000000076d5f76616c75650008030000000b0001000000ffffffff01000000000000000f0100000003000000020100010b0001000000ffffffff01000000000000000601000000074d6f64756c75730b0001000000ffffffff010000000000000004010000000c53797374656d2e496e74333201000000076d5f76616c75650008800000000b0001000000ffffffff01000000000000000f010000008000000002b86deaaecd2fabcbd8d7f0e65eb0611c65cc0403e3a66b509186ea9a3549964c75b21037b4b89c289cc9143d68c881db5331bea3cc0f84e3de1ede90c05d49f412d9fe057430a5a46d121e6145fb7cf081fff1131f02f0c6cfe2b1c2336f210c0650763fad938b255f9c754f527b92de0e6d3309039cf3bdc3c428f1598e38830b0001000000ffffffff0100000000000000060100000001500b0001000000ffffffff010000000000000004010000000c53797374656d2e496e74333201000000076d5f76616c75650008400000000b0001000000ffffffff01000000000000000f010000004000000002eeccc2f61b8cac1501d66e3de857862d3b06dc3c44538e1dcd8feb316a08d80dd0e029547fe1a52026bf49a95a374d2a6a766385deafbdaf9e3419296580cddd0b0001000000ffffffff0100000000000000060100000001510b0001000000ffffffff010000000000000004010000000c53797374656d2e496e74333201000000076d5f76616c75650008400000000b0001000000ffffffff01000000000000000f010000004000000002c5b69dacd86b5b2857f2b0279ae317d4db22fdece7b6ee6a2b0945569331819d604f35a67bb85f334c8ab0ce8a70dee5ae031a5b65c9d576a3d34e49fb04a9df0b0001000000ffffffff010000000000000006010000000244500b0001000000ffffffff010000000000000004010000000c53797374656d2e496e74333201000000076d5f76616c75650008400000000b0001000000ffffffff01000000000000000f010000004000000002a8221556f098c0045e71dad6cdc2ea1ee883710721d86ea47f3a488f5727f8eee9551ae47ad1a5d098577086c39552487e02f319ab6bb33376411a42324c59250b0001000000ffffffff010000000000000006010000000244510b0001000000ffffffff010000000000000004010000000c53797374656d2e496e74333201000000076d5f76616c75650008400000000b0001000000ffffffff01000000000000000f0100000040000000025b2046202a47a0e64152ebf9f51b821a6b3dff87376d4b09c7f827eb3540761b110eb10da0ac63c4831cd14d00e5f0f62f73e2ac09883348d14d4d222ffe00450b0001000000ffffffff0100000000000000060100000008496e7665727365510b0001000000ffffffff010000000000000004010000000c53797374656d2e496e74333201000000076d5f76616c75650008400000000b0001000000ffffffff01000000000000000f0100000040000000023f45e1639ad2b861d3f02335f745d877709d6cc640043fe79edee9f89b4677f907705294666a2c5acede305dc361e1e8d8fc8322cf00d793ba43d2502a1cc5b00b0001000000ffffffff0100000000000000060100000001440b0001000000ffffffff010000000000000004010000000c53797374656d2e496e74333201000000076d5f76616c75650008800000000b0001000000ffffffff01000000000000000f0100000080000000027fecae060588f56ef5c002f6a7e34bd8b8bb646596384ee399adad78bd5187910d6a2f59945f20e202ae6efd917ad2a7e0f2f63b034618753e12c76a3c23f930c642e9f3f2e052ef482f306fdecc8d556f3316bdbbac9e65204b79f978b3ef3fb955b4a00f9af6eb1132bcc64505879f80e444598778f07ce69e98cfda373a110b0001000000ffffffff0100000000000000060100000003656e640b";
        static string FileName = Path.GetDirectoryName(Application.ExecutablePath) + "\\licence.x";
        static string GenID
        {
            get
            {
                string id = WMI.id();
                byte[] bs = CHATool.getMD5(id);
                if (bs.Length > 16)
                {
                    Array.Resize(ref bs, 16);
                }

                id = HEXString.ToString(bs);
                bs = EM.SymmetricAlgorithmTool.EncryptData(bs, idKey);
                id = HEXString.ToString(bs);
                return id;
            }
        }

        public static string CreateMachineCode()
        {
            string id = GenMachineKey.GenID;
            byte[] bs = EM.CHATool.getMD5(id);
            string str = HEXString.ToString(bs);
            return str;
        }

        public static void CreateMachineCodenFile(string id, string FileName)
        {
            byte[] bs = EM.CHATool.getMD5(id);
            string str = HEXString.ToString(bs);
            XMLDataClass.XMLDataObject pxml = new XMLDataClass.XMLDataObject();
            pxml.SetValue("/root/authorization", str);
            pxml.Save(FileName);
        }

        public static void abort(string sign)
        {
            System.Threading.Thread.BeginCriticalRegion();
            try
            {
                RSATool rsa = new RSATool();
                rsa.PrivateKey = RSATool.StringToKey(signKey);
                byte[] bs = rsa.Decrypt(HEXString.ToBytes(sign));
                sign = HEXString.ToString(bs);
                string sign1 = CreateMachineCode();
                int x = 1 / string.Compare(sign1, sign);
            }
            catch
            {
                System.Threading.Thread.EndCriticalRegion();
                return;
            }
            throw new Exception("这不是你的错!");
        }

        public static void abort()
        {
            System.Threading.Thread.BeginCriticalRegion();
            if (!File.Exists(FileName))
                throw new Exception();
            System.Threading.Thread.EndCriticalRegion();

            XMLDataClass.XMLDataObject xml = XMLDataClass.XMLDataObject.Load(FileName);
            string sign = xml.GetValue("/root/authorization");
            abort(sign);
        }

        public static bool check()
        {
            if (!File.Exists(FileName))
                return false;
            XMLDataClass.XMLDataObject xml = XMLDataClass.XMLDataObject.Load(FileName);
            string credit = xml.GetValue("/root/authorization");
            return check(credit);
        }

        public static bool checkTest(string sign)
        {
            if (!File.Exists(FileName))
                return false;

            XMLDataClass.XMLDataObject xml = XMLDataClass.XMLDataObject.Load(FileName);
            string credit = xml.GetValue("/root/authorization");
            return check(credit, sign);
        }

        public static bool check(string sign)
        {
            RSATool rsa = new RSATool();
            rsa.PrivateKey = RSATool.StringToKey(signKey);
            byte[] bs = rsa.Decrypt(HEXString.ToBytes(sign));
            sign = HEXString.ToString(bs);
            return check(sign, CreateMachineCode());
        }

        public static bool check(string sign, string machineCode)
        {
            RSATool rsa = new RSATool();
            rsa.PrivateKey = RSATool.StringToKey(signKey);
            byte[] bs = rsa.Decrypt(HEXString.ToBytes(sign));
            sign = HEXString.ToString(bs);
            return (string.Compare(machineCode, sign) == 0);
        }

        static void threadExceptionEventHandler(object sender, ThreadExceptionEventArgs e)
        {
            Exception ee = (Exception)e.Exception;
            if (ee.Message == "这不是你的错!")
            {
                System.Diagnostics.Process.GetCurrentProcess().Kill();
            }
        }

        static void unhandledExceptionEventHandler(object sender, UnhandledExceptionEventArgs e)
        {
            Exception ee = (Exception)e.ExceptionObject;
            if (ee.Message == "这不是你的错!")
            {
                System.Diagnostics.Process.GetCurrentProcess().Kill();
            }
        }

        public static void go()
        {
            string str = "";
        }

        static void ThreadProc()
        {
            Random r = new Random(60 * 1000);

            System.Threading.Thread.Sleep(r.Next(3 * 60 * 1000));
            abort();
        }
        static GenMachineKey()
        {
            System.Threading.Thread thread = new Thread(new ThreadStart(ThreadProc));
            thread.IsBackground = true;
            thread.Start();
            try
            {
                Application.SetUnhandledExceptionMode(UnhandledExceptionMode.ThrowException);
            }
            catch { }
            Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(threadExceptionEventHandler);
            AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(unhandledExceptionEventHandler);
        }
        */
}
View Code

 

 

posted on 2013-10-25 10:48  RJ  阅读(201)  评论(0)    收藏  举报

导航