【问题标题】:How to defend against IAP Cracker for "consumable" purchases?如何防御 IAP Cracker 的“消耗性”购买?
【发布时间】:2026-02-15 00:20:05
【问题描述】:

我刚刚了解到 IAP Cracker 的存在,我正在尝试找出在我的应用中验证 IAP 购买的最佳方法。

我无法确定 IAP Cracker 是否适用于“消耗品”购买。如果没有,我没什么好担心的。

这是保护/验证所有购买的一种方法。

http://www.binpress.com/app/inapp-purchase-verification/633#description

感谢您的任何见解!

【问题讨论】:

    标签: ios jailbreak in-app-purchase


    【解决方案1】:

    我查看了您显示的链接,但如果我是您,我不会相信它。任何了解逆向工程和开发的人都可以轻松绕过该方法。任何人都可以轻松编写一个 hack 来自动免费为您提供内容。

    我不知道验证应用内购买的安全方法,因为我没有使用过它们,但请记住这一点:无论你做得多么安全,一个坚定的黑客都能够绕过它。

    【讨论】:

    • 怎么样?这会验证与 Apple 服务器通信的远程服务器上的收据。
    • 是的,但是在它验证它之后,它只是调用一个表示购买成功的委托方法。假设不是验证购买,而是将其修改为简单地调用此委托方法。在这种情况下,应用程序会很乐意为用户提供所请求的内容,而无需向他/她收费。请不要因为您不理解而对答案投反对票。
    • 我没有投反对票,因为我不明白。你没有解释。既然您解释了您所指的内容,您就得到了赞成:)
    • 我故意避免解释它,因为知道如何解决这个问题,恶意开发人员可以编写新的调整或更新 iAPCracker 来绕过它。哦,好吧。
    • 编辑您的答案(无论多么微不足道),以便我给您投票。另外,有什么建议可以正确验证消耗品购买吗?
    【解决方案2】:

    我建议让您的远程服务器同时通信和存储数据。因此,当您通过客户端拨打电话时,请确保将信息发送到远程服务器,然后客户端会收到回叫“是的,购买成功”。现在,当用户实际尝试使用购买时,他们必须调用您的远程服务器,以验证传入的数据是否实际可用。

    假设用户购买了“10 个硬币”,您的客户端将“我需要验证”发送到您的服务器,然后您的服务器将它的消息发送给苹果并得到它的响应(在这种情况下,我们可以说它是“很好”回复)。然后,您的服务器将用户“*”的“10 个硬币”存储在其数据库中,并将“购买的 10 个硬币”返回给客户端。然后用户使用 10 个硬币在游戏中进行购买,这会向您的远程服务器发送另一条消息,远程服务器检查数据库并查看用户是否有可用的硬币并采取相应的行动。

    这是安全的原因: 用户有 0 个硬币并“伪造”一条消息说他们想购买您的物品并在消息中“放置”60 个硬币。当远程服务器收到消息时,它会根据它的数据库检查使用的值 (60) 并看到用户没有 60 个硬币,然后它就会使消息失败。

    因此,在远程服务器上维护您的所有数据,并让客户端进行网络调用以访问用户拥有的内容/数量。这样,用户可以随心所欲地更改客户端上的数据,但这没关系,因为远程服务器不会与数据匹配,并且会在他们的诡计上出错。

    【讨论】: