2

我知道有办法检查应用内购买是否已被破解,但是有没有办法检查应用程序是否已从 App Store 下载?

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

4

1 回答 1

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指令的前两个字节——一个两字节补丁
  • 用几条指令替换退出调用的跳转nop——同样,一个两字节的补丁

签名验证通常会阻止这种情况,但越狱的 iPhone 很乐意运行未签名的代码,因此没有什么能阻止有足够动机的破解者修改您的应用程序以禁用您添加的任何额外检查。

于 2012-07-22T23:50:06.567 回答