소프트웨어 라이센스 키를 생성하고 확인하는 방법은 무엇입니까?


236

현재 무료로 다운로드 할 수 있지만 매우 제한된 버전의 제품 (C #으로 개발)을 개발하고 있습니다. 사용자가 라이센스 비용을 지불하고 키를 받아야하는 모든 기능에 액세스하려면. 그런 다음이 키는 응용 프로그램에 입력되어 정식 버전을 "잠금 해제"합니다.

그런 라이센스 키를 사용하는 것이 평범한 것 같습니다.

  1. 보통 어떻게 해결 되나요?
  2. 키를 어떻게 생성하고 응용 프로그램에서 키를 어떻게 확인할 수 있습니까?
  3. 인터넷에 키가 게시되지 않고 라이센스를 지불하지 않은 다른 사람 (기본적으로 "자신의 키"가 아닌 키)이 키를 사용하지 않도록하려면 어떻게해야합니까?

어쨌든 키를 응용 프로그램 버전에 연결해야 기능 버전의 새 키를 청구 할 수 있습니다.

이 시나리오에서 고려해야 할 다른 것이 있습니까?

답변:


126

주의 사항 : 사용자가 불법 복제하는 것을 막을 수는 없지만 정직한 사용자가 올바른 일을 더 쉽게 수행 할 수 있습니다.

각 사용자에 대해 특수 빌드를 원하지 않는다고 가정하면 다음을 수행하십시오.

  • 제품의 비밀 키 생성
  • 사용자의 이름을
  • SHA1을 사용하여 사용자 이름과 비밀 키 및 해시 연결
  • SHA1 해시를 영숫자 문자열로 압축 해제하십시오. 이것은 개별 사용자의 "제품 키"입니다
  • 프로그램 내에서 동일한 해시를 수행하고 제품 키와 비교하십시오. 같으면 OK.

그러나 나는 반복한다. 이것은 불법 복제를 막지 못한다.


나는 최근에이 접근법이 암호 적으로 그리 건전하지 않다는 것을 읽었습니다. 그러나이 솔루션은 이미 약합니다 ( 소프트웨어 자체에는 어딘가에 비밀 키가 포함되어야 함 ).이 발견으로 인해 솔루션이 무효화되는 것으로 생각하지 않습니다.

그래도 내가 이것을 언급해야한다고 생각했습니다. 이것으로부터 다른 것을 파생시킬 계획이라면 조심하십시오.


13
크랙 (상기 공정에 의해 묵시적으로) 프로그램이 비밀 키를 포함하는 경우는 사소한
스티븐 A. 로우

2
보다 분명하게 편집; 뭔가를 지나치게 강조 할 수없는 근본적인 ;-)
스티븐 A. 로우

23
비밀 키가 코드에 포함되지 않도록 제품 키를 생성하고 디코딩 할 때 비대칭 암호화 방법 (예 : RSA)을 사용하십시오.
Amir Moghimi

6
비밀 키를 찾기 위해 누군가가 코드를 해킹 할 때 (어쩌면 어셈블리 수준에서) 아마도 수표를 완전히 우회 할 수있는 수준 일 것입니다. 프로그램을 로컬에서 실행하는 훌륭한 해커가 살아남을 수 있도록 등록 방법이 안전하다고 생각하지 않습니다. 원래 의견에서 말했듯이 실제로 파일을 복사하는 것보다 한 단계 더 어렵게 만드는 것은 무엇이든 중요합니다. 요즘 많은 게임이 복제 방지 기능을 포기하고 단순히 게임 콘텐츠를 온라인으로 가져옵니다.이 경우 코드가 해커의 손에 없습니다.
JamieB

1
라이센스 키에 제한을 포함시키는 것이 일반적입니까? 예를 들어 시간 제한, 동시 사용자 수, 설치할 모듈 등?
Carlo

97

라이센스 키를 생성하는 방법은 여러 가지가 있지만 실제로는 거의 안전하지 않습니다. 기업에게는 라이센스 키가 실제 현금과 거의 같은 가치를 가지기 때문에 유감입니다.

