개인이 단일 장치에서 여러 번 무료 평가판을 사용할 수있는 가능성없이 각 장치에 한 번의 무료 평가판을 제공하는 서비스를 제공 할 수 있습니까? 불가능할 경우 여러 번의 무료 평가판을 얻는 것이 어렵게 만드는 방법을 알고 계십니까?장치마다 하나의 평가판을 사용할 수 있습니까?
답변
장치의 고유 ID, 요청 날짜 및 개인 키를 기반으로 라이센스 키를 생성하여 특정 날짜까지만 유효한 라이센스를 만들 수 있습니다.
응용 프로그램은 라이센스 키를 공개 키로 디코딩하고 만료 날짜와 장치 ID를 비교하여 라이센스 키가 유효한지 확인합니다. 라이센스 키는 지정된 날짜와 주어진 장치 ID에만 유효하기 때문에 사람들은 위조 요청을 위조 할 수 없습니다.
(힌트 : 공개 키 암호화에 대해 읽어는)
그러나, 그것은 완전히 고장이 아닙니다. 정말로 결정된 공격자는 자신의 장치를 루트 할 수 있으며 "getDeviceId()"에 의해 리턴 된 식별자를 제어 할 수있는 사용자 정의 펌웨어를 설치할 수 있습니다. 이것은 대부분의 사람들이 기꺼이할만한 것이 아니며 대부분의 사람들은 대안적인 무료 앱을 찾거나 해당 경로를 거치지 않고 앱을 구매할 것입니다. 그런 결정과 기술을 가진 크래커들에 대해서는 당신이 할 수있는 일이별로 없습니다.
공격의 다른 방법은 응용 프로그램과 함께 제공되는 공개 키를 공격자의 개인/공개 키 조합으로 바꾸는 것이며, 위조 된 응용 프로그램에 대한 라이센스 키를 생성 할 수있는 키 생성기를 작성할 수 있습니다. 자신의 실행 파일에 대한 자체 확인을 통해이 공격을 어렵게 만들 수 있습니다.
그러나 보안 체계가 전혀 없으므로 java/android 응용 프로그램을 리버스 엔지니어링 할 수 있으며 결정된 해커가 응용 프로그램을 위조하고 해당 라이센스 검사를 비활성화 할 수 있습니다. 응용 프로그램의 무단 사용을 방지하기위한 유일한 방법은 응용 프로그램을 전혀 배포하지 않는 것입니다.
물론이지만 자신의 서버에 장치 식별자를 저장하도록 설정해야합니다. 아이폰에, 당신은 단지 하나 개의 시험 장치에 따라 활성화 될 수 있도록 보장,
UIDevice *device = [UIDevice currentDevice];
NSString *uniqueIdentifier = [device uniqueIdentifier];
당신은 데이터베이스 호출을하고 저장 목록에 uniqueIdentifier
을 acompare 수 사용하여 UDID를 얻을 수 있습니다.
안드로이드에서 getDeviceID()
은 고유 한 장치 식별자를 제공합니다. 이것에 대한 자세한 정보는 the documentation을 확인하십시오.
뭔가를 놓치지 않으면 해결할 수 있습니다. 앱이 제공하는 서비스가 만료되도록 설정합니다. 이것은 oAuth와 같은 토큰 메커니즘을 사용하여 수행 할 수 있습니다. (상당 기간 동안 유효 기간이 만료 된 토큰,이 경우 평가판 기간). 클라이언트 등록 프로세스 동안, 나는 안드로이드 장치 ID와 요청 된 시간의 함수로 요청 토큰을 만들 것입니다. Checkout oAuth는 번거롭기는하지만 거의 모든 주요 서비스 제공 업체에서 사용합니다.
두뇌가 죽은 단순한 코드로 99 %의 효과를 얻을 수 있다고 상상해보십시오. 평가판이 만료되었다는 것을 나타내는 장치의 어딘가에 파일을 저장하면됩니다. 기술에 능숙한 사용자는 파일을 찾아서 제거 할 수 있지만 대다수는 신경 쓰지 않을 것입니다. 장치는 내부에있는 파일을 사용하여 간섭을 일으키는 작은 격언을 불쾌하게 할 수 있습니다. 화면.
잠금 파일을 숨기고 기기 ID를 기반으로 이름과 위치를 변경하면 더 어려워 질 수 있습니다. 누군가가 평가판을 회피하는 방법에 대한 지침을 공유하는 것이 훨씬 어렵습니다.
다른 답변은 다음과 같이 지적했습니다. 시스템은 절대 안전하지 않으며, 항상 당신보다 더 똑똑하고 당신의 계획을 깨는 사람들이 있습니다. 트릭은이 사람에게 정신 운동을 제공하고 대다수를 대신하는 시간을 낭비하지 않는 것입니다.
Wi-Fi 어댑터의 MAC 주소 저장 방법은 어떻습니까? 아마도 당신이 서버에 당신과 그 응용 프로그램이 그 MAC이 이미 등록되어 있다면 서버를 쿼리 할 것입니다.
사용자의 허가와 함께, 첫 번째 앱 실행시 현재 기기의 MAC 주소가 이미 등록되어있는 경우 서버를 쿼리 하시겠습니까? 그렇지 않은 경우 서버에 MAC 주소를 저장하십시오. 이미 등록 된 경우 계속 사용하려면 앱을 구매하라고 사용자에게 요청하십시오.
이 방법은 Lie Ryan에 의해 제안 된대로 일부 보안 알고리즘 및 잠금 및/또는 평가판 기간을 제공하기 위해 보완 될 수 있습니다.
저는 iPhone에 대해 많이 알지는 못하지만 모든 iPhone에는 Wi-Fi 어댑터가 있고 모든 Wi-Fi 어댑터에는 고유 한 MAC 주소가 있다고 생각합니다. 또한 MAC를 저장하면 개인 정보 보호 문제가 제기 될 수 있으므로이 솔루션의 법적 측면을 확인하십시오. 따라서 이것을 사용하기 전에 해당 법률을 확인하십시오.
- 1. 하나의 선택에서 sum()을 사용할 수 있습니까?
- 2. 다른 하나의 작업을 Rakefile에서 사용할 수 있습니까?
- 3. 오류가없는 Twisted Deferred 오류를 평가판을 사용하여 테스트 할 수 있습니까?
- 4. jquery를 사용할 수 있습니까?
- 5. 하나의 appBase를 Tomcat의 다중 컨텍스트 경로에서 사용할 수 있습니까?
- 6. 하나의 항목으로 스크롤 가능한 (jQuery 도구)을 사용할 수 있습니까?
- 7. Spring Roo에서 어떻게 하나의 롤백 명령을 사용할 수 있습니까?
- 8. 하나의 문서 조각을 여러 번 사용할 수 있습니까?
- 9. 하나의 프로젝트에서 CakePHP와 Prado를 함께 사용할 수 있습니까?
- 10. 하나의 속성 값을 다른 속성 값에 사용할 수 있습니까?
- 11. 우리는 탭 막대에 하나의 UIViewController 클래스를 사용할 수 있습니까?
- 12. 하나의 데이터베이스에서 여러 개의 Wordpress 피드를 사용할 수 있습니까?
- 13. 둘 이상의 활동에 대해 하나의 UI 처리기를 사용할 수 있습니까?
- 14. 하나의 페이지에서 여러 jquery .load() 이벤트를 사용할 수 있습니까?
- 15. 드루팔 (Drupal : 어떻게 하나의 테마로 모듈을 사용할 수 있습니까?
- 16. 하나의 자바 스크립트 파일을 여러 HTML 파일에서 사용할 수 있습니까?
- 17. 우리는 객관적인 C에서 하나의 인터페이스와 구현 파일을 사용할 수 있습니까?
- 18. 하나의 요소에 두 개의 JavaScript onclick 이벤트를 사용할 수 있습니까?
- 19. 두 개의 다른 컨텍스트에 대해 하나의 트랜잭션을 사용할 수 있습니까?
- 20. 하나의 UIToolbar를 여러 UIViewController와 함께 어떻게 사용할 수 있습니까?
- 21. 하나의 프로젝트에서 여러 개의 PCH 파일을 사용할 수 있습니까?
- 22. 어떻게 하나의 폼의 레이블 객체를 다른 폼으로 사용할 수 있습니까?
- 23. web.config는 하나의 파일을 보호합니다 : AD 배포 그룹을 사용할 수 있습니까?
- 24. 하나의 아약스 게시 기능을 사용하여 여러 양식을 사용할 수 있습니까?
- 25. BIRT는 하나의 쿼리 출력을 다른 쿼리의 입력으로 사용할 수 있습니까?
- 26. 하나의 Android 드로어 블에서 여러 셰이프를 사용할 수 있습니까?
- 27. 하나의 SQLServer 인스턴스에서 여러 DB간에 EF를 사용할 수 있습니까?
- 28. VB 6 : 하나의 양식에 몇 개의 컨트롤을 사용할 수 있습니까?
- 29. 한 번에 하나의 편집기 만 사용할 수 있습니까? RCP
- 30. .NET에서 REXX를 사용할 수 있습니까?
안드로이드 ID는 분명히 고유하지 않습니다 - 모든 기기가 동일한 ID를 가진 모델/펌웨어 버전이 있다고 주장됩니다. –
나는 그것을한다 :) 또한 Windows Mobile. 고유 한 기기 ID는 Android에서 매우 어렵습니다. –
Settings.Secure를 통해 얻은 장치 ID는 장치를 공장에서 재설정 할 때 변경 될 수 있습니다. TelephonyManager를 통해 얻은 장치 ID는 존재하지 않을 수 있습니다 (예 : 장치가 전화기가 아닌 경우). –