4

我正在寻找一种方法来检测在我的应用程序中使用 IAPracker 的人。

最近我发现这篇有用的帖子如何检测“LocallAPStore” - 新的 iap 破解程序并用它来保护我的一些应用内购买。

现在我发现了一个新的应用内破解来源——你知道的。所以我安装了这个名为 IAPFree 的新插件,这是一种破解 IAP 的新方法。我在一些应用程序和我自己的应用程序上对其进行了测试,它工作正常,这不好!

在此处输入图像描述

我尝试通过与 IAPracker 相同的方式来检测它:

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 回答