이상적으로 라이센스 키에 다음 속성이 있어야합니다.

  1. 누군가가 귀하의 제품을 완전히 리버스 엔지니어링하더라도 (귀하의 경험으로 말하면) 회사 만이 귀하의 제품에 대한 라이센스 키를 생성 할 수 있어야합니다. 라이센싱 제어가 진지한 경우 알고리즘을 난독 처리하거나 소프트웨어 내에 암호화 키를 숨기는 것은 실제로 문제가되지 않습니다. 귀하의 제품이 성공하면 누군가는 출시 후 며칠 안에 키 생성기를 만들 것입니다.

  2. 라이센스 키는 한 대의 컴퓨터에서만 사용할 수 있어야합니다 (또는 최소한이 키를 매우 엄격하게 제어 할 수 있어야합니다).

  3. 라이센스 키는 짧고 전화를 통해 입력하거나 지시 할 수 있어야합니다. 키에 "l"또는 "1"이 포함되어 있는지 이해하지 못하기 때문에 모든 고객이 기술 지원 부서에 전화하는 것을 원하지 않습니다. 지원 부서가 이에 대해 감사 드리며이 분야에서 비용이 절감됩니다.

그렇다면 이러한 과제를 어떻게 해결합니까?

  1. 대답은 간단하지만 기술적으로 까다 롭습니다. 공개 키 암호화를 사용하는 디지털 서명. 라이센스 키에는 실제로 회사의 개인 키로 서명 된 유용한 데이터가 포함 된 "문서"에 서명해야합니다. 서명은 라이센스 키의 일부 여야합니다. 제품은 해당 공개 키로 라이센스 키의 유효성을 검사해야합니다. 이렇게하면 누군가 제품의 논리에 완전히 액세스 할 수 있어도 개인 키가 없기 때문에 라이센스 키를 생성 할 수 없습니다. 라이센스 키는 다음과 같습니다. BASE32 (CONCAT (DATA, PRIVATE_KEY_ENCRYPTED (HASH (DATA)))) 여기서 가장 큰 문제는 기존 공개 키 알고리즘의 서명 크기가 큰 것입니다. RSA512에는 1024 비트 서명이 있습니다. 라이센스 키에 수백 자의 문자를 사용하지 않으려는 경우 가장 강력한 접근 방법 중 하나는 타원 곡선 암호화를 사용하는 것입니다 (기존 특허를 피하기 위해 신중하게 구현). ECC 키는 동일한 강도를 위해 RSA 키보다 6 배 짧습니다. Schnorr 디지털 서명 알고리즘 (2008 년에 만료 된 특허-양호)과 같은 알고리즘을 사용하여 서명 크기를 추가로 줄일 수 있습니다.

  2. 제품 정품 인증을 통해 얻을 수 있습니다 (Windows가 좋은 예입니다). 기본적으로 유효한 라이센스 키가있는 고객의 경우 컴퓨터의 하드웨어 ID를 서명 된 데이터로 포함하는 서명 된 메시지 인 "활성화 데이터"를 생성해야합니다. 이것은 일반적으로 인터넷을 통해 이루어 지지만 ONCE에만 해당됩니다. 제품은 라이센스 키와 컴퓨터 하드웨어 ID를 활성화 서버로 보내고 활성화 서버는 서명 된 메시지를 다시 보냅니다. 전화). 그 순간부터 제품은 시작시 라이센스 키를 확인하지 않지만 정품 확인 데이터를 확인하려면 컴퓨터가 동일해야합니다 (그렇지 않으면 DATA가 다르고 디지털 서명이 확인되지 않음).

  3. 키에서 "1", "l", "0", "o"와 같은 중복 문자를 제거하십시오. 라이센스 키 문자열을 문자 그룹으로 분할하십시오.


8
검사를 완전히 건너 뛰도록 소프트웨어 추가 / 제거 코드를 편집 할 수 없었습니까?
Pacerier

1 번에 대한 답변은 본질적으로 온라인 활성화 / 비활성화 서비스를 필요로합니까?
Dan W

2
이 답변이 다른 성급한 것보다 훨씬 우수하다는 것을 지적하고 싶습니다.
Erik Aronesty

1
@Pacerier 라이센스 키가 소프트웨어 회사를 보호하는 많은 것들이 있습니다. exe 수정은 그중 하나가 아닙니다.
Erik Aronesty

