윈도우 6. RustDesk ID 는 PC 고유 번호가 아니다: 포맷하면 바뀌는 ID 대신 하드웨어 값으로 같은 PC 알아보기
원격 수리 요금제 중에 1년 동안 무상 재포맷을 해 주는 케어가 있습니다. 그러려면 나중에 연락이 왔을 때 “그때 작업한 그 PC” 인지 알아야 합니다. 처음엔 작업을 마칠 때 관리 화면에 RustDesk ID 와 컴퓨터 이름을 손으로 적게 했습니다.
그런데 기록을 보다 보니 작업 한 번에 RustDesk ID 가 두세 개씩 나오고 있었습니다.
RustDesk ID 는 처음 실행할 때 MAC 주소로 만들고, 자체 중계 서버는 그 ID 를 윈도우의 MachineGuid 에 묶어 둡니다. 포맷하면 MachineGuid 가 바뀌니 서버가 같은 ID 를 거절하고, 클라이언트는 무작위 10자리 ID 로 바꿉니다. 게다가 PE 에서 돌던 RustDesk 와 재부팅 복귀용 임시 계정의 RustDesk 도 각자 ID 를 받습니다. 기존 윈도우, PE, 새 윈도우가 서로 다른 ID 를 갖는 셈입니다.
컴퓨터 이름도 쓸 수 없었습니다. 무인 설치 응답 파일에 ComputerName 을 넣지 않아서 새로 깔면 DESKTOP-XXXXXXX 같은 무작위 이름이 됩니다.
그래서 같은 PC 판단은 하드웨어 값 하나로 하기로 했습니다. 원격 지원 프로그램이 실행될 때 이 값들을 읽습니다.
(Get-CimInstance Win32_ComputerSystemProduct).UUID # SMBIOS UUID
(Get-CimInstance Win32_BaseBoard).SerialNumber # 메인보드 시리얼
(Get-CimInstance Win32_BIOS).SerialNumber # BIOS 시리얼
조립 PC 는 이 값이 To be filled by O.E.M. 이나 00000000-0000-0000-0000-000000000000, Default string 같은 가짜 값인 경우가 많아서, 그런 값은 버립니다. 셋 다 쓸 수 없으면 내장 랜카드 MAC 으로 대신합니다. 남은 값들을 pcm-device-v1|... 로 이어 붙여 SHA-256 을 계산하고, 그 해시만 서버로 보냅니다. 원래 번호는 PC 밖으로 나가지 않습니다.
이렇게 하면 포맷 전 윈도우, PE, 새 윈도우에서 모두 같은 값이 나와야 합니다. 같은 PE 와 윈도우가 같은 메인보드를 보니까요. 작업 완료 버튼을 누르면 서버가 그 주문으로 들어온 마지막 값을 저장하고, 나중에 다시 연락이 오면 이 값으로 케어 대상 PC 인지, 예전에 작업한 PC 인지 알림에 붙여 줍니다. 앞선 접속과 다른 PC 면 경고를 띄우고요.
관리 화면에서 손으로 적던 칸은 없애고, 완료 버튼만 남겼습니다.
이 값도 결국 PC 를 알아보는 식별값이라 개인정보처리방침에 수집 항목과 보관 기간을 적었습니다. 실제 PC 로 기존 윈도우, PE, 새 윈도우 세 단계에서 같은 값이 나오는지는 다음 실기기 작업에서 확인할 차례입니다.
참고: RustDesk, https://github.com/rustdesk/rustdesk