[c#] 내 C # 애플리케이션에 대한 제품 키를 생성하려면 어떻게해야합니까?

내 C # 애플리케이션에 대한 제품 키를 생성하려면 어떻게해야합니까?

매년 업데이트하는 제품 (또는 라이선스) 키를 만들어야합니다. 또한 평가판 용으로 생성해야합니다.

관련 :



답변

애플리케이션에 인증하려는 데이터가 포함 된 레코드를 만드는 것과 같은 작업을 수행 할 수 있습니다. 여기에는 활성화 할 프로그램 기능, 만료 날짜, 사용자 이름 (사용자에게 바인딩하려는 경우) 등 원하는 모든 것이 포함될 수 있습니다. 그런 다음 고정 키로 암호화 알고리즘을 사용하여 암호화하거나 해시하십시오. 그런 다음 프로그램 내에서 확인하면됩니다. 라이센스 파일을 배포하는 한 가지 방법 (Windows)은 레지스트리를 업데이트하는 파일로 제공하는 것입니다 (사용자가 입력하지 않아도 됨).

그러나 잘못된 보안 감각에주의하십시오. 조만간 누군가가 프로그램을 패치하여 해당 검사를 건너 뛰고 패치 된 버전을 배포 할 것입니다. 또는, 그들은 모든 검사를 통과하고 그것을 배포하는 키를 알아 내거나, 시계를 뒤로 넘깁니다. 당신이 당신의 계획을 얼마나 복잡하게 만드는지는 중요하지 않습니다. 당신이 이것을 위해하는 모든 일은 궁극적으로 모호함을 통한 보안이 될 것이며 항상 이것을 할 수 있습니다. 누군가가 할 수 없더라도 해킹 된 버전을 배포 할 것입니다. 동글을 제공하더라도 동일하게 적용됩니다. 누군가가 원할 경우 수표를 패치 할 수도 있습니다. 코드에 디지털 서명을하는 것은 도움이되지 않으며 해당 서명을 제거하거나 사임 할 수 있습니다.

프로그램이 디버거 등에서 실행되는 것을 방지하는 기술을 사용하여 문제를 약간 복잡하게 만들 수 있지만, 이것조차도 방탄이 아닙니다. 따라서 정직한 사용자가 지불하는 것을 잊지 않도록 충분히 어렵게 만들어야합니다. 또한 귀하의 계획이 유료 사용자에게 방해가되지 않도록 매우주의하십시오. 유료 고객이 지불 한 것을 사용할 수없는 것보다 일부를 뜯어내는 것이 좋습니다.

또 다른 옵션은 온라인 확인을하는 것입니다. 사용자에게 고유 ID를 제공하고 ID가 가져야하는 기능에 대해 온라인으로 확인하고 일정 기간 동안 캐시합니다. 하지만 모든 동일한주의 사항이 적용됩니다. 사람들은 이와 같은 것을 얻을 수 있습니다.

키를 잊어 버린 사용자를 처리해야하는 지원 비용 등도 고려하십시오.

편집 : 나는 단지 추가하고 싶고, 이것에 너무 많은 시간을 투자하거나 어떻게 든 당신의 복잡한 계획이 다르고 깨지지 않을 것이라고 생각하지 마십시오. 프로그램이 실행되는 하드웨어와 OS를 사람들이 제어하는 ​​한 그렇게 할 수 없으며 그럴 수도 없습니다. 개발자들은이를 위해 자신의 시스템을 개발하면 자신에게만 알려 지므로 ‘더 안전하다’고 생각하면서 더욱 복잡한 계획을 세우려고 노력해 왔습니다. 그러나 그것은 실제로 영구 운동 기계를 만드는 것과 같은 프로그래밍입니다. 🙂


답변

당신은 누구를 신뢰합니까?

저는 항상이 영역이 애플리케이션의 런타임 보안을 관리하기 위해 타사를 신뢰하기에는 너무 중요하다고 생각했습니다. 해당 구성 요소가 하나의 애플리케이션에 대해 크랙되면 모든 애플리케이션에 대해 크랙됩니다. 몇 년 전 3ds Max 용 타사 라이센스 솔루션을 사용하고 나서 5 분 만 에 Discreet 에 발생했습니다 . 좋은 시간입니다!

진지하게, 알고리즘을 완전히 제어하기 위해 자신의 롤링을 고려하십시오. 그렇다면 다음 행을 따라 키의 구성 요소를 사용하는 것이 좋습니다.

  • 라이선스 이름-라이선스를 부여하는 클라이언트 (있는 경우)의 이름입니다. 회사 배포를 관리하는 데 유용합니다. 제공하는 라이선스 정보에 “개인화 된”이름이 있다는 느낌을 주어야합니다.
  • 라이센스 만료 날짜
  • 동일한 라이선스로 실행할 사용자 수입니다. 이것은 서버 방식으로 사이트에서 실행중인 인스턴스를 추적하는 방법이 있다고 가정합니다.
  • 기능 코드-여러 기능 및 여러 제품에서 동일한 라이선스 시스템을 사용할 수 있습니다. 물론 한 제품에 대해 금이 가면 모두에게 금이가는 것입니다.

그런 다음 지옥을 체크섬하고 원하는 (가역 가능한) 암호화를 추가하여 크래킹을 더 어렵게 만드십시오.

평가판 라이센스 키를 만들려면 “평가판 모드”로 번역되는 위의 값에 대한 값을 설정하기 만하면됩니다.

그리고 이것은 아마도 응용 프로그램 / 회사에서 가장 중요한 코드 일 것이므로 난독 화 대신에 해독 루틴을 네이티브 DLL 파일에 넣고 간단히 P / Invoke 하는 것을 고려하십시오.

제가 함께 일한 여러 회사는이를 위해 일반화 된 접근 방식을 채택하여 큰 성공을 거두었습니다. 아니면 제품이 깨질 가치가 없었을 수도 있습니다.)


