碳基体

奋斗在产品安全第一线的安全妹子

iOS平台游戏安全小议

--------------------------------------------------废话部分

去年年会上,公司宣讲自己的发展道路,说要抢占“四屏”,即PC机(个人电脑)、电视机、大屏幕(电影)和智能移动终端(智能手机,iOS平台,Andriod平台),并且特别强调移动平台,原因是拥有上网手机的用户比拥有电脑的人多的多,而且手机上网群体更容易进行支付行为,这一块市场,对儿童类游戏就是蓝海,充满着无线商机。

于是公司快速成立并扩大无线部,并火速推出多款游戏,摩尔庄园,摩尔卡丁车,摩尔宝宝,淘米妈妈(儿童上网行为管理应用),虽然就个人而言,都带着中国特色的山寨风,但其中几款的品质的确不错。

作为一个奋斗在游戏安全第一线的苦逼妹子,我评价游戏是否受欢迎的标准不是下载量,不是在线人数,不是游戏收益,而是游戏是否存在盈利性质的外挂

论坛有作弊攻略了,表示游戏已经初步流行;

论坛需要支付货币才能看攻略,表示游戏拥有很大的用户群;

淘宝上开始贩卖外挂了,表示游戏项目组可以拿到不菲的奖金了(作为支撑部门悲催的我,每次都是十分眼红的瞅着他们领奖)。

而我们,游戏不受欢迎没有年终奖,游戏受欢迎则会不停的被骚扰。

悲催的观察数据包,rtx粘贴一段话,xx总监收到小孩投诉,伏魔塔有人秒杀怀疑使用加速外挂。。。就得屁颠屁颠的去调查。其实就公司内部,都有很多人搞不清楚我们到底是干嘛的,连小孩抱怨运营活动很难中奖都转给我们处理,tnnd。

好了,停止抱怨。

-------------------------------------------------------------------------------------------------------------------------------------------------正文

公司iOS游戏上线,主要面临着这些威胁:

(1)黑卡,比官方卖的便宜非常多倍,淘宝一搜一堆,(普遍,危害大)

(2)IAP破解(IAP是in-apple purpase游戏内购破解),就是使得游戏中的消费操作变得免费,免费玩新关卡,免费获得道具(普遍,危害大)

(3)IPA破解(ipa是游戏安装包的格式),就是破解游戏安装包,不需要收费就可以安装(普遍,危害大)

(4)游戏存档修改,历史悠久的作弊方式,从第一款游戏的诞生,就有人这么干(普遍,危害大)

(5)游戏通信封包劫持篡改(常见,危害大)

(6)游戏进程调试(门槛高,但危害大)

一、黑卡

原理:绝大多是是利用被窃信用卡进行充值,中国区所有iOS应用均受害

防御:走法务处理流程,到淘宝知识产权平台进行申诉处理,强制下架,效果非常明显


二、IAP破解

原理:使用游戏内购破解工具,修改内购返回的交易状态,以欺骗软件购买成功。以著名内购补丁iap craker为例,其实该软件的使用说明已经很清楚的告诉了大家是利用懒惰的程序员没有二次验证保留在苹果服务器上的付费收据

 (红线部分的中文意思是:只要游戏服务器不去验证苹果服务器上的付费收据,就能使你不花钱白拿东西)

其实iOS开发者指导文档中已经很明确的提醒程序猿了,look

(红线部分的中文意思是:当应用依赖于独立的服务器来提供订阅、可下载内容或服务时,必须额外验证保留在苹果服务器上的付费收据)

防御:将用户购买的收据上传到server,由其向App store做二次确认,如果检验失败,则将该用户(该设备)加入黑名单,今后其所有向服务器的请求都将被拒绝。(苹果都让你验证了,做外挂的都提醒了,那就二次验证吧)

 

三、IPA破解

原理:去除掉DRM数字签名验证机制,取消ipa对apple帐号的绑定,允许没有合法签名的程序在设备上运行。

(DRM原理:对所保护的内容建立两把密钥,一把公钥,一把私钥,公钥用来加密,私钥用来解密。。对于一个正版APP来说,APP本身含有公钥,私钥是用于购买APP的账号在电脑授权之后得到的证书,只有公钥和私钥相匹配,软件才能正常安装运行)

去除原理:游戏在正常运行的时候,在内存中是处于一种解密状态,可以利用调试工具gdb把正在内存中运行的软件镜像完全复制下来,保存为文件。另外还要利用软件otool,来查看游戏的一些信息,比如文件头,从何处开始加密,等等。。。。最后把正常的文件头复制的解密镜像文件进行合并,使之能够正常执行,最后还要用ldid做一下签名就成功了。

方法:花钱买正版游戏(要有一份能够正常运行的被正式授的游戏在破解的机器上被执行),用破解工具破解,分发给大家(有点雷峰)

防御很无助呀!求方法!!!!!!!!!!!!!!


四、游戏存档修改(老少皆宜的作弊方法)

原理:逻辑判断完全依赖于客户端的配置文件、数据文件啥的

没什么好解释的了,找到安装程序所在文件夹,可着劲的改,直接在iphone/ipad/itouch上改(ifile真好用),传到PC机上用iFunBox改再同步回去。甚至不会改,也不要紧。只要游戏够火,修改补丁包要多少有多少(当然越火,越要钱)安装后傻瓜式一键操作。

 (水果忍者的修改补丁包)

防御:两个字“加密”,当然破解是迟早的问题(安全措施只是提高门槛而已),关键数据拆分后再加密存放就很能提高作弊门槛。

碎碎念:不是瞎说,真的,很多iOS游戏的存档都是明文的。

见过不少收费软件,收费的判断就依赖于一个明文配置文件是否有收费这一个字段;

见过不少游戏,将用户数据直接用plist(iOS配置文件的格式)格式存储,该格式用plist编辑器就可以查看;还有的只是将配置文件的后缀名改成dat的格式存储(dat文件直接打开是乱码),简直太傻了,然道不知道玩家可以改文件后缀名吗?改为plist不就又明文了吗???


五、游戏通信包劫持篡改

原理:也是老掉牙的网络游戏作弊方法。PC游戏一般都是在本机上修改数据包,而移动设备屏幕太小,操作不方便。于是得想办法使得数据包经过PC机,在PC机上修改。改道的方法也很多啦,使用代理上网,共享PC网络,远程登录。

防御:还是两个字“加密”。无论是哪个平台的游戏,客户端游戏,flash游戏,手机游戏,其实只要是联网的。安全两核心之一就是应用层协议安全(另一个是业务逻辑安全).

协议安全依赖于协议的加密算法,协议结构的混淆(登录包可以做比较复杂的混淆而不太影响性能)。不少公司主要是预防

1. 游戏协议被破解,制作成脱机挂(完全脱离游戏客户端程序,可以与游戏服务器自由通讯的外挂程序)

2. 篡改游戏封包中的重要数值来欺骗服务端(例如篡改封包中对应的游戏货币数值)

3. 嗅探和协议破解工具获得封包中的重要数值


一般公司的防御,简单来说就是:

  1. 对提交给服务器的数据做有效性验证(例如没有购买记录却拥有大量游戏内货币)
  2. 对整个游戏封包计算CRC校验值并附加到序列号加密算法中,对发送序列号异常封包的操作给以掉线措施。




六、游戏进程调试

原理:其实目的也是修改,修改计算逻辑、游戏数据啥的,该方法的难点就是找到游戏修改点。但也有迹可寻。ARM CPU 有个特性便是一些加减计算要传送到CPU寄存器(register) 进行,因此你会经常看到这些要找的数据会先从内存用LDR 指令装载到寄存器, 经过一些计算(加或减)后及防溢位判断后便用STR 指令存储这寄存器回内存。    另外由于这些程式大多是用 Objective C 或 C++ 语言写成,这些程序员会用一些详细的函数名,例如带有 Money, Price, Gold, Exp, Item, Life, Level 等。    利用这两点便可以将程式锁定在某些函数上,再利用 gdb 调试工具暂停在某些点一步一步地单步执行及查看一些寄存器,印证是否与你要找的数据是否有关。

方法

第一步:移动终端安装游戏破解版本(未破解的不能反汇编)

第二步:在pc机上使远程登录到移动终端(移动终端需要开启SSH服务)

Windows可以使用PuTTY远程登录;Mac/Linux直接使用ssh root@x.x.x.x

(越狱机的默认帐号root:alpine,mobile:alpine为了安全,一定要改掉哦)

第三步:采用静态反汇编并配合动态调试并修改源程序。(工具:otool,linker,assembler,gdb)

第四步:修改源程序后重新签名打包生成完整的安装包(工具: Idid)


注:该种方法使用门槛高,一般为专业(或具备破解知识)的外挂制作者使用,生成完整可用的游戏破解包,然后共享或贩卖。


防御:代码混淆,将源码相关的字符,变量函数,等替换成无意义的字符


七、其他

还有一些其他的办法在游戏中作弊,调整时钟,常用于判断逻辑依赖于本地时钟的游戏。比如说游戏中,如果苹果的成长需要1个小时,你只需要将时钟拨快一个小时就好。

总之,各种作弊方法,防不胜防,应对这些,比较滞后但可以亡羊补牢的方法就是对玩家在游戏中的游戏行为,特别是消费收入数值进行监控,以随时发现异常情况。





来源:碳基体

评论