4

アプリケーションで IAPCracker を使用している人を検出する方法を探していました。

最近、この便利な記事「LocallAPStore」を検出する方法 - 新しい iap クラッカーを見つけて、アプリ内購入の一部を保護するために使用しました。

今、アプリ内クラッキングの新しいソースを見つけました...ご存知のとおりです。そこで私は、IAP をクラッキングする新しい方法である IAPFree と呼ばれるこの新しい微調整をインストールしました。いくつかのアプリと自分のアプリでテストしましたが、うまくいきませんでした!

ここに画像の説明を入力

IAPCracker と同じ方法で検出しようとしました。

if ([[NSFileManager defaultManager] fileExistsAtPath:@"/Library/MobileSubstrate/DynamicLibraries/iap.dylib"]){
    NSLog(@"IAP Cracker detected");
}

しかし、残念ながらファイルの名前は「iapfree.core.dylib」に変更されていました (IFile を開くと、同じディレクトリにファイルが見つかりました)。

これで、ディレクトリを簡単に置き換えることができると思いました。しかし、うまくいきません!このコードを使用して、何らかの方法で検出しました。

if ([[NSFileManager defaultManager] fileExistsAtPath:@"/Library/MobileSubstrate/DynamicLibraries/iapfree.core.dylib"]){
    NSLog(@"IAPfree detected");
}else{
NSLog(@"No IAPFree found");
}

これはランダムなエラーだと思い、同じディレクトリ内の他のファイルで試しました。彼らはうまくいきました!

このファイルの何が問題なのかわかりません。「.core.」が原因ではないかと思いますが、実際にはわかりません。

問題を解決する方法、または別の方法で問題を検出する方法を知っていますか?

4

2 に答える 2

4

この問題を解決する最善の方法 (「Apple が承認した」唯一の方法でもあります) は、クラッカーの存在ではなく、アプリ内購入の領収書を外部サーバーで確認することです! それを非常に簡単に行うサードパーティのサービスがたくさんあり、無料のものもあります。

別の方法として、ここここに示すように、ローカルで領収書を確認することもできます(完全な開示、それは私のブログです ;) )。これにはいくつかの利点があります (より単純で、検証サーバーがオフラインまたは到達不能であっても機能します) が、もちろん、新しいクラッキング システムがそれをだます可能性があります。

ここにちょっとしたコードがあります: paymentQueue (inApp プロトコルのコールバック) をチェックすると、次のようなことができます:

- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
{
    for (SKPaymentTransaction *transaction in transactions)
    {
        switch (transaction.transactionState)
        {
            case SKPaymentTransactionStatePurchased:
            case SKPaymentTransactionStateRestored:
            {
                [self checkReceipt:[_productIdentifierList objectAtIndex:0] transazione:transaction];
                [self finishPaymentTransaction:transaction];
            }

                break;

            case SKPaymentTransactionStateFailed:
            {
                [UIView msgBox:@"Transaction Error" title:@"Errore"];
                [self finishPaymentTransaction:transaction];
            }
                break;

            default:
                break;
        }           
    }
}

- (void) checkReceipt:(SKProduct *)prodotto transazione:(SKPaymentTransaction *)transaction
{
    NSString*ricevuta = [[NSString alloc] initWithData:transaction.transactionReceipt encoding:NSUTF8StringEncoding];

    NSRange hackTest = [transaction.transactionIdentifier rangeOfString:@"com.urus.iap"];   // ok if this not found
    NSRange hackTest2 = [transaction.transactionIdentifier rangeOfString:@"PUT HERE YOUR INAPP ID"];    // TODO: PUT HERE YOUR INAPP ID
    if (hackTest.location == NSNotFound && hackTest2.location == NSNotFound)
    {
        // it pass the local test: receipt is probably good
    }
    else
    {
        // invalid receipt, fake for sure, cancel buying...
    }
}

inApp コードを「hackTest2」チェックに入れる必要があることに注意してください。そのため、複数の製品がある場合、ループが発生する可能性があります...

于 2013-03-06T14:03:43.677 に答える
-1

「IAPFreeService.dylib」もチェック

お役に立てれば。

于 2013-06-04T15:31:35.233 に答える