2011-01-17 3 views
3

인앱 구매로 iPhone 앱을 제작하고 있습니다. 영수증을 확인한 후에 추가 콘텐츠가 잠금 해제되는 "기본 제공"모델을 사용하고 있습니다. 나는 문제없이 작동하는 거래를 가지고 있지만 ... 사용자의 장치에 구매 기록을 저장하는 가장 좋은 방법은 무엇입니까?인앱 구매를 저장하기 위해 plist를 사용하는 것보다 안전한 솔루션이 있습니까?

Apple 가이드는 NSUserDefaults를 사용하여 해당 정보를 저장하도록 권장합니다. 이 권고안의 문제점은 아이폰 익스플로러의 무료 사본을 가진 사람이라면 누구나 앱에 들어가서 plist를 편집하고 실제로 지불하지 않고 풀 버전을 풀 수 있다는 것이다.

누군가가 더 안전한 솔루션을 권장 할 수 있습니까?

답변

6

표준 면책 조항 : 모든 불법 복제를 근절하는 "진정한 해결책"은 없습니다. 무료로 해방하는 데 어려움이 있습니다. 현재의 일반적인 지혜 : 앱 plists를 수정하는 방법을 알고있는 소수의 사람들에 대해 걱정하는 것은 중요하지 않을 수 있습니다. 어쨌든

:

  1. 당신은이 데이터를 저장할 수는 (예를 들어) 파일이 어디 그 앱의 파일 시스템에서 영구적입니다. 이 경우 /tmp 또는 /Library/Caches을 제외한 ~ 이하입니다. 일반적으로 사소한 디렉토리 목록에 숨겨져있는 마침표가 붙은 파일 이름을 사용할 수 있습니다.
  2. 키 체인에 어떤 형식으로 저장할 수 있습니다.이 작업은 현재 수행중인 작업에 대해 더 이상 안전하지는 않지만 플래그를 유지하는 데는 상당히 난독화된 장소입니다.
  3. 위의 경우 중 하나에서 앱의 바이너리에 포함 된 키로 플래그에 서명 할 수 있습니다. 이 정도까지 갈 경우 장치의 고유 ID를 플래그 (YES) 또는 필요한 다른 ID 문자열과 연결 한 다음 SHA-HMAC를 생성하고 난독 화 상태로 유지하는 16 바이트 키를 사용합니다. 귀하의 바이너리.

대부분이 과잉 공격 일 수 있습니다. 상단의 면책 조항을 참조하십시오. :)

0

나는이 정보를 서버에 저장하고 응용 프로그램을 시작하는 동안이 정보를로드하는 것이 가장 안전한 방법이라고 생각합니다. plist 파일은 매우 쉽게 수정할 수 있습니다 (하루가 끝날 때 일반 텍스트 파일입니다)

그러나 백엔드가없는 경우이 목적으로 만 백엔드를 설정하면 잔인합니다. 이 시나리오에서는 plist 파일로 영리한 일을하는 것이 좋습니다. 내 머리 꼭대기에서 벗어나는 한 가지는 사용자의 ID를 기반으로 액세스 권한을 부여하는 고유 한 키 - 값 쌍을 갖는 것입니다. 동일한 사용자가 여러 기기를 사용하는 경우 기기 ID가 깨질 수 있습니다. 이 값은 해시 알고리즘에 따라 생성됩니다. (예 : value = hash (userID)) '해커'가 알고리즘을 알지 못하기 때문에 올바른 값 (구매를 나타내는 값)을 알 수있는 유일한 방법은 앱을 구매하는 것입니다. 단 하나의주의 사항은 구독에 사용하면 해커가 첫 달을 구독하고 적절한 값을 얻은 다음 가입을 취소하고 plist의 올바른 가치를 유지하는 것입니다.

의미가 있습니까?

관련 문제