2009-12-14 3 views
3

Microsoft의 LicenseProvider를 사용하여 견고한 라이선스 구성표를 찾으려고합니다. 내 생각은 RSA (2048bit 키를 가진 RSACryptoServiceProvider) 방식으로 비동기 암호화를 사용하는 것이다. 이 방법은 매우 간단하지만이 메커니즘이 실제로 얼마나 안전하지 않은지 확신 할 수 없습니다. 이것은 재미있는 것이 아니며 미국에서 수많은 제품 (100 개 설치)을 복사 방지해야합니다. 만료일은 필요하지 않습니다.제품 라이선스를 보호하기 위해 RSA 암호화를 사용하는 .NET의 LicenseProvider

이제 개인 키를 사용하여 라이센스 파일 (.lic)을 암호화합니다. 고객의 컴퓨터에서 라이센스 관리자는 런타임시 .lic 파일에 저장된 고유 ID와 비교하여 컴퓨터의 고유 ID를 확인합니다. 제품에는 해당 공개 키가 있으므로 파일을 해독 할 수 있습니다. ID가 일치하면 라이센스가 유효하고 프로그램이 시작됩니다.

(BTW 컴퓨터 ID가의 조합이다. MAC 주소 + CPU의 시리얼 + 하드 드라이브 일련 그 변화 중 하나 그래서 만약, 라이센스가 갱신 될 필요가 줘야)

그것은 그렇게 간단입니까? 내가 본 것처럼, .lic 파일을 해독 할 수 있더라도 개인 키가 필요 없기 때문에 .lic 파일을 다시 암호화 할 수 없습니다.

값 비싼 타사 솔루션을 구입하고 라이센스 DLL을 우회하여 RSA + computerID 사용에 대한 아이디어를 얼마나 안전하게 찾을 수 있습니까?

피드백에 대한

감사합니다 (예, 우리는이 더 잘 만들기 위해 코드를 난독 조사 중)!

+0

여기에 잘못되었을 수 있습니다. 개인 키를 사용하여 암호화하는 것을 언급합니다. 사용자와 공유 할 수있는 공개 키를 사용하여 데이터를 암호화한다고 생각합니다. 자신에게 알려진 개인 키로 만 데이터의 암호를 해독합니다. 공개 키가있는 사용자는 데이터를 해독 할 수 없습니다. 개인 키를 사용하여 서명 한 다음 다른 사람이 공용 키만 사용했는지 확인할 수 있다고 생각합니다. –

답변

1

나는 같은 종류의 해결책을 가지고있다. 그러나 코드를 obsfuscating하면 revesere 엔지니어링과 해킹을 막을 수 없다는 점을 지적하기 만하면 revese로 조작 된 코드를 이해하는 작업이 훨씬 어려워집니다. Obsfuscating은 코드를 리버스 엔지니어링하여 보안 방법을 찾고 성공한 결과를 반환하기가 쉽기 때문에 Obsfuscating은이 프로세스에서 중요한 단계입니다. (즉, 암호화 키를 해독하려고 몇 개월을 들일 필요가 없습니다. 해커는 그냥 무시할 것이다).

0

[provider] .SignData ([params])를 사용하여 데이터에 서명하고 [Provider] .VerifyData ([params])를 사용하여 데이터를 서명해야합니다. . 또한 생성 한 키 쌍에서 개인 키를 제거하는 것을 잊지 마십시오.

3

코드를 흐리게 처리하는지 여부에 관계없이 요점은 기술이 안전하지 않으며 패배 할 수 있다는 것입니다. 제품의 라이센스 체계는 난독 화만큼 안전합니다.

RSA를 사용하여 고유 한 ID 또는 라이센스 파일을 암호화하는 대신 RSA를 사용하여 모듈, 어셈블리 또는 클래스 라이브러리를 필수 핵심 구성 요소로 암호화하거나 구입 한 정식 버전에서만 사용할 수있는 특정 키 기능을 고려하십시오. 이런 방식으로 적절한 라이센스가 없으면 정식 버전의 "라이센스가 부여 된"소프트웨어의 진입 점에 대한 JMP 명령으로 도난당하는 것이 아니라 전체 버전 기능 또는 애플리케이션의 핵심 논리가 단순히 존재하지 않습니다.

기본적으로이 개념의 가장 기본적인 구현은 구매 후받은 '라이센스'를 만들고 암호화 된 모듈/어셈블리를 해독하기 위해 공개 키를 프로그램에 붙여 넣어야합니다. 그러나 한 사람이 '라이센스'를 구입 한 다음 모든 사람에게 부여하거나 블로그에 게시 할 수 있으므로이 작업을 원하지 않을 것입니다. 최소한 전체 버전 기능을 해독하는 키는 다른 키를 사용하여 암호화되고 모든 소프트웨어 사본에 포함되어야합니다.그러면 '라이센스'는 보호 된 소프트웨어의 암호 해독을 수행하는 실제 키를 해독하는 공개 키가됩니다. 이 방법을 사용하면 여러 버전의 라이센스를 보유하거나 모든 유명 시리얼 웹 사이트에 게시 된 라이센스를 변경할 수 있습니다.

라이센스를 암호화하는 '라이센스'는 단순히 해시되거나 컴퓨터의 고유 ID로 대칭 암호화되며, 지불 처리 중에 서버에 제공됩니다. 이렇게하면 해당 컴퓨터 만 적절한 '암호 구문'을 생성 할 수 있습니다. 암호화 된 키를 복구하면 프로그램/dll/whateverave의 암호를 해독 할 수 있습니다.

다른 응용 프로그램에서 읽을 수없고 디스크로 페이징되지 않은 메모리 공간으로 모듈을 해독 한 다음 메모리에서 실행되어 완료되면 바로 덮어 씁니다. 물론이 기술은 오류가 없으며 확실한 리버스 엔지니어가 잠재적으로 재분배를 위해 암호 해독 모듈을 얻을 수 있지만 그 경우에도 누군가가 온라인 어딘가에서 합법적 라이센스를 구매해야합니다.

다른 아이디어로는 핵심 기능 또는 핵심 데이터 구조를 컴파일 된 기계 언어 또는 중간 언어로 저장하고 암호화하고 서버에서 어딘가에 실행해야 할 때마다 서버에서 해당 정보를 검색하기 위해 유효성 검사를 통과해야합니다 , 그리고 그것은 실행되는 보호 메모리로 직접 암호 해독되지만, 그러한 수준의 정교함은 거의 필요하지 않으며 복잡성 수준에 대한 많은 추가 보안을 제공하지 않습니다.

나는 당신에게 생각할 몇 가지 점을 알려주기를 바랍니다. 모든 사항이 해독되고 사용자가 복사 할 수있는 경우 사용자가 만드는 사본 수를 제어 할 수 없으므로 ID가 응용 프로그램이 실행되지 않을 때 암호화 된 일부 구성 요소를 유지하는 것이 좋습니다.

+0

이것은 매우 흥미로운 것으로 들립니다. 코드의 일부를 암호화하고 런타임에 해독하는 방법에 대한 샘플 코드를 게시 해주십시오. – sharkyenergy

관련 문제