本站文章均为 李华明Himi 原创,转载务必在明显处注明:
转载自【黑米GameDev街区】 原文链接: http://www.himigame.com/iphone-cocos2d/673.html

对于iOS的应用安全这块主要有两块是我们开发者可以避免的,一个是存储数据加密,这个在上一篇文章Himi介绍了base64加密算法;另外一个就是付费产品防护!那么本篇Himi来分享如何防护越狱用户的iap Cracker!

对于iap Cracker这个插件,Himi简单介绍下!

iap Cracker可以说是iOS越狱用户的终极利器阿,当今app Store的所有内置收费的游戏,基本使用此插件进行秒购买无压力!(对于那些收费下载的游戏,对于越狱用户来说,安装个XX助手<你懂得~>就可以免费体验app store的所有游戏,不管你下载收费还是内置收费!)

iap Cracker能绕过appstore的付费流程,其方式是当用户点击付费产品进行购买后,iap Cracker模拟返回一个购买成功的消息(无需联网,说白了,连post 数据给App store都没有!),然后我们应用中收到这个“假的”交易成功的消息直接给用户加钱,加装备,加各种….

OK,对于iap Cracker就不再多介绍了,下面Himi来分享如何防护iap Cracker吧;

对于越狱用户使用付费破解插件进行付费这个问题,其实Apple并没有不管,而是已经在文档中清晰的说明,只是很多童鞋并没有发现,如下截图:

apple提示开发者付费要进行验证付费收据! 原文apple dev官方文档连接:

https://developer.apple.com/library/ios/#documentation/NetworkingInternet/Conceptual/StoreKitGuide…

下面Himi就详细讲解如何在我们付费流程中加入iap防护,步骤如下:

1. 首先将 json类库和NSData+Base64类导入你的项目中,下载:

  json_base.rar (105 字节, 14 次)

2. 然后将Himi封装的如下函数拷贝到你付费代码所在的类中:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
.h中:
-(BOOL)putStringToItunes:(NSData*)iapData;
.m中:
#import "NSData+Base64.h"
#import "NSString+SBJSON.h"
#import "JSON.h"
-(BOOL)putStringToItunes:(NSData*)iapData{//用户购成功的transactionReceipt
    NSString*encodingStr = [iapData base64EncodedString];
    NSString *URL=@"https://sandbox.itunes.apple.com/verifyReceipt";
    //https://buy.itunes.apple.com/verifyReceipt
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];// autorelease];
    [request setURL:[NSURL URLWithString:URL]];
    [request setHTTPMethod:@"POST"];
    //设置contentType
    [request addValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
    //设置Content-Length
    [request setValue:[NSString stringWithFormat:@"%d", [encodingStr length]] forHTTPHeaderField:@"Content-Length"]; 
    NSDictionary* body = [NSDictionary dictionaryWithObjectsAndKeys:encodingStr, @"receipt-data", nil];
    SBJsonWriter *writer = [SBJsonWriter new];
    [request setHTTPBody:[[writer stringWithObject:body] dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES]];
    NSHTTPURLResponse *urlResponse=nil;
    NSError *errorr=nil;
    NSData *receivedData = [NSURLConnection sendSynchronousRequest:request
                                                 returningResponse:&urlResponse
                                                             error:&errorr];
    //解析
    NSString *results=[[NSString alloc]initWithBytes:[receivedData bytes] length:[receivedData length] encoding:NSUTF8StringEncoding];
    CCLOG(@"-Himi-  %@",results);
    NSDictionary*dic = [results JSONValue];
    if([[dic objectForKey:@"status"] intValue]==0){//注意,status=@"0" 是验证收据成功
        return true;
    }
    return false;
}

接着说下此方法的使用,一般付费代码中,童鞋们肯定会有如下函数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions//交易结果
{
    for (SKPaymentTransaction *transaction in transactions)
    {
        switch (transaction.transactionState)
        {
            case SKPaymentTransactionStatePurchased://交易完成
                 if([self putStringToItunes:transaction.transactionReceipt]){
                     //这里给用户添加钱阿,装备阿什么的
                 }
                   break;
             ......代码省略
         }
     }
}

上面这个函数当获取交易成功的消息都会进入到SKPaymentTransactionStatePurchased这个case中(不管是iap cracker模拟的还是appstore真的反馈的消息), 那么我们一般不做iap防护情况下,会直接在此case中给用户添加金币阿,什么的! 但是如上所说因为iap cracker也会模拟返回交易成功的消息,也会进入到这个case中,因此我们在此与appstore再次进行一次收据验证!

另外说一点当交易完成时appstore传回来的transaction(SKPaymentTransaction)类中的transactionReceipt属性里包含AppStore返回经过签名的收据信息!OK,我们要的就是这个收据并将此收据post给appstore 的server进行收据验证,所以在SKPaymentTransactionStatePurchased这个交易成功的case中再调用Himi封装的函数if([self putStringToItunes:transaction.transactionReceipt]){} 进行再次确认下购买是否付费流程正确!

那么下面详细说下Himi封装的这个putStringToItunes函数:

此函数中,首先我们将传入的收据data类型变量进行base64转换成string类型,然后将此收据以json的形式发送给appstore进行验证!这里注意!一定要以json形式发送,否则appstore server端不识别!

最后再次利用json对appstore server返回的字段(json数据)进行解析,我们只需要解析出 status 这个key的value即可!

