こんにちは私は、ユーザーが別のサウンドを購入できるアプリの購入で設定しています。一度購入すると、彼はその音をAppで再生することができます。サウンドファイルはすべて私のリソースフォルダにあり、購入されたファイルのレコードを(plistで)保持しています。 いいえIAPファイルを右クリックしてそのコンテンツを見ると、リソースが表示されます。したがって、実際にそれらを購入しなくても、それらのサウンドを持つことができます。 保護されたバンドルなどはありますか?アプリ購入リソースセキュリティ
1
A
答えて
1
これらのファイルをそれぞれ暗号化し、購入時に暗号化して解読し、使用可能にすることができます。
.H:
#import <Foundation/Foundation.h>
@interface NSData (DataCategory)
- (NSData *)AES256EncryptWithKey:(NSString *)key;
- (NSData *)AES256DecryptWithKey:(NSString *)key;
@end
.M
#import "NSDataCategory.h"
#import <CommonCrypto/CommonCryptor.h>
@implementation NSData (DataCategory)
- (NSData *)AES256EncryptWithKey:(NSString *)key {
// 'key' should be 32 bytes for AES256, will be null-padded otherwise
char keyPtr[kCCKeySizeAES256+1]; // room for terminator (unused)
bzero(keyPtr, sizeof(keyPtr)); // fill with zeroes (for padding)
// fetch key data
[key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];
NSUInteger dataLength = [self length];
//See the doc: For block ciphers, the output size will always be less than or
//equal to the input size plus the size of one block.
//That's why we need to add the size of one block here
size_t bufferSize = dataLength + kCCBlockSizeAES128;
void *buffer = malloc(bufferSize);
size_t numBytesEncrypted = 0;
CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding,
keyPtr, kCCKeySizeAES256,
NULL /* initialization vector (optional) */,
[self bytes], dataLength, /* input */
buffer, bufferSize, /* output */
&numBytesEncrypted);
if (cryptStatus == kCCSuccess) {
//the returned NSData takes ownership of the buffer and will free it on deallocation
return [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted];
}
free(buffer); //free the buffer;
return nil;
}
- (NSData *)AES256DecryptWithKey:(NSString *)key {
// 'key' should be 32 bytes for AES256, will be null-padded otherwise
char keyPtr[kCCKeySizeAES256+1]; // room for terminator (unused)
bzero(keyPtr, sizeof(keyPtr)); // fill with zeroes (for padding)
// fetch key data
[key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];
NSUInteger dataLength = [self length];
//See the doc: For block ciphers, the output size will always be less than or
//equal to the input size plus the size of one block.
//That's why we need to add the size of one block here
size_t bufferSize = dataLength + kCCBlockSizeAES128;
void *buffer = malloc(bufferSize);
size_t numBytesDecrypted = 0;
CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding,
keyPtr, kCCKeySizeAES256,
NULL /* initialization vector (optional) */,
[self bytes], dataLength, /* input */
buffer, bufferSize, /* output */
&numBytesDecrypted);
if (cryptStatus == kCCSuccess) {
//the returned NSData takes ownership of the buffer and will free it on deallocation
return [NSData dataWithBytesNoCopy:buffer length:numBytesDecrypted];
}
free(buffer); //free the buffer;
return nil;
}
@end
コードhereから使用
以下は、それは簡単なのiOSでデータを暗号化することができますNSData
カテゴリです。
-2
いつでもサウンドファイルのビットの一部を反転し、アプリから購入した後に戻すことができます。変更の程度に応じて、ファイルヘッダーを壊すか、または修正するまでオーディオを完全にマングルすることができます。
関連する問題
- 1. アプリ内購入の際、アプリ内購入
- 2. アプリ購入:SKPaymentTransactionState購入済み
- 3. inApp購入前のiphoneアプリの購入
- 4. アプリ購入で消耗品購入
- 5. iPhoneアプリ:アプリ内購入
- 6. iPhoneアプリ:アプリ購入時
- 7. シンプルなアプリ購入アプリAndroid
- 8. アプリ内購入ヘルプ
- 9. iOS:アプリ内購入
- 10. アプリの購入インプリメンテーション
- 11. アプリ購入 - バンドル(apple)
- 12. アプリ内購入サブスクリプション
- 13. アプリの購入テスト
- 14. MacOSアプリ内購入
- 15. UWPアプリ購入クエリ
- 16. iTunesアプリ購入で
- 17. アプリ内購入は
- 18. アプリ内購入Android
- 19. アプリ内購入:AndroidとiOSの間のアプリ内購入
- 20. アプリ購入 - 自動更新購読
- 21. アプリ内購入の購入情報の入手方法
- 22. アプリ内購入サンドボックス・テスト・エラー
- 23. アプリ購入テスト中のEXC_BAD_ACCESS
- 24. まずアプリ内購入に
- 25. アプリ購入の紹介リンク
- 26. アプリ内購入エラー0
- 27. アプリ内購入APIサーバーエラー509
- 28. iPhoneでのアプリ内購入
- 29. iOS(Appcelerator)用アプリ購入
- 30. iOS - アプリ内購入とベータテスト
こんにちは、ありがとうございます。私は、ファイルの暗号化と復号化は良いアイデアだと思っていますが、そのためにはすべてのサウンドファイルを暗号化する必要があります。それは長い時間と労力がかかります。しかし、とにかくありがとう。私はあなたのアプローチが好きです。 – jAmi