개발자국/C#
[C#] USB Serial Key
알 수 없는 사용자
2012. 12. 4. 01:09
특정 USB가 아니면 실행이 안되도록 하는 프로그램을 만들고 싶었다.
즉, 다른 USB에 복사를 해서 실행하면 절대 실행이 안되는!?
그야말로 나만의 Dongle 이 아니겠는가!?
두가지 방법이 생각났다!!
1. USB Serial Key를 읽어서 코드에 때려 박고, 컴파일하여 EXE를 만든다.
(이 방법은 확장성이 Zero라서 USB가 여러개가 필요하면 망한다..)
2. USB Serial Key를 이용해 특정 Incording 파일을 생성하고,
실행시 그 파일을 Decording 하여 USB Serial Key와 비교한다.
(이 방법은 알수없는 파일이 생성되고 뭔가 Incording 파일을 만들어 줄만한 Util이 필요하지만, 확장성이 좋다)
뭐 두가지던 세가지던 방법이야 여러가지가 있겠지만 일단 지금은 USB Serial Key부터 읽어오자.
구글링을 하던중 .NET 에서 제공하는 System.Management 라는 라이브러리를 발견하였다.
1: ManagementObjectSearcher theSearcher = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive WHERE InterfaceType='USB'");
2: foreach (ManagementObject currentObject in theSearcher.Get())
3: {
4: ManagementObject theSerialNumberObjectQuery = new ManagementObject("Win32_PhysicalMedia.Tag='" + currentObject["DeviceID"] + "'");
5: MessageBox.Show(theSerialNumberObjectQuery["SerialNumber"].ToString());
6: }
생각보다 간단하다.
ManagementObjectSearcher 라는 클래스를 통해 쿼리문을 넣어주면 DiskDrive 중에서 USB 를 찾아온다.
찾은 USB에서 ManagementObject 클래스의 생성자를 이용하면 SerialNumber 라는 Key 값을 얻을 수 있다.
ManagementObject 라는 클래스가 그밖에 여러가지를 할 수 있을것 같지만
퇴근하고 이시간에 코드 보고 있으려니 죽겠어서 오늘은 이만..