답변

Windows 제품 키와 같이 입력 할 수있는 키에 대해 묻는 경우 몇 가지 검사를 기반으로합니다. 복사하여 붙여 넣어야하는 키에 대해 이야기하는 경우 해당 키는 디지털 서명 (개인 키 암호화)을 기반으로합니다.

간단한 제품 키 논리는 제품 키가와 같은 4 개의 5 자리 그룹으로 구성되어 있다고 말한 abcde-fghij-kljmo-pqrst다음 계속해서 f + k + p와 같은 내부 관계를 지정하여 2의 첫 번째 숫자를 의미하는 것입니다. , 3, 4 그룹은 총 1 명이어야합니다. 즉, 8xxxx-2xxxx-4xxxx-2xxxx가 유효하므로 8xxxx-1xxxx-0xxxx-7xxxx도 유효합니다. 물론, 첫 번째 그룹의 두 번째 숫자가 홀수이면 마지막 그룹의 마지막 숫자도 홀수 여야하는 복잡한 관계를 포함하여 다른 관계도있을 것입니다. 이렇게하면 제품 키에 대한 생성기가 있고 제품 ​​키 확인은 모든 규칙과 일치하는지 간단히 확인합니다.

암호화는 일반적으로 개인 키 (== 디지털 서명)를 사용하여 암호화되고 Base64 로 변환 된 라이선스에 대한 정보 문자열입니다 . 공개 키는 애플리케이션과 함께 배포됩니다. Base64 문자열이 도착하면 공개 키로 확인 (== 해독)되고 유효한 것으로 확인되면 제품이 활성화됩니다.


답변

사소한 것이 든 크래킹하기 어려운 것이 든, 그것이 정말로 큰 차이를 만드는지 확신하지 못합니다.

앱이 크랙 될 가능성은 제품 키 처리의 강도보다는 유용성에 훨씬 더 비례합니다.

개인적으로 두 종류의 사용자가 있다고 생각합니다. 지불하는 사람들. 그렇지 않은 사람들. 그렇게하는 사람들은 가장 사소한 보호로도 그렇게 할 것입니다. 크랙을 기다리거나 다른 곳을 보지 않는 사람들. 어느 쪽이든 더 이상 돈을 벌 수 없습니다.


답변

내가 미친 짓을 할 거라는 걸 인정해야 겠어.

  1. CPU 병목 현상을 찾아 P / Invokeable DLL 파일로 추출 합니다.
  2. 빌드 후 작업으로 XOR 암호화 키를 사용하여 DLL 파일의 일부를 암호화합니다.
  3. 공개 / 개인 키 체계를 선택하고 DLL 파일에 공개 키를 포함합니다.
  4. 제품 키를 해독하고 두 절반을 함께 XOR하면 DLL에 대한 암호화 키가 생성되도록 배열하십시오.
  5. DLL의 DllMain 코드에서 보호 (PAGE_EXECUTE_READWRITE)를 비활성화하고 키로 해독합니다.
  6. 라이센스 키와 매개 변수의 온 전성 검사를 수행하는 LicenseCheck () 메서드를 만든 다음 전체 DLL 파일을 체크섬하여 둘 중 하나에 라이센스 위반을 발생시킵니다. 아, 여기에서 다른 초기화를 수행하십시오.

그들이 LicenseCheck를 찾아서 제거 할 때 DLL이 세그멘테이션 오류를 시작하면 어떤 재미가 따라 올까요 ?


답변

옵션이 Microsoft 소프트웨어 라이센스 및 보호 (SLP) 서비스뿐만 아니라이. 그것에 대해 읽은 후에 나는 그것을 정말로 사용할 수 있기를 바랍니다.

라이센스에 따라 코드의 일부를 차단한다는 생각이 정말 마음에 듭니다. .NET에 가장 안전하고 인기있는 제품입니다. 사용하지 않아도 재미있는 읽기!

Microsoft® 소프트웨어 라이선스 및 보호 (SLP) 서비스는 ISV (독립 소프트웨어 공급 업체)가 고객에게 유연한 라이선스 조건을 채택 할 수 있도록하는 소프트웨어 활성화 서비스입니다. Microsoft SLP 서비스는 응용 프로그램 및 라이선스 정보를 보호하는 고유 한 보호 방법을 사용하여 고객 규정 준수를 향상시키면서 시장에 더 빨리 진출 할 수 있습니다.

참고 : 이것이 중요한 알고리즘과 같은 민감한 코드가있는 제품을 출시하는 유일한 방법입니다.


답변

일련 번호를 만들고 확인하는 간단한 솔루션을 원한다면 Ellipter를 사용해보십시오 . 타원 곡선 암호화를 사용하고 “만료일”기능이 있으므로 평가판 또는 시간 제한 등록 키를 만들 수 있습니다.