하드웨어 기반 라이선스 관리 프로그램 사용 설명서
### 1. 프로그램 개요
이 프로그램은 사용자 컴퓨터의 하드웨어 정보를 기반으로 라이선스 키를 생성하고 검증하는 기능을 제공합니다. 소프트웨어 불법 복제를 방지하고, 정품 사용자에게만 소프트웨어 사용 권한을 부여하는 데 활용될 수 있습니다.
import wmi
import hashlib
import uuid
import base64
import winreg
import subprocess
import json
class HardwareAuth:
def __init__(self):
self.computer = wmi.WMI()
self.salt = "YOUR_SALT_HERE" # 실제 운영시에는 변경 필요
def get_hardware_info(self):
"""시스템의 하드웨어 정보 수집"""
hardware_info = {
'cpu_id': self._get_cpu_info(),
'motherboard': self._get_motherboard_info(),
'disk_id': self._get_disk_info(),
'mac_address': self._get_mac_address()
}
return hardware_info
def _get_cpu_info(self):
"""CPU 정보 수집"""
try:
cpu_info = []
for cpu in self.computer.Win32_Processor():
cpu_info.append({
'ProcessorId': getattr(cpu, 'ProcessorId', ''),
'SerialNumber': getattr(cpu, 'SerialNumber', ''),
'Manufacturer': getattr(cpu, 'Manufacturer', '')
})
return cpu_info[0] if cpu_info else {}
except Exception as e:
print(f"CPU 정보 수집 중 오류: {str(e)}")
return {}
def _get_motherboard_info(self):
"""메인보드 정보 수집"""
try:
for board in self.computer.Win32_BaseBoard():
return {
'Manufacturer': getattr(board, 'Manufacturer', ''),
'Product': getattr(board, 'Product', ''),
'SerialNumber': getattr(board, 'SerialNumber', '')
}
return {}
except Exception as e:
print(f"메인보드 정보 수집 중 오류: {str(e)}")
return {}
def _get_disk_info(self):
"""하드디스크 정보 수집"""
try:
disk_info = []
for disk in self.computer.Win32_DiskDrive():
if disk.Size: # 실제 물리 디스크만
serial = getattr(disk, 'SerialNumber', '')
if serial is not None:
serial = serial.strip()
disk_info.append({
'SerialNumber': serial or '',
'Model': getattr(disk, 'Model', ''),
'Size': getattr(disk, 'Size', '')
})
return disk_info[0] if disk_info else {}
except Exception as e:
print(f"디스크 정보 수집 중 오류: {str(e)}")
return {}
def _get_mac_address(self):
"""MAC 주소 수집"""
try:
for nic in self.computer.Win32_NetworkAdapter():
if getattr(nic, 'MACAddress', None):
return nic.MACAddress
return ""
except Exception as e:
print(f"MAC 주소 수집 중 오류: {str(e)}")
return ""
def generate_hardware_key(self):
"""하드웨어 정보를 기반으로 키 생성"""
try:
hardware = self.get_hardware_info()
# 핵심 하드웨어 정보만 선택하여 해시 생성
hw_string = (
f"{hardware['cpu_id'].get('ProcessorId', '')}"
f"{hardware['motherboard'].get('SerialNumber', '')}"
f"{hardware['disk_id'].get('SerialNumber', '')}"
f"{hardware['mac_address']}"
)
# 빈 문자열 체크
if not hw_string.strip():
raise ValueError("하드웨어 정보를 충분히 수집하지 못했습니다.")
# 솔트를 추가하여 해시
salted_hw = hw_string + self.salt
hash_object = hashlib.sha256(salted_hw.encode())
hardware_hash = hash_object.hexdigest()
# Base64로 인코딩하여 더 짧은 키 생성
encoded_key = base64.b64encode(hardware_hash.encode()).decode()
return encoded_key[:32] # 32자로 제한
except Exception as e:
print(f"키 생성 중 오류 발생: {str(e)}")
return None
def verify_license_key(self, license_key):
"""라이선스 키 검증"""
try:
if not license_key:
return False, "라이선스 키가 제공되지 않았습니다."
# 현재 하드웨어로 새로운 키 생성
current_key = self.generate_hardware_key()
if not current_key:
return False, "하드웨어 키를 생성할 수 없습니다."
# 제공된 라이선스 키와 비교
if current_key == license_key:
return True, "인증 성공"
else:
return False, "하드웨어 정보가 일치하지 않습니다."
except Exception as e:
return False, f"인증 실패: {str(e)}"
def main():
"""사용 예시"""
try:
auth = HardwareAuth()
# 1. 하드웨어 정보 수집
print("\n=== 하드웨어 정보 ===")
hw_info = auth.get_hardware_info()
print(json.dumps(hw_info, indent=2, ensure_ascii=False))
# 2. 하드웨어 키 생성
hardware_key = auth.generate_hardware_key()
if hardware_key:
print(f"\n생성된 라이선스 키: {hardware_key}")
else:
print("\n라이선스 키를 생성할 수 없습니다.")
return
# 3. 라이선스 키 검증
print("\n=== 라이선스 검증 ===")
is_valid, message = auth.verify_license_key(hardware_key)
print(f"검증 결과: {message}")
if not is_valid:
print("프로그램을 종료합니다.")
return
print("프로그램을 시작합니다...")
except Exception as e:
print(f"오류 발생: {str(e)}")
if __name__ == "__main__":
main()
### 2. 프로그램 구성
* **`HardwareAuth` 클래스:** CPU, 마더보드, 디스크, MAC 주소와 같은 하드웨어 정보를 수집하고 이를 기반으로 라이선스 키를 생성 및 검증하는 기능을 담당합니다.
* **`LicenseCheckerGUI` 클래스:** Tkinter 라이브러리를 사용하여 사용자에게 그래픽 인터페이스를 제공합니다. 하드웨어 정보 표시, 라이선스 키 생성 및 검증, 작업 로그 기록 등의 기능을 GUI를 통해 쉽게 이용할 수 있도록 합니다.
### 3. 프로그램 사용 방법
1. **하드웨어 정보 확인:** 프로그램을 실행하면 사용자 컴퓨터의 하드웨어 정보가 자동으로 수집되어 "하드웨어 정보" 섹션에 표시됩니다.
2. **라이선스 키 생성:** "라이선스 키 생성" 섹션에서 "키 생성" 버튼을 클릭하면 현재 하드웨어 정보를 기반으로 라이선스 키가 생성되어 표시됩니다. 생성된 라이선스 키는 소프트웨어 개발자가 사용자에게 제공해야 합니다.
3. **라이선스 키 검증:** 사용자는 "라이선스 키 검증" 섹션에 개발자로부터 받은 라이선스 키를 입력하고 "키 검증" 버튼을 클릭하여 라이선스 유효성을 검사할 수 있습니다.
* 입력된 라이선스 키가 현재 하드웨어 정보에서 생성된 키와 일치하면 라이선스가 유효하며 소프트웨어를 사용할 수 있습니다.
* 일치하지 않으면 라이선스가 유효하지 않으며 소프트웨어 사용이 제한될 수 있습니다.
4. **작업 로그 확인:** 프로그램 사용 중 발생하는 모든 작업은 "작업 로그" 섹션에 기록되어 문제 발생 시 원인 분석에 도움을 줄 수 있습니다.
### 4. 추가 정보
* 프로그램 사용 중 오류 발생 시 "작업 로그" 섹션을 확인하여 오류 메시지와 발생 시간을 확인하십시오.
* 프로그램 사용에 대한 자세한 문의는 소프트웨어 개발자에게 연락하십시오.
**참고:** 본 사용 설명서는 제공된 소스 코드를 기반으로 작성되었습니다. 실제 프로그램 사용 방법은 개발자의 구현 방식에 따라 다를 수 있습니다.
'코딩연습' 카테고리의 다른 글
Google Sheets를 사용한 라이선스 관리 및 console API 생성 방법 (2) | 2024.11.12 |
---|---|
RAG(검색 증강 생성)? LLM 대규모 언어 모델의 한계를 넘어서다 (5) | 2024.11.05 |
Zapier와 Make로 시작하는 실전 노코드 데이터 업무 자동화 (6) | 2024.11.05 |
[24년 11월 3일] 오늘의 개발일기 (6) | 2024.11.03 |
마크다운 Markdown 의미, 사용법? (2) | 2024.11.02 |