2010-08-01 2 views
6

사용자가 라이센스를 구입하여 활성화해야하는 소프트웨어 응용 프로그램을 작성하고 있습니다. 코드 생성 및 코드 검사를위한 강력한 알고리즘을 작성하는 방법을 시작하는 방법에 대한 제안이 필요합니다. 나는 사람들이 코드를 엔지니어와 Keygen은을 반전시킬 수 있다는 것을 알고 있지만, 내 질문은 두 부분입니다 : 일반적으로활성화 키 알고리즘 - 보안

  1. 에 관계없이 내가 동의하는 알고리즘을 쓰기 시작하는 방법이 방법으로 금이되는 응용 프로그램의 특정 직렬 또는 문자열 또는 그 조합. (예 : 올바른 것인가? 예 : 첫 번째 숫자는 3-9이고 두 번째 숫자는 첫 번째 - 3이고 세 번째 숫자는 두 번째 * + .... 무엇이든간에 ...?)

  2. 인터넷을 사용하지 않고도 불법 복제로부터 데스크톱 애플리케이션을 보호하기위한 최선의 방법은 무엇입니까? 알고리즘 (리버스 엔지니어링을 더 어렵게 만듭니다), 어플 리케이션을 설치 한 후에 소스 코드를 볼 수 없도록 보호합니까 ?? ... ??

추신 : 아마도 자바를 개발 언어로 사용하고 있습니다. 당신이 public-key cryptography 접근 방식에서 혜택을 누릴 수처럼 감사

답변

2
  1. 는 소리가 난다. 그것은 당신에게 문제에 대한 몇 가지 폭을 줄 수도

    • A. 당신이 this thread here on SO?을 읽게
    • 는 두 개의 하위 포인트로 나눌 수 있습니다.
    • B. @Jaka가 말했듯이, Java 바이트 코드에서 사람이 읽을 수있는 코드를 생성하는 것은 큰 도전이 아닙니다. 사람이 코드에서 사람이 읽을 수있는 코드를 생성하기가 더 어려워 지도록 an obfuscator을 통해 코드를 실행할 수 있지만, 누군가 코드를 읽고 싶다면 거의 항상 길을 찾을 수 있습니다. 이 문제를 해결하는 가장 좋은 방법은 연결된 SO 스레드에서 조언을받는 것입니다. 앱을 누군가가 훔치는 것보다 앱을 더 쉽게 구매할 수있게 만드는 것입니다.

+0

컴파일되었습니다. 자바 데스크톱 응용 프로그램. –

+0

@Saher, 내 대답이 업데이트되었습니다. – labratmatt

+0

일련 번호 생성을위한 공개 키 암호화 문제는 사용자가 입력하기 어려운 긴 코드를 생성한다는 것입니다. base32로 인코딩하면 1024 비트 키가 약 200 자 길이의 코드를 생성합니다. 그것은 1 (1)과 l (소문자 L)을 착각하는 것과 같은 인간의 인식 문제조차도 설명하지 않습니다. –

0

제안을 (후 그는 자바를 사용하고 진술 편집) : 라이센스 전용 기능을 제공하는 응용 프로그램의 일부를 암호화합니다. 사용자는 코드 부분을 사용하기 위해 구매시 제공 한 키가 필요합니다.

구매하기 전에 보호하려는 코드를 사용자가 실행할 수있게하면 상당한 보안 오프라인 솔루션이 제공되지 않습니다. 기껏해야 캐주얼 불법 복제를 막을 수 있습니다.

1

라이센스 키의 경우 공개 - 개인 키와 함께 암호화를 사용할 수 있습니다. 이 방법으로 개인 키를 소프트웨어에 포함시키고 소프트웨어에 어떤 것을 의미하는 문자열을 암호화 할 수 있습니다 (소프트웨어의 어떤 기능에 라이센스가 부여되었는지 등). 또는 대중을 퍼 뜨리고 소프트웨어에 특별한 의미의 문자열을 부여하고 개인 키로 서명 할 수 있습니다. 그런 다음 소프트웨어는 서명이 유효한지 확인할 수 있습니다.

편집 : labratmatt는이 크래커가 검사하는 방법이다 (소프트웨어가 분해하기 어려운 디버깅하고 처리 할 필요가 빨리 공개 - 개인 키 답 : 귀하의 보호

분명히 두 번째 부분이었다 소프트웨어를 사용하고 패치로 보호를 우회하려고하거나 그들이 어떻게 열쇠를 만들 수 있는지 알아 내려고 시도합니다). 이 부분은 실제로 훨씬 더 어렵고 전체 실행 파일의 암호화와 같은 기술을 포함하며 런타임에이를 해독하는 로더 안에 래핑합니다. 로더는 다양한 기술을 사용하여 디버거의 존재를 감지 할 수도 있습니다.

편집 : 응용 프로그램이 JAVA로 작성되었으므로 JAVA가 쉽게 사람이 읽을 수있는 형식으로 쉽게 디 컴파일 될 수 있으므로이 암호화 및 포장 단계가 더욱 중요합니다. 디 컴파일러가 읽을 수있는 코드를 생성 할 수 없도록 클래스를 둘러싼 "obfuscator"프로그램이 있지만 크래킹은 여전히 ​​머신 코드로 컴파일 된 것보다 훨씬 쉽습니다.

보호 기능을 개발하는 데 시간을 낭비하지 않으려면 상용 보호 소프트웨어를 사용할 수도 있습니다. 이 선택에 꽤 많이 있습니다 그리고 그들은 많은 보호 체계 (동글 시간을 기준으로 라이선스, ...) 상용 소프트웨어의

로트의 FLEXnet, HASP, WIBU 키

0

당신과 같은 패키지를 사용하여 제공 하나의 키를 서로 다른 두 대의 컴퓨터에서 사용할 수없는 방식으로이 작업을 수행해야합니다. 회사가 하나의 키를 구입하여이를 여러 설치에 사용하는 것을 막기 위해서입니다.

+0

나는 그것을 고려할 것입니다. –

0

나만의 JRE를 작성하셨습니까? 네트워크 연결, 방화벽, 프록시 서버 등이없는 사용자 시나리오의 범위를 원활하게 처리하고 현장에서 철저히 테스트 된 안전하고 유능한 정품 인증 시스템을 구축하면 상당한 도메인 전문 지식과 시간이 필요합니다.

이러한 시스템의 공급 업체로서 우리는 자신의 이익을 선언 할 수 있지만 데이터도 보유하고 있습니다. 라이센스 시스템을 구축 할 수 있다고 말하는 개발자를 신뢰하는 많은 회사가 있습니다. 그들이 필요로하는 것을 결코하지 못했기 때문에 우리에게 돌아와라. (내)이 문서에서는 문제에 확장 : http://knol.google.com/k/dominic-haigh/issues-to-consider-before-building-your/2zijsseqiutxo/6#

0
당신이 소프트웨어에 매우 강력한 잠금을 넣어 않았더라도

https://superuser.com/questions/14224/how-to-explain-drm-cannot-work/14254#14254

을, 해적은 여전히 ​​균열 수있는 방법을 찾아 토런트 사이트에 올려 놓는 것 . (사례 : 포자)

당신은 DRM에 대해 이야기하고 있습니다. 소프트웨어를 도용하는 데 해적판을 잠그는 쉬운 방법은 없습니다. 또한 소프트웨어가하는 일을 할 수있는 무료 제품과 경쟁하고 있으므로 (항상 그렇습니다) 소프트웨어를 설치하고 사용하기가 더 쉬워지고 설치 및 사용이 의도 한 것보다 많이 이루어지지 않도록해야합니다.

관련 문제