当appstore验证收据正确时我们解析出来的 status 这个key的value值为0(零)!

下面是appstore返回json数据的两种形式:

1. 收据无效的情况:

1
{"status":21002, "exception":"java.lang.NullPointerException"}

2.收据正确的情况,如下图(点击放大):

最后大家需要注意的一点是,Himi封装的函数中post的地址这里要记得发布的时候修改!

      因为当你沙盒测试的时候地址是:https://sandbox.itunes.apple.com/verifyReceipt

      但是正式发布后post的地址应该是:  https://buy.itunes.apple.com/verifyReceipt

千万不要发布应用的时候别忘记修改这里!

OK,本篇就介绍到这里,希望对还没有做iap防护的童鞋有所帮助!

拒绝iap cracker相关推荐

  1. 【iOS-iap防护】验证用户付费收据!拒绝iap Cracker!拒绝iap Free!让iphone越狱用户无从下手!

    [iOS-iap防护]验证用户付费收据!拒绝iap Cracker!拒绝iap Free!让iphone越狱用户无从下手![2012年5月2日更新防护iap Free的方法] 本站文章均为 李华明Hi ...

  2. 【iOS-iap防护】验证用户付费收据!拒绝iap Cracker!拒绝iap Free!让iphone越狱用户无从下手!【2012年5月2日更新防护iap Free的方法】

    本站文章均为 李华明Himi 原创,转载务必在明显处注明: 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/iphone-cocos2d/673.html ...

  3. php验证iap收据,【iOS-iap防护】验证用户付费收据!拒绝iap Cracker!!

    接着说下此方法的使用,一般付费代码中,童鞋们肯定会有如下函数: 另外说一点当交易完成时appstore传回来的transaction(SKPaymentTransaction)类中的transacti ...

  4. [转]iAP Cracker for iPhone/iPod/iPad

    源:http://cydia.myrepospace.com/urus ========================================== iAP Cracker by urus; ...

  5. iAP Cracker for iPhone/iPod/iPad

    源:http://cydia.myrepospace.com/urus ========================================== iAP Cracker by urus; ...

  6. iOS游戏如何防御外挂及IAP破解

    2012-10-10 12:48:47来源:网易博客作者:Dani Lee 今年3月初写过一篇<iO平台游戏安全小议>,到现今已有7个月了.在这段时间内,iOS平台上的安全问题也产生了不小 ...

  7. iOS平台游戏安全再议之八门神器内存修改,IAP Free游戏内购破解的防御

     http://danqingdani.blog.163.com/blog/static/186094195201298103346566/ 今年3月初写过一篇<iO平台游戏安全小议> ...

  8. [转]iOS游戏如何防御外挂及IAP破解

    http://www.j1f3.com/news/game/21371.html 今年3月初写过一篇<iO平台游戏安全小议>,到现今已有7个月了.在这段时间内,iOS平台上的安全问题也产生 ...

  9. iap java md5_苹果应用内支付(iOS IAP)的流程与常用攻击方式

    1. 客户端直接verify苹果的receipt 如果verify成功 自行发放商品 2. 客户端将receipt传给server,由server进行验证并发放商品 按照安全性原则, 客户端的所有信息 ...

  10. 苹果应用内支付(iOS IAP)的流程与常用攻击方式

    苹果应用内支付(iOS IAP)的流程与常用攻击方式 Jan 19, 2017 常见支付流程 iap(in app purchase)指苹果应用内支付, 目前主要有两种方式. 1. 客户端直接veri ...

最新文章

  1. 主流浏览器及对应内核
  2. Interference Signal 第八届
  3. 一个判断字符串是否是数字的正则表达式
  4. 异步IO\数据库\队列\缓存
  5. Ruby. Vs . Python
  6. 【2006-1】【字符统计】
  7. 数字后端基本概念介绍——Routing Blockage
  8. 深入理解计算机系统第四版_深入理解计算机系统第三版2.4节中文版的一处翻译问题及英文版可能的一处错误...
  9. MySQL--mysqldump的权限说明
  10. 微型计算机机箱内的硬件,微型计算机系统硬件组成及外设认识
  11. 网络工程师考试-计算机网络笔记
  12. Python中关于with open file as 的用法
  13. Synergy Mac和Win键盘映射
  14. vue form表单数据提交
  15. Julia 数据科学应用
  16. 一台汽车在新上市之前需要经历多少考验,才有资格驶向我们?
  17. Scrum板与Kanban如何抉择?敏捷工具:czsva板与按照mgzaqbpe
  18. 《Al安全之对抗样本入门》读书笔记 2
  19. 2021_WWW_Self-Supervised Multi-Channel Hypergraph Convolutional Network for Social Recommendation
  20. 家畜育种学(题库及答案)

热门文章

  1. CrystalQuartz实现Quartz的window服务的远程管理
  2. developer.biao.daily.20140628
  3. 高通camera结构(摄像头基础介绍)
  4. c语言 switch case 字符串,C++ switch case详解
  5. typedef和define
  6. 由矩阵运算来看初等矩阵的左乘右乘所影响到矩阵的行列变换的本质
  7. LHS查询 RHS查询
  8. Cisco 路由器密码重置步骤
  9. 路由器密码重置(不是适用于所有有些启动顺序数字不一样)
  10. ECS云服务器搭建自己的博客网站worldpress