关于苹果IAP防止破解的几点

来源:互联网 发布:腾讯社交广告优化师 编辑:程序博客网 时间:2024/06/06 03:30

关于苹果IAP防止破解的几点

1 推荐大家使用ECPurchase,verifyRecepitMode使用ECVerifyRecepitModeiPhone,会和apple的服务器再做一次验证,负作用是可能购买时间稍长一些。不要是使用ECVerifyRecepitModeNone模式。然后ECVerifyRecepitModeServer模式,在ECPurchase里面和ECVerifyRecepitModeiPhone一样的作用,没有经过自己的服务器验证,需要重写,参考3。

2 破解的原理,这里就不讨论了,根源是Objective-C的runtime的副作用。

3 联网游戏,关键数据应该存储在服务器,然后将apple服务器的json数据发给自己服务器,再发到apple服务器做验证。验证失败后,你可以任意处理这个用户了。

4 非联网游戏,先做好第1点吧,有精力的可以参考第3点。不能根治,就是因为2了。

附上服务器端验证,php的代码:
<?php
public function recharge($params){
$url = "https://buy.itunes.apple.com/verifyReceipt";
$receipt = json_encode(array("receipt-data" => $base_key));
$response_json = $this->getHeader($url, $receipt);
$response = json_decode($response_json['content'], true);
if($response['status'] == 0){
//修改虚拟货币道具
}
}
/**
* 发送请求
*/
protected function getHeader($url, $data){
$ch = curl_init();
$timeout = 300; // set to zero for no timeout
curl_setopt($ch, CURLOPT_URL, $url);
// curl_setopt($ch, CURLOPT_ENCODING, 'gzip');
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1); //post到https
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);//跟随页面的跳转
// curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$handles = curl_exec($ch);
$header = curl_getinfo($ch);
curl_close($ch);
$header['content'] = $handles;
return $header;
}
?>

 

原创粉丝点击