别让你的IAP轻易被破解

别让你的IAP轻易被破解

 Cracker并不是什么新鲜玩意儿,一年前就已经出现在cydia上,目前最新的版本已发展到0.7.1。

昨天拿越狱过的pad装了下,再从top free上下载了些带IAP支付的游戏测试,基本上绝大多数游戏都可以非常容易的被破解,其中不乏一些大公司的作品,也包括腾讯代理的圣犬帕拉。这让我很有些诧异,按说防IAP Cracker并不需要什么特别复杂的技术,而且这个破解程序出现了这么久,没有理由不去处理一下。

最不可思议的是圣犬帕拉,这个游戏是专门针对中国市场的,90%多的系统破解率,如果再不防一下IAP Cracker,很难相信这游戏能够挣到钱。

 

那么,到底怎样才能防止程序被IAP Cracker破解呢?

首先我们需要明确的一点是,任何的防破解工作都不可能做到100%防破解,所有的努力都只是为了提高被破解的门槛,也就是说不能让小白用户随便拿个修改器或者通用破解程序就能把你的程序破解了。如果你的app做的非常出色,有人专门为你写破解程序,第一这是好消息,第二再来考虑如何防破解吧。

然后我们需要来了解一下IAP Cracker的破解原理。简单来说,IAP Cracker相当于在你的手机上安装了一个监视器,当在app中购买物品的时候,会调用一个系统API来实现到苹果的服务器验证购买并扣费的功能,IAP Cracker能够截获这个API调用并且直接返回“购买成功”消息给app。当然这个监视器不是能够随便安装的,只有在越狱过的系统上才行。如果需要更进一步了解其原理,可以Google一下MobileSubstrate

 

听起来似乎没有办法防止破解,因为系统API都已经被截获了。实际上也还是有办法的,并且在出现了IAP Cracker之后苹果还发信给开发者们建议都增加这项安全验证。

这个验证方法最早是为了给那些带有自建server的app使用的,比如你的app有自己的服务器,上面也需要记录用户的购买情况,甚至还会在上面记录收费物品的相关信息,因为购买过程是在app内部的StoreKit中完成的,购买完成后由app通知给服务器,这里就会有安全问题,app可以随便向服务器报告购买信息。所以苹果开发了这个二次验证接口,让server也能够验证购买的信息是否正确。

借助于这个二次验证接口,app可以修改以前的购买流程,在调用StoreKit API完成购买之后,并不会立即给用户添加已购买到的物品,而是把返回的结果提交给自己的server去进行二次验证,验证结果再返回给app,如果是正确的购买信息才给用户添加物品。

这里就规避掉了IAP Cracker直接修改购买结果的问题,因为这个伪造的结果到苹果的服务器去做二次验证会失败。我不确定这个验证对于那种订购服务是否有效,因为按理说订购服务只需要购买一次就可以在同一个Apple ID的多个设备上使用,所以可以多次验证成功。但对于大多数app中使用的一次性物品购买是可以验证出来的。

 

使用二次验证比较麻烦的一点是需要有自己的web服务器,能够运行php或者asp等脚本均可。服务器的代码很简单,通过Apple的文档可以看到,只需要发送一个JSON POST,然后判断返回数据里的status值是否为0。如果还是不知道代码应该怎么写,可以参考GitHub上的这段代码

也许你已经看出来了,这里面存在另一个问题:虽然直接伪造StoreKit API的返回值不行了,但我依然可以伪造server的返回值。是的,是可以伪造server的返回值,让app相信验证已经成功了。但正如我之前提到的,所有的手段都只能增加破解的门槛而不可能完全堵住破解。如果要伪造server的返回值,那么就必须为这个app专门编写破解程序,因为你的server地址是唯一的,你的返回值也是可以随便定义的。如果真有外挂制作者愿意这样做,还不如做个破解程序直接调用app里验证成功之后的函数来的快!这又是另外一个话题了,如何防外挂勾子。

但至少,如果使用了服务器二次验证,app不会被IAP Cracker这样的通用破解程序破解了。

 

如果你既没有自己的服务器,也不愿意写那几行php代码,还有另外一个选择,有一些免费的验证服务,比如这里。在他们的FAQ里写着为什么他们会提供这个免费服务,原因有二:这个服务看起来很简单,但实际上并不简单,我们已经开发了这样的服务用在我们自己的app中,可以拿出来共享给其他开发者。未来可能会提供一些其他的付费服务,但这项服务会永远免费,这个就当作是广告,一种宣传手段吧。看起来理由也还算合理,如果你相信他们,并且相信他们的公司会一起存在,至少不会比你的app寿命更短的话可以尝试一下 :)

另外他们提供的服务还增加了额外的好处,包括上面提到的返回值安全性问题。他们在app与server通信时使用了RSA加密方式,如果服务器上每个app的私钥都是独立的,理论上来说这个返回值不可能被伪造,所以可以认为这里的通信是安全的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值