我有什么方法可以检测我的应用程序是否已下载Installous?

时间:2012-07-22 08:03:59

标签: objective-c ios app-store in-app-purchase

我知道有一种方法可以检查应用内购买是否已被破解,但有没有办法检查该应用是否已从App Store下载?

我的意思是检查我的应用程序是否有人破解了它或有人从Installous下载了它?

1 个答案:

答案 0 :(得分:1)

答案简短:不,不是真的。首先,我不认为Apple提供了这样做的方法,尽管我可能是错的。但即使他们这样做了,也可能没什么好处。

我们假设存在一个名为VerifyAppStorePurchase的函数,该函数与Apple的服务器联系并确认当前用户已合法购买了您的应用程序。在你的应用程序的某个地方,你有这样的代码:

if(!VerifyAppStorePurchase()) {
    exit(-1);
}

这将编译为类似的东西(但请注意这是x86程序集而不是arm,因此它不完全是你在iOS设备上看到的。但是同样的概念适用。):

    pushl   %ebp
    movl    %esp, %ebp
    subl    $24, %esp
    call    _VerifyAppStorePurchase
    testl   %eax, %eax
    je  L7
    # <snip app code here>
L7:
    movl    $-1, (%esp)
    call    _exit

我至少可以看到两种破解者禁用此检查的方法:

  • call指令的前两个字节替换为check-a two byte patch
  • 将跳转替换为要退出的调用以及一对nop指令 - 再次,一个双字节补丁

签名验证通常会停止此操作,但越狱的iPhone很乐意运行未签名的代码,因此没有什么可以阻止充满动力的破解者修改您的应用以禁用您添加的任何额外检查。