2010-12-03 6 views
5

개인이 단일 장치에서 여러 번 무료 평가판을 사용할 수있는 가능성없이 각 장치에 한 번의 무료 평가판을 제공하는 서비스를 제공 할 수 있습니까? 불가능할 경우 여러 번의 무료 평가판을 얻는 것이 어렵게 만드는 방법을 알고 계십니까?장치마다 하나의 평가판을 사용할 수 있습니까?

+0

안드로이드 ID는 분명히 고유하지 않습니다 - 모든 기기가 동일한 ID를 가진 모델/펌웨어 버전이 있다고 주장됩니다. –

+0

나는 그것을한다 :) 또한 Windows Mobile. 고유 한 기기 ID는 Android에서 매우 어렵습니다. –

+0

Settings.Secure를 통해 얻은 장치 ID는 장치를 공장에서 재설정 할 때 변경 될 수 있습니다. TelephonyManager를 통해 얻은 장치 ID는 존재하지 않을 수 있습니다 (예 : 장치가 전화기가 아닌 경우). –

답변

11

장치의 고유 ID, 요청 날짜 및 개인 키를 기반으로 라이센스 키를 생성하여 특정 날짜까지만 유효한 라이센스를 만들 수 있습니다.

응용 프로그램은 라이센스 키를 공개 키로 디코딩하고 만료 날짜와 장치 ID를 비교하여 라이센스 키가 유효한지 확인합니다. 라이센스 키는 지정된 날짜와 주어진 장치 ID에만 유효하기 때문에 사람들은 위조 요청을 위조 할 수 없습니다.

(힌트 : 공개 키 암호화에 대해 읽어는)

그러나, 그것은 완전히 고장이 아닙니다. 정말로 결정된 공격자는 자신의 장치를 루트 할 수 있으며 "getDeviceId()"에 의해 리턴 된 식별자를 제어 할 수있는 사용자 정의 펌웨어를 설치할 수 있습니다. 이것은 대부분의 사람들이 기꺼이할만한 것이 아니며 대부분의 사람들은 대안적인 무료 앱을 찾거나 해당 경로를 거치지 않고 앱을 구매할 것입니다. 그런 결정과 기술을 가진 크래커들에 대해서는 당신이 할 수있는 일이별로 없습니다.

공격의 다른 방법은 응용 프로그램과 함께 제공되는 공개 키를 공격자의 개인/공개 키 조합으로 바꾸는 것이며, 위조 된 응용 프로그램에 대한 라이센스 키를 생성 할 수있는 키 생성기를 작성할 수 있습니다. 자신의 실행 파일에 대한 자체 확인을 통해이 공격을 어렵게 만들 수 있습니다.

그러나 보안 체계가 전혀 없으므로 java/android 응용 프로그램을 리버스 엔지니어링 할 수 있으며 결정된 해커가 응용 프로그램을 위조하고 해당 라이센스 검사를 비활성화 할 수 있습니다. 응용 프로그램의 무단 사용을 방지하기위한 유일한 방법은 응용 프로그램을 전혀 배포하지 않는 것입니다.

3

물론이지만 자신의 서버에 장치 식별자를 저장하도록 설정해야합니다. 아이폰에, 당신은 단지 하나 개의 시험 장치에 따라 활성화 될 수 있도록 보장,

UIDevice *device = [UIDevice currentDevice]; 
NSString *uniqueIdentifier = [device uniqueIdentifier]; 

당신은 데이터베이스 호출을하고 저장 목록에 uniqueIdentifier을 acompare 수 사용하여 UDID를 얻을 수 있습니다.

안드로이드에서 getDeviceID()은 고유 한 장치 식별자를 제공합니다. 이것에 대한 자세한 정보는 the documentation을 확인하십시오.

+0

+1하지만 정말 안전합니까? 하루가 끝나면 서버에 요청을 보내야하며 공격자가 요청을 위조하는 것을 막을 수 있습니까? – rook

+0

사실; 하지만 앱 스토어와 마켓 플레이스 때문에 앱 배포를 통제 할 수 없기 때문에 다른 방법은 없다고 생각합니다. 이것은 확실히 어려운 일이지만 불가능하지는 않습니다. –

+0

@Rook : 요청을 비밀 키로 해시하고 서버에서 확인할 수 있습니다. – donkim

1

뭔가를 놓치지 않으면 해결할 수 있습니다. 앱이 제공하는 서비스가 만료되도록 설정합니다. 이것은 oAuth와 같은 토큰 메커니즘을 사용하여 수행 할 수 있습니다. (상당 기간 동안 유효 기간이 만료 된 토큰,이 경우 평가판 기간). 클라이언트 등록 프로세스 동안, 나는 안드로이드 장치 ID와 요청 된 시간의 함수로 요청 토큰을 만들 것입니다. Checkout oAuth는 번거롭기는하지만 거의 모든 주요 서비스 제공 업체에서 사용합니다.

4

두뇌가 죽은 단순한 코드로 99 %의 효과를 얻을 수 있다고 상상해보십시오. 평가판이 만료되었다는 것을 나타내는 장치의 어딘가에 파일을 저장하면됩니다. 기술에 능숙한 사용자는 파일을 찾아서 제거 할 수 있지만 대다수는 신경 쓰지 않을 것입니다. 장치는 내부에있는 파일을 사용하여 간섭을 일으키는 작은 격언을 불쾌하게 할 수 있습니다. 화면.

잠금 파일을 숨기고 기기 ID를 기반으로 이름과 위치를 변경하면 더 어려워 질 수 있습니다. 누군가가 평가판을 회피하는 방법에 대한 지침을 공유하는 것이 훨씬 어렵습니다.

다른 답변은 다음과 같이 지적했습니다. 시스템은 절대 안전하지 않으며, 항상 당신보다 더 똑똑하고 당신의 계획을 깨는 사람들이 있습니다. 트릭은이 사람에게 정신 운동을 제공하고 대다수를 대신하는 시간을 낭비하지 않는 것입니다.

1

Wi-Fi 어댑터의 MAC 주소 저장 방법은 어떻습니까? 아마도 당신이 서버에 당신과 그 응용 프로그램이 그 MAC이 이미 등록되어 있다면 서버를 쿼리 할 것입니다.

사용자의 허가와 함께, 첫 번째 앱 실행시 현재 기기의 MAC 주소가 이미 등록되어있는 경우 서버를 쿼리 하시겠습니까? 그렇지 않은 경우 서버에 MAC 주소를 저장하십시오. 이미 등록 된 경우 계속 사용하려면 앱을 구매하라고 사용자에게 요청하십시오.

이 방법은 Lie Ryan에 의해 제안 된대로 일부 보안 알고리즘 및 잠금 및/또는 평가판 기간을 제공하기 위해 보완 될 수 있습니다.

저는 iPhone에 대해 많이 알지는 못하지만 모든 iPhone에는 Wi-Fi 어댑터가 있고 모든 Wi-Fi 어댑터에는 고유 한 MAC 주소가 있다고 생각합니다. 또한 MAC를 저장하면 개인 정보 보호 문제가 제기 될 수 있으므로이 솔루션의 법적 측면을 확인하십시오. 따라서 이것을 사용하기 전에 해당 법률을 확인하십시오.

관련 문제