1
아시 메트릭 암호화 개인 / 공개 키를 사용해도 소프트웨어에 제공된 공개 키를 다른 공개 키로 바꾸고 해당 개인 키를 사용하여 가짜 라이센스에 서명함으로써 여전히 가짜 라이센스를 생성 할 수 있습니다. 그렇기 때문에 공개 키를 ID에 바인딩하는 신뢰할 수있는 인증 기관 BTW가 필요합니다. 따라서 이것은 더 많은 후프를 추가 할 수 있지만 자체적으로 # 1을 보장하지는 않습니다.
Saeb Amini

76

간단한 답변-어떤 구성표를 사용하든 크랙 될 수 있습니다.

해커가 해커가 관계없이 해킹 할 수 있으므로 해커를 막기위한 시스템으로 정직한 고객을 처벌하지 마십시오.

이메일이나 이와 유사한 간단한 해시 코드로 충분할 것입니다. 하드웨어 기반 ID는 사람들이 하드웨어를 다시 설치하거나 업데이트해야 할 때 항상 문제가됩니다.

문제에 대한 좋은 실마리 : http://discuss.joelonsoftware.com/default.asp?biz.5.82298.34


2
실제로 제품을 구매하는 사용자를 화나게하고 싶지 않습니다! (m $, 사과 등에주의하십시오.)
Jason

2
MS, Apple 등은 규모가 커서 다른 곳으로는 구하기 어려운 핵심 제품을 제공하거나 사람들을 강요하는 데 사용할 수있는 시장 그림자가 큰 핵심 제품을 제공 할 수 있습니다. 작은 개발자는 할 수 없습니다.
스쿠너

1
펍 / 개인 키 서명 체계는 크랙 소프트웨어 대신 게시자 사이트에서 다운로드 한 서명 된 코드를 실행하려는 사용자에게 새로운 유효한 키를 생성하기 위해 "크랙"될 수 없습니다. 반면 해시 / 대칭 체계는 크래킹되어 유효하지 않은 키와 구별 할 수없는 새로운 유효한 라이센스 키를 생성 할 수 있습니다. 큰 차이.
Erik Aronesty

끊어진 링크 ....
stigzler

56

키를 생성 할 때 버전과 빌드 번호를 해시를 계산하는 문자열에 연결하는 것을 잊지 마십시오. 그런 식으로 당신이 풀어 놓은 모든 것을 잠금 해제하는 단일 키가 없습니다.

astalavista.box.sk에 떠 다니는 키나 패치를 찾은 후에 는 누군가가 크래킹하기에 충분히 인기있는 것을 만드는 데 성공했다는 것을 알게 될 것입니다. 가지고 있다!


8
"해시를 계산하는 문자열에 버전과 빌드 번호를 연결하는 것을 잊지 마십시오."-사용자가 마이너 패치 릴리스로 업데이트 할 때 키가 깨지지 않습니까?
thomthom

1
@thomthom 그렇다면 최대 버전을 키에 연결하는 것은 어떻습니까? 버전 아이디어 자체는 그럴듯 더 보안을 추가
마빈 Thobejane

@MarvinThobejane은 max ver을 연결하기 위해 허용되는 max ver에 서명하고 코드가 버전을 약간 반복하도록 할 수 있습니다. 그러나 sigs에서는> = ops가 허용되지 않습니다.
Erik Aronesty

22

이미 언급 된 것 외에 ...

중간 언어 문제로 인해 .NET 응용 프로그램을 사용하는 것은 본질적으로 깨지기 쉽습니다. .NET 코드를 간단히 분해하면 누구나 제품을 열 수 있습니다. 이 시점에서 라이센스 코드를 쉽게 우회 할 수 있습니다.

더 이상 키를 만들기 위해 하드웨어 값을 사용할 수도 없습니다. 가상 머신은 이제 누군가가 '라이센스가 부여 된'머신의 이미지를 생성하고 원하는 플랫폼에서 실행할 수있게합니다.

비싼 소프트웨어라면 다른 솔루션이 있습니다. 그렇지 않다면, 캐주얼 해커에게 충분히 어렵게 만드십시오. 그리고 라이센스가없는 사본이 결국에는 있다는 사실을 받아들입니다.

제품이 복잡하면 본질적인 지원 문제가 보호 기능을 제공합니다.


9
가상 머신으로 인한 하드웨어 값의 약점을 방지하기 위해 +1.
Rubens Mariuzzo

3
이것이 바로 PE 서명을위한 .NET 및 Authenticode의 강력한 이름입니다. 누군가 라이브러리를 디 컴파일, 수정 및 재 구축 한 경우 서명되지 않으며 응용 프로그램이 실행되지 않습니다. .NET 가상 머신은 허용하지 않습니다.
Stephen Tunney

2
서명은 실행할 프로그램의 출처를 확인하기위한 것입니다. 사용자가 원점을 수정하고 깨뜨린 것을 알고 있기 때문에 원점에 신경 쓰지 않으면 크래커는 서명을 제거하거나 자신의 서명으로 서명합니다. 서명하면 신뢰할 수있는 어셈블리와 신뢰할 수없는 어셈블리의 혼합이 중지됩니다.
jesusduarte

모바일 앱은 고가의 소프트웨어에 대해 배심원이 장착 한 하드웨어 동글로 사용될 수 있습니다. ... 앱을 사용하여 지불하고 앱의 보안 요소에 서명 키를 포함시킵니다. 그런 다음 데스크톱 + 앱을 사용하여 활성화하고 다른 데스크톱을 비활성화 할 수 있습니다. 앱 및 / 또는 온라인 동형 계산 서비스에서 일부 중요한 섹션 코드 영역을 배치하면 사소한 디 컴파일을 방지 할 수 있습니다.
Erik Aronesty

12

라이센스 키 생성에 사용하는 C # /. NET 엔진은 이제 오픈 소스로 유지 관리됩니다.

https://github.com/appsoftware/.NET-Licence-Key-Generator .

키를 생성하는 데 사용하는 키의 하위 집합 만 배포 가능 파일로 컴파일해야한다는 "부분 키 확인"시스템을 기반으로합니다. 자체적으로 키를 생성하므로 라이센스 구현이 소프트웨어에 고유합니다.

위에서 언급했듯이 코드를 디 컴파일 할 수 있으면 대부분의 라이센싱 시스템을 우회하는 것이 상대적으로 쉽습니다.


이 제품을 사용하기위한 자습서를 기꺼이 하시겠습니까? 나는 그들의 위키가 약간 부족하다는 것을 알았습니다.
Anthony Ruffino

도움이된다면 GitHub에서 프로젝트가 오픈 소스되었습니다 (링크로 편집 된 답변).
gb2d

10

저는 Cryptolens 소프트웨어 라이센싱 플랫폼 의 개발자 중 한 명이며 14 세 이후 라이센싱 시스템에서 일해 왔습니다.

이를 해결하는 가장 좋은 방법은 라이센스 키를 확인하기 위해 애플리케이션의 각 인스턴스가 호출 할 라이센스 키 서버를 설정하는 것입니다.

라이센스 키 서버의 장점

라이센스 키 서버의 장점은 다음과 같습니다.

  1. 라이센스 키를 항상 즉시 업데이트하거나 차단할 수 있습니다.
  2. 각 라이센스 키는 특정 수의 컴퓨터에 고정 될 수 있습니다 (이는 사용자가 다른 사용자가 사용할 수 있도록 라이센스 키를 온라인으로 게시하지 못하게합니다).

고려 사항

온라인으로 라이센스를 확인하면 응용 프로그램의 각 인스턴스를보다 강력하게 제어 할 수 있지만 인터넷 연결이 항상 존재하는 것은 아니며 (특히 대기업을 대상으로하는 경우) 라이센스 키 확인을 수행하는 다른 방법이 필요합니다.

해결책은 항상 RSA 또는 ECC와 같은 공개 키 암호화 시스템을 사용하여 서버에서 라이센스 키 응답에 서명하는 것입니다 (내장 시스템에서 실행하려는 경우 더 좋을 수 있음). 애플리케이션 에는 라이센스 키 응답을 확인할 수있는 공개 키만 있어야합니다 .

따라서 인터넷에 연결되어 있지 않으면 이전 라이센스 키 응답을 대신 사용할 수 있습니다. 응답에 날짜컴퓨터 식별자 를 모두 저장 하고 너무 오래되지 않았는지 (예 : 사용자가 최대 30 일 동안 오프라인 상태가되도록 허용) 라이센스 키 응답이 올바른 장치에 속하는지 확인하십시오.

참고 이 여전히 수행해야합니다 (인터넷에 연결되어있는 경우에도 당신은 항상 서버를 왼쪽 이후 변경되지 않았는지 확인하기 위해), 라이센스 키 응답의 인증서를 확인해야합니다 경우에도 귀하의 API 라이센스 키 서버는 https를 사용합니다)

비밀 알고리즘 보호

대부분의 .NET 응용 프로그램은 매우 쉽게 리버스 엔지니어링 될 수 있습니다 (IL 코드를 얻기 위해 Microsoft에서 제공하는 디 어셈블러가 있으며 일부 상용 제품은 소스 코드 (예 : C #)를 검색 할 수도 있음). 물론 코드를 항상 난독 처리 할 수 ​​있지만 100 % 안전하지는 않습니다.

대부분의 경우, 모든 소프트웨어 라이센싱 솔루션의 목적은 정직한 사람들이 정직하도록 도와주는 것입니다 (즉, 지불하고자하는 정직한 사용자는 평가판이 만료 된 후에 지불하는 것을 잊지 마십시오).

그러나 여전히 대중에게 유출하고 싶지 않은 코드 (예 : 주가 예측 알고리즘 등)가있을 수 있습니다. 이 경우 갈 수있는 유일한 방법 은 메소드를 실행할 때마다 애플리케이션이 호출 할 API 엔드 포인트 를 작성하는 것입니다. 인터넷 연결이 필요하지만 클라이언트 시스템에서 비밀 코드를 실행하지 않도록합니다.

이행

당신이 모든 것을 직접 구현하지 않으려면, 내가 한 번 봐 걸릴 추천 이 튜토리얼을 (의 일부 Cryptolens )


저장된 라이센스 키가 너무 오래되지 않도록 제한하는 것에 대한 한 가지 질문 : PC가 인터넷에 연결되어 있지 않을 수 있으므로 날짜와 시간을 항상 동일한 유효한 날짜로 유지하도록 다시 변경할 수 있습니까?
Amir Mahdi Nassiri

사용자가 Windows에서 루프백 호스트를 정의하여 온라인 라이센스 서버를 우회 할 수 없습니까? 나는 많은 응용 프로그램이 그렇게 해적되는 것을 보았습니다. Resharper와 Matlab은 내가 기억할 수있는 응용 프로그램입니다.
Amir Mahdi Nassiri

1
@AmirMahdiNassiri 질문 1 : PC가 영구적으로 오프라인 상태 인 경우 실시간 클록 (RTC) 동글을 시간의 신뢰할 수있는 소스로 사용할 수 있습니다. 질문 2 : 응답은 공급 업체의 개인 키로 서명되고 응용 프로그램 내에서 공개 키로 확인되므로 적법한 사람은 개인 키를 몰라도 파일을 다시 서명해야합니다. 2048bit RSA 키로는 불가능합니다.
Artem

7

나는 과거에 Crypkey 를 사용 했습니다 . 사용 가능한 많은 것 중 하나입니다.

라이센스 체계가있는 시점까지만 소프트웨어를 보호 할 수 있습니다.


6

나는 당신이 얼마나 정교하고 싶어하는지 모르겠다

하지만 .net이 하드 드라이브 일련 번호에 액세스 할 수 있다고 생각합니다.

당신은 프로그램이 당신에게 그와 다른 것들을 보낼 수 있습니다 (사용자 이름과 nic의 mac 주소)

이를 기반으로 코드를 계산하고 키를 이메일로 보냅니다.

그들은 열쇠를 가진 후에 기계를 전환하지 못하게 할 것입니다.


4
그리고 죽은 다른 HD를 대체하지 못하게하여 좌절을 초래합니다. 불행히도 쉬운 해답은 없습니다. 기본 라이센싱 메커니즘과 신뢰의 균형을 맞춰야합니다.
스쿠너

HD에서 일련 번호를 사용하는 제품을 가진 소프트웨어 엔지니어로 수년 동안 근무했지만 업데이트 방법을 알고있는 사람들에게는 완전히 안전하지 않았습니다.
oden

나는이 숫자를 다른 것들 (mac address, FQDN)과 함께 사용하여 해시에 던질 수 있음을 암시했습니다. 요점은 소프트웨어를 처음부터 역 엔지니어링하고 항상 선택 사항 인 확인 becuase를 제거하는 것보다이 모든 데이터를 스푸핑하는 것을 좀 더 어렵게 만드는 것입니다.
Crash893

4

요청한 모든 작업을 수행 할 수있는 유일한 방법은 인터넷 액세스 및 서버 확인이 필요합니다. 응용 프로그램은 키를 사용하여 서버에 로그인 한 다음 IP 주소와 같은 세션 세부 정보를 저장해야합니다. 이렇게하면 여러 다른 컴퓨터에서 키를 사용할 수 없습니다. 이것은 일반적으로 응용 프로그램 사용자에게 인기가 없으며 매우 비싸고 복잡한 응용 프로그램이 아니라면 가치가 없습니다.

응용 프로그램에 대한 라이센스 키를 보유한 다음 클라이언트 측에서 키가 양호한 지 확인할 수 있지만이 키를 다른 사용자에게 쉽게 배포 할 수 있으며 디 컴파일러를 사용하여 새 키를 생성 할 수 있습니다.


5
인터넷 기반 라이센스 체계를 사용하는 회사에서 근무했습니다. 프로그램이 온라인으로 검증을 시작하기 시작할 때마다 회사는 불법 복제로 인해 잃어버린 것보다 라이센스 솔루션에 인프라 및 개발자에 더 많은 비용을 썼다고 생각합니다 (틈새 제품).
Jason

3
또한 기술 지원 비용도 엄청났습니다. 사용자가 다른 컴퓨터를 합법적으로 사용하여 소프트웨어를 실행하려고 시도하는 경우가 많지만 해시는 달랐기 때문에 엄청난 양의 기술 지원이 필요했습니다. 간단히 말해서, 스쿠너가 말한 것-정직한 사용자를 처벌하지 마십시오.
Jason

1
매번 스타트 업에 대한 유효성 검사를 요구함으로써 귀사는 약간 열심 인 것 같습니다.
jugg1es

@Jason, 글쎄, 그들은 제품의 가격을 올린다.
Pacerier

1
@Pacerier : 오답입니다.
궤도에서 가벼움 경주

4

서버의 데이터베이스에 저장된 라이센스를 나타내는 라이센스 키가 필요한 회사 소프트웨어 (C # .net)에서 인터넷 기반 일회성 활성화를 구현했습니다. 소프트웨어는 키를 사용하여 서버에 도달 한 후 클라이언트 컴퓨터에서 일부 변수 (CPUID 및 자주 변경되지 않는 다른 항목의 조합)에서 생성 된 RSA 키를 사용하여 로컬로 암호화 된 라이센스 정보를 제공 받아 저장합니다. 레지스트리

서버 측 코딩이 필요하지만 실제로 잘 작동했으며 브라우저 기반 소프트웨어로 확장했을 때 동일한 시스템을 사용할 수있었습니다. 또한 영업 사원에게 소프트웨어를 사용하는 사람, 장소 및 시간에 대한 훌륭한 정보를 제공합니다. 로컬로만 처리되는 모든 라이센싱 시스템은 특히 .NET에 반영되어 악용 될 수 있습니다. 그러나 다른 사람들이 말했듯이 시스템은 전적으로 안전하지 않습니다.

제 생각에는 웹 기반 라이센스를 사용하지 않는다면 소프트웨어를 전혀 보호 할 필요가 없습니다. DRM으로 인해 발생할 수있는 두통 때문에 실제로 비용을 지불 한 사용자에게는 불공평합니다.


1
그러나 웹 라이센싱의 주요 문제점은 라이센싱 서비스가 DDoS 공격의 주요 대상이된다는 것입니다. 서비스를 마비 시키거나 클라우드 비용을 증가시킵니다.
afk5min

4
그것은 웹 사이트가 DDoS 공격에 취약하기 때문에 아무 소용이 없다고 말하는 것과 같습니다 ...
jugg1es

@ jugg1es 그의 의견에서 그는 아무 말도하지 않았다. 그는 단순히 고려해야 할 취약점이라는 사실을 지적했습니다.
Dan Bechard

그리고 검사는 여전히 클라이언트에서 제거 될 수 있습니다. 어떤 검사도없고, 웹 기반 라이선스 ...
azarai

1
"필수 정보"가있는 실제 응용 프로그램 코드를 의미합니까? 앱을 실행하는 데 필요한 코드? 그렇지 않으면 여전히 isLicensed 검사 메소드를 ones 코드로 호출 할 것이라고 생각합니다.
azarai

4

라이센스 생성에 필요한 필수 정보를 소스 코드에 포함 할 필요가 없기 때문에 공개 키 암호화 기반 라이센스 시스템 만 올바른 접근 방식이라고 생각합니다.

과거에는 Treek의 Licensing Library를 여러 번 사용 했습니다.이 요구 사항을 충족하고 정말 좋은 가격을 제공하기 때문입니다. 최종 사용자와 그 자체에 대해 동일한 라이센스 보호 기능을 사용하며 지금까지 아무도이를 해독하지 못했습니다. 불법 복제 및 크래킹을 피하기 위해 웹 사이트에서 유용한 팁을 찾을 수도 있습니다.


온라인 키 서비스를 사용하려면 공개 키 암호화가 필요합니까? 소스 코드에없는 경우 (실행 파일도 의미한다고 가정) 다른 곳은 어디입니까?
Dan W

아니요, 온라인 활성화 서비스를 사용할 필요가 없습니다. 라이센스 파일을 완전히 오프라인으로 생성 할 수 있습니다.
panpernicek

열쇠는 실제로 라이센스 키에는 사용할 수없는 코드에 공개 키만 배치한다는 것입니다. 검증 용으로 만 사용하십시오.
panpernicek 2016

3

언급 한 몇 가지 다른처럼, 나는 거대한 해요 상대 라이센스 산업은 악명 것을 기본 무언가에 의해 고객에게 적대적되는. 따라서 귀하의 문제에 대한 좋은 솔루션을 확장 하여 좋은 고객 UX를 제공 할 것 입니다.

우선, 추가 기능을 위해 고객을 "업그레이드"로 전환하는 데 사용하는 "제한된"버전의 소프트웨어가 있다고 언급했습니다. 따라서 찾고있는 것은 제품의 기능 라이센스 입니다. 예를 들어 고객은 feature-X 또는 feature-Y 라이센스를 구입할 수 있습니다 .

이러한 유형의 라이센스를 염두에두고 Keygen 을 구축했습니다 . Keygen은 사용자 계정, 라이센스를 관리하고 컴퓨터 사용 / 연결을 추적 할 수있는 라이센스 REST API입니다.

내가 할 일은 2 가지 라이센스 유형 ( Keygen 내의 정책 )을 설정하는 것입니다. 하나는 무료 버전에 대한 기본 정책이고 다른 하나는 유료 버전에 대한 정책입니다.

결제에 무엇을 사용하고 있는지 잘 모르겠지만 webhook 을 제공하는 Stripe (현재는 표준)와 같은 것을 사용한다고 가정 해 봅시다 . Keygen에는 webhook도 있습니다 (사용 여부에 관계없이이 모든 것이 여전히 적용 가능함). Keygen을 통합하여 양쪽에서 웹 후크를 사용하여 지불 제공 업체와 대화 할 수 있습니다 (생각 : customer.created-> 고객을위한 기본 라이센스 생성, license.created-> 고객에게 새로운 라이센스를 청구).

따라서 웹 후크를 활용하여 신규 고객을위한 라이센스 생성을 자동화 할 수 있습니다. 그렇다면 애플리케이션 자체의 라이센스 유효성 검사는 어떻습니까? 이는 다양한 방법으로 수행 할 수 있지만 가장 보편적 인 방법은 고객이 입력 필드에 긴 라이센스 키를 입력하여 검증 할 수 있도록하는 것입니다. 이것이 응용 프로그램에서 라이센스 유효성 검사를 처리 하는 끔찍한 방법 이라고 생각 합니다.

왜 그렇게 생각합니까? 우선, 고객은 기계 소비를위한 엄청나게 긴 라이센스 키를 입력 해야 하고, 둘째, 귀하와 고객이 엄청나게 긴 라이센스 키를 추적하도록 요구해야합니다 .

좋아, 대안은 무엇입니까? 최선의 대안은 모든 고객이 익숙한 작업을 수행하는 것입니다. 고객이 이메일 / 비밀번호를 사용하여 제품 계정을 만들 수 있도록 허용합니다 . 그런 다음 모든 라이센스 와 해당 시스템 을 해당 계정에 연결할 수 있습니다 . 이제 라이센스 키를 입력하는 대신 자격 증명을 사용하여 간단히 로그인 할 수 있습니다.

그것이 당신에게 어떤 이점을 제공합니까? 첫째, 라이센스 키를 추적해야 할 필요성이 사라졌습니다. 라이센스 키 는 모두 사용자 계정 내부에서 뒤에서 처리 되며 가장 중요하게 는 고객에게 셀프 서비스 라이센스 및 시스템을 제공 할 수 있기 때문입니다. 활성화! 즉, 모든 라이센스와 컴퓨터가 사용자 계정과 연결되어 있기 때문에 인식되지 않는 컴퓨터에서 응용 프로그램을 실행할 때 라이센스를 구매하라는 메시지를 표시 할 수 있습니다.

이제 라이센스 유효성 검사 : 고객이 이메일 / 비밀번호로 애플리케이션에 로그인 할 때마다 고객이 자신의 라이센스에 대해 사용자 계정을 쿼리하여 feature-X 또는 feature-Y를 사용할 수 있는지 여부를 결정할 수 있습니다 . 이제 응용 프로그램이 셀프 서비스 이기 때문에 고객이 응용 프로그램 내에서 직접 추가 기능을 구입할 수 있습니다!

우리가 도입했습니다 그래서 t 우리의 라이센스 시스템에 자동화를, 우리는 각각의 라이센스 수있는 기능 (풀 버전 대 제한 즉), 우리는 제공 한 멋진 우리의 고객을위한 UX를 우리는 또한 가장 큰 이유 중 하나 완화했습니다 지원 요청 : 라이센스 키 복구.

어쨌든, 이것은 길었지만 희망적으로 누군가를 돕습니다!


엔터프라이즈 개발 상황에서 DLL이 이와 같이 라이센스가 있다고 상상할 수 없습니다. 예를 들어 자동화 된 구축 및 구축 시나리오를 생각해보십시오. 또는 단순히 개발자 시스템을 설정하는 데 필요한 많은 단계에이 단계를 추가하기 만하면됩니다. 나에게있어 라이센스 키는 개별 기계를 기반으로하지 않고 사전에 발급되어야합니다.
DvS

2

소프트웨어 불법 복제를 완전히 막을 수는 없습니다. 불법 복제를 방지 할 수 있으며 이것이 모든 라이센싱 솔루션의 기능입니다.

라이센스 키 재사용을 방지하려면 노드 (시스템) 잠금 라이센스가 가장 좋습니다. 저는 현재 약 1 년 동안 내 소프트웨어에 Cryptlex 를 사용 하고 있습니다. 그것은이 무료로 계획을 당신이 무료로 사용할 수 있습니다 너무 많은 고객을 기대하지 않는다, 그래서 만약,도.


2

무료 타사 솔루션을 사용하여 Quantum-Key.Net과 같이이를 처리 할 수 ​​있습니다. 무료이며 웹을 통해 생성되는 웹 판매 페이지를 통해 페이팔을 통해 지불을 처리하고, 이메일을 통해 키를 발행하고 특정 컴퓨터에 대한 키 사용을 잠급니다. 불법 복제 방지

또한 코드를 난독 처리 / 암호화해야하며 De4dot 및 .NetReflector와 같은 소프트웨어를 사용하여 쉽게 리버스 엔지니어링 할 수 있습니다. 좋은 무료 코드 난독 화기는 ConfuserEx로 빠르고 사용하기 쉽고 값 비싼 대안보다 효과적입니다.

완성 된 소프트웨어를 De4Dot 및 .NetReflector를 통해 실행하여 소프트웨어를 리버스 엔지니어링하고 크래커가 동일한 작업을 수행했는지 확인하고 중요한 코드가 노출되거나 위장되지 않은 상태로 두지 않도록해야합니다.

소프트웨어는 여전히 크랙킹이 가능하지만 일반적인 크래커의 경우 소프트웨어를 해제하기에 충분할 수 있으며 이러한 간단한 단계는 코드 추출 및 재사용을 방해합니다.

https://quantum-key.net

ConfuserEx를 사용하는 방법?

https://github.com/0xd4d/de4dot

https://www.red-gate.com/dynamic/products/dotnet-development/reflector/download

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.