关于IAP防止破解的几点

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

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

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

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

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

附上服务器端验证,php的代码:

 

  1. <?php 
  2.      public function recharge($params){ 
  3.         $url = "https://buy.itunes.apple.com/verifyReceipt"
  4.         $receipt = json_encode(array("receipt-data" => $base_key));     
  5.         $response_json = $this->getHeader($url$receipt); 
  6.         $response = json_decode($response_json['content'], true); 
  7.         if($response['status'] == 0){ 
  8.         //修改虚拟货币道具 
  9.         } 
  10.     } 
  11.     /** 
  12.     * 发送请求 
  13.     */ 
  14.     protected function getHeader($url$data){ 
  15.         $ch = curl_init(); 
  16.         $timeout = 300; // set to zero for no timeout 
  17.         curl_setopt($ch, CURLOPT_URL, $url); 
  18.         //       curl_setopt($ch, CURLOPT_ENCODING, 'gzip'); 
  19.         curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1); //post到https 
  20.         curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
  21.         curl_setopt($ch, CURLOPT_POST, true); 
  22.         curl_setopt($ch, CURLOPT_POSTFIELDS, $data); 
  23.         curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
  24.         curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);//跟随页面的跳转 
  25.         //       curl_setopt($ch, CURLOPT_HEADER, true); 
  26.         curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout); 
  27.         $handles = curl_exec($ch); 
  28.         $header = curl_getinfo($ch); 
  29.         curl_close($ch); 
  30.         $header['content'] = $handles
  31.         return $header
  32.     } 
  33. ?> 

 

附件ECPurchase的zip包下载地址:http://down.51cto.com/data/937473

责任编辑:闫佳明 来源: cocoachina
相关推荐

2010-05-26 14:41:38

JavaScript

2021-07-21 09:00:00

面部识别AI安全

2020-10-29 10:26:28

DevOps软件自动化

2010-02-25 10:29:00

oracle认证

2012-04-02 15:52:11

2021-06-25 14:41:42

网络安全

2014-01-10 14:12:24

网管软件网络管理员

2014-08-12 13:38:15

2021-03-05 11:36:13

安全数据

2022-08-06 13:04:27

LinuxSHH

2020-05-21 09:25:17

Python反爬虫DDOS攻击

2009-09-06 14:35:34

如何学习CCNA建议

2010-05-27 14:53:52

2011-08-16 18:29:45

SQL Server 数据货场

2011-07-21 13:00:26

SaaS云计算

2013-04-23 15:31:28

大项目

2013-03-01 14:21:00

Windows 8OA 3.0

2013-08-21 14:51:45

2011-08-05 11:01:15

MySQL数据库设计

2021-04-21 13:29:42

内存安全Java
点赞
收藏

51CTO技术栈公众号