본문 바로가기
C#/C# Windows Form

C# 하드번호

by TcTT 2017. 8. 9.
반응형

C# 하드번호


C#에서 하드번호를 가져오는 방법을 포스팅한다.

가져오는방법을 잘이용해서 Get이아닌 Set을 사용하면 하드번호를 바꿀 수 있다.


일단 포스팅전 왜 하드번호를 알아야할까?

일반적인 배포 프로그램에선 사용할 일이 없지만.. 특정 프로그램에서 디스크 일련번호를 서버에 올려두고, 특정 디스크에 일련번호만 프로그램이 실행되도록 만들 수 있다...


하지만 http://tctt.tistory.com/153 에 포스팅된 툴을 이용하면 손쉽게 우회가 가능한 허점이 있다.



프로그램 실행 모습이다.

현재 내 C드라이브의 하드 시리얼넘버는 20B0 1E33이다.


http://tctt.tistory.com/153 에 포스팅한 툴에도 동일하게 20B0 1E33으로 나온다.


왜인지는 모르겠으나 영문 A ~ F / 숫자 0~9 로 조합된 HEX보단 순수 숫자로만 구성된 DECIMAL 형식을 많이 사용하는거같아 HEX코드를 DECIMAL형식으로 바꾸는 함수를 만들고 사용했다.



소스코드만 사용해서 코딩한다면, 참조추가에서 

어셈블리 -> 프레임워크에있는 System.Management 를 꼭 추가해야한다.


핵심 소스코드 :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
        private void button1_Click(object sender, EventArgs e)
        {
            //ManagementObject 클래스사용해서 manageobject 객체생성
            //초기화는 C드라이브로지정해주기.
            ManagementObject manageobject = new ManagementObject("win32_logicaldisk.deviceid=\"" + "C" + ":\"");
            manageobject.Get();
 
            //출력
            textBox1.Text = manageobject["VolumeSerialNumber"].ToString();
            textBox2.Text = HextoDec(manageobject["VolumeSerialNumber"].ToString()).ToString();
        }
 
 
        //String Hex data => Decimal Converting
        public static Decimal HextoDec(string str)
        {
            str = str.Replace("x"string.Empty);
            long result = 0;
            long.TryParse(str, System.Globalization.NumberStyles.HexNumber, nullout result);
            return result;
        }
cs



다운로드 :

HardNumber.zip






반응형

'C# > C# Windows Form' 카테고리의 다른 글

C# 마방진  (0) 2017.10.13
C# string To DateTime  (2) 2017.09.18
C# Google Adsense  (6) 2017.07.21
C# 관리자권한 실행  (0) 2017.06.13
C# AutoIt 응용  (0) 2017.06.05