作者 / Dom Elliott, Google Play 产品经理

在打造出一款优秀的游戏后,开发者们都希望能够网罗四海玩家,并为他们带去流畅安心的预期体验。不过,开发者们也同时面临着喜忧参半的困境: 游戏越受欢迎,就越容易引起攻击者和滥用者的注意。人们会出于各种目的尝试篡改您的游戏或者滥用您的分发及获利渠道: 其中一些可能相对无害,而另一些则可能会对您的玩家和业务产生负面影响。

因此,制定正确的反滥用策略并根据目标迅速采取行动非常重要。虽然目前还没有方案能够完美解决游戏的安全问题,不过我们建议大家在规划整体战略时,不妨参考以下推荐的 Google Play 工具和服务,为您的游戏和玩家带去更强大的安全防护。

完整性

对游戏和玩家的攻击通常来自不受信任的环境,例如修改后的 APK、模拟器、遭到入侵或者获得 root 权限的设备。尽管这些环境本身可能并无害,但是通过检测它们,您便可以依据自身的目标为游戏选择最佳的应对方案。例如,阻止盗版者体验付费游戏;或者,如果是免费网络游戏,您可能会想把所有疑似使用模拟器的玩家全部转移到同一个服务器上。

△ 该视频所推荐的 Google Play 工具可帮助您有效保护游戏的完整性

  • 腾讯视频链接

    https://v.qq.com/x/page/n0947ubr1rs.html

  • Bilibili 视频链接

    https://www.bilibili.com/video/BV1q5411t78h/

Google Play 提供了许多适用于网络游戏的 API,让您能够更加轻松地发现滥用问题并采取正确的应对措施。此外,Google Play 还新推出了一款自动完整性保护的开发者预览版工具,以减少单机/网络游戏的二次打包问题。

在服务器端手动检查完整性

Google Play 应用许可服务能够确保玩家使用从 Google Play 安装的未经修改的二进制文件。SafetyNet attestation 则可用于评估运行设备的状态。

  • Google Play 应用许可服务

    https://developer.android.google.cn/google/play/licensing

  • SafetyNet attestation

    https://developer.android.google.cn/training/safetynet/attestation.html

开发者可将这些检查集成到一项或多项关键操作 (如启动、登录、匹配、购买等) 上,以便能够在由服务器驱动的网络游戏内顺利运行这些检查。如果在客户端执行检查却不与关键操作进行绑定,将很容易被攻击者移除。建议各位开发者按照下列步骤,将检查逐步集成到游戏中:

  • 生成 Nonce: 在您的服务器上生成一个 Nonce 以启动检查。Nonce 是您为各项检查附加的唯一随机字符串,它可确保攻击者难以在重放攻击中复制一个正响应。请尽量使用特定于请求的信息 (如用户 ID 的哈希值),以确保不会重复使用同一个 Nonce;

  • 请求响应: 请将生成的 Nonce 附加到游戏检查中,并调用应用许可和 SafetyNet API。您必须使用 API 密钥才能集成 SafetyNet,且每天的默认请求配额为 10,000 次。如果您的应用需要增加配额,请提出请求;

  • 接收响应: API 与 Google 服务器进行通信时,Google 服务器通过返回一个响应,告知您当前用户是否从 Google Play 获得应用许可,以及设备是否为通过兼容性测试的 Android 实体设备。为避免过度调用,SafetyNet 有时会出现响应超时的情况,因此,还请您针对该意外情况进行规划并做好相应的准备;

  • 传输响应: 您的游戏会将 Google 响应和 Nonce 一同发送回您的服务器上。请务必在服务器端执行验证流程,使攻击者更难从游戏中移除检查;

  • 评估响应: 您的服务器应确保所有内容有效,包括 Nonce、应用包名称及哈希值、时间戳,然后再根据 Google 的响应对许可与设备进行评估。例如,若用户拥有有效许可且设备可信,则允许用户继续游戏。

想知道这些 API 在游戏中的实战表现吗?请收看上方视频,聆听来自 Ravio 和 Supercell 的精彩案例分享。Ravio 利用上述 API 优化了《愤怒的小鸟 2》玩家排行榜;Supercell 则在《荒野乱斗》beta 版发布前大幅削减了非授权玩家的数量。

  • Ravio

    https://play.google.com/store/apps/dev?id=9133452689932095671&hl=en_GB

  • Supercell

    https://play.google.com/store/apps/dev?id=6715068722362591614&hl=en_GB

  • 《愤怒的小鸟 2》

    https://play.google.com/store/apps/details?id=com.rovio.baba&hl=en_GB

  • 《荒野乱斗》

    https://play.google.com/store/apps/details?id=com.supercell.brawlstars&hl=en_GB

在客户端自动检查完整性

这些 API 并不适用于所有类型的游戏和用例。您的游戏可能主要在离线环境下运行,就像许多付费游戏和单人游戏一样。为此,我们正在积极寻找资深合作伙伴,邀请他们加入 Google Play 自动完整性保护开发者预览计划,携手为仅具备轻量服务器集成或者完全无服务器的游戏提供更好的支持。

  • Google Play 自动完整性保护

    http://g.co/play/integrityprotection

对于加入该开发者预览计划的游戏,当您将游戏上传至 Google Play Console 管理中心后,Google Play 将以您的身份为代码添加一项证书检查以及反篡改保护。直至测试之前,您不必进行任何额外的开发工作,只需通过 Android App Bundle 发布游戏即可。这些保护措施的优势在于,它们会随着时间的推移自行优化与改进,并不需要开发者进行任何操作。此外,反篡改保护也可帮助网络游戏减少二次打包的问题。如果您希望为自己的游戏添加这些保护措施,欢迎您前往官网提交信息。

  • Android App Bundle

    https://developer.android.google.cn/platform/technology/app-bundle

  • 前往官网提交信息

    http://g.co/play/integrityprotection

公平性

对于提供应用内购买的游戏来说,公平的 "游戏内经济体系" 不仅有助于确保最佳的整体玩家体验,还能为您带来持续的业务增长。为了在游戏中取得不正当优势或谋取经济利益,不良行为者可能会以某些方式操控交易或商品,这将会对其他玩家和您的业务造成不良影响。您可以在游戏内集成由 Google Play Billing 提供的丰富工具,帮助 Google 检测并打击欺诈性交易和退款滥用行为。

  • Google Play Billing

    https://developer.android.google.cn/distribute/play-billing

验证购买

在应用设计允许的范围内,请您尽可能将敏感数据和逻辑移至后端服务器,其中包括应用内购验证。客户端中的数据和逻辑越多,就越容易遭到逆向工程攻击。当您验证购买时,请向游戏服务器发送购买 ID,并确认该 ID 之前并未被使用过。每次向用户提供所购商品的访问权限之前,请务必先通过 Play Developer API 向 Google Play 验证该购买交易的合法性。

此外,您还可以在启动购买时将经过混淆处理的帐号和个人资料 ID 传递给 Google Play,从而确保购买交易归因于同一个游戏账号或角色个人资料。当您验证购买时,请向后台端服务器发送这些 ID,以确保商品与发起购买交易的用户正确匹配。

  • 购买交易归因

    https://developer.android.google.cn/google/play/billing/developer-payload#attribute

虚假购买

为了提高 Google Play 检测和阻止游戏中欺诈性购买的能力,我们建议您在每个购买请求中加入一些有关购买者的非个人识别信息。具体来说,您可以使用这些方法将经过混淆处理的账户 ID 附加到用户的每个购买请求中,如果您开发了多个游戏,则可在所有游戏内再添加一个可代表用户的个人资料 ID。Google 的风险引擎会根据这些 ID 评估当前交易是否属于欺诈性购买,并在二次销售行为发生前加以阻止。我们已经从顶尖开发者那里获得了许多积极的反馈: 在使用该 Google Play Billing 特性后,欺诈事件最高减少了 30%,退款损失最高降低了 50%。

  • 使用这些方法

    https://developer.android.google.cn/google/play/billing/security#fraud

退款商品的状态

现在,游戏可通过 Google Play 的一项测试特性提供更多有关应用内购买的信息。Play 会根据这些信息制定出更为合理的退款决策。该特性可帮助我们简化退款流程并减少滥用行为的发生,例如更轻易地识别对已用商品多次申请退款的用户。当用户提交退款请求时,Google Play 会向您的游戏传递该请求的相关信息,包括退款理由。您的游戏随后可分享用户所购商品的状态,例如商品是否已被使用,然后再建议是否批准此项请求。通过这些信息,Google Play 可以帮您做出恰当的退款决定。目前仅有部分合作伙伴参与了该特性的测试工作。如果您想获取更多相关资讯或者希望我们今后能够向更多开发者开放该特性,请咨询您的合作伙伴经理。

无效购买

借助 voided purchases API,您可以随时向 Google Play 请求用户已退款的应用内购买列表。您可以根据这些信息更新用户账户中的商品,移除已退款的商品或对用户体验作出其它更改。这不仅有助于游戏内商品的保值,还能有效防止滥用行为的发生。超过 80% 的顶尖开发者已经在自己的游戏中集成了 voided purchases API,其中部分开发者向我们反馈表示,该 API 为他们减少了 80% 的退款损失。以下为 voided purchases API 的一些使用技巧,希望能对您有所帮助:

  • 请定期调用 voided purchases API,用于更新用户所购项目列表;

  • 从用户账户移除已退款的商品;

  • 告知用户商品已被移除;

  • 在收回商品失败时,请及时采取应对措施。若多次失败,请考虑升级响应措施,例如禁止用户继续购买;

  • 如果用户已经花掉了游戏内货币,可以考虑将其余额设置为负数;

  • 对于游戏内货币余额为负数的账户,可考虑限制游戏内功能或服务。

  • voided purchases API

    https://developer.android.google.cn/android-publisher/voided-purchases

安全

安全是 Android 开发中十分重要的话题,而且牵涉范围广泛,因此本文仅作简要探讨。一旦攻击者在您的游戏中发现漏洞并加以利用,便会给您带来严重的后果,例如对玩家造成安全威胁,引发负面社会舆情,在某些情况下您甚至还需要面临监管机构的罚款惩治。我们建议您在开发过程中,遵循安全性实践指南并依照安全清单对游戏进行评估。与此同时,请您务必谨慎处理数据、权限及网络流量方面的问题。

  • 安全性实践指南

    https://developer.android.google.cn/topic/security/best-practices

  • 安全清单

    https://developer.android.google.cn/docs/quality-guidelines/core-app-quality#sc

第三方库和 SDK

开发者经常会在游戏代码中使用大量的第三方库和 SDK,它们也带来了严重的安全隐患。有些第三方库自身含有恶意代码,但是在大部分情况下,库或 SDK 内的安全漏洞才是最大的风险所在。开发者应对游戏内所有内容 (包括第三方库和 SDK) 负责,所以,由第三方程序导致的安全问题自然也在您责任范围内。部分 SDK 会在开发人员不知情的情况下引发安全问题,为此 Google Play 已经下架了数款包含问题 SDK 的游戏。我们建议您在管理第三方库和 SDK 时,遵循以下实践指南:

  • 对 SDK 可访问的数据和设备信息进行分析,并确保 SDK 在访问数据前已获得用户同意;

  • 确保 SDK 支持最低级别的 targetSdkVersion;

  • 确保 SDK 无法收集不可重置的设备标识符;

  • 在游戏卸载后,从外部储存移除所有 SDK 特定文件;

  • 仅通过 HTTPS 协议向服务器传递信息。

请前往应用成功学院,了解更多有关 SDK 使用方法的实践指南。

  • 有关 SDK 使用方法的实践指南

    https://playacademy.exceedlms.com/student/activity/18797-build-and-distribute-privacy-friendly-apps

Google Play 安全奖励计划

拥有大批玩家的游戏开发者不妨申请加入 Google Play 安全奖励计划。该漏洞赏金计划提供了一定数额的奖金,用于激励安全研究人员发现并负责任地披露漏洞。您可对这些漏洞进行修复,以便为玩家长期提供安全可靠的游戏环境。

  • Google Play 安全奖励计划

    https://www.google.com/about/appsecurity/play-rewards/

小结

不良行为者是任何产业都无法避免的问题,移动游戏行业自然也不例外。不论是小风险隐患,例如玩家只想在游戏中抢占不公平的优势,还是严重的安全威胁,如不法人士为谋私利恶意操控游戏和玩家,Google Play 都将提供更多工具与服务,帮助开发者采取正确的应对措施并制定全方位反滥用策略,以求最大程度降低玩家和游戏业务的风险。欢迎各位开发者向我们分享您的反馈与建议,协助我们进一步优化产品或弥补不足之处。

关于完整性保护您有什么看法呢?请留言分享您的见解与心得。

出海同学会

您的游戏/应用有出海市场吗?您了解如何使用 Google 提供的资源助力应用出海吗?点击下方进入 "出海同学会" 播客节目,收听出海大咖们带来的精彩分享与深度探讨!


推荐阅读

 点击屏末  | 即刻通过 Google Play 开启成功出海之旅


在 Google Play 上保护您的游戏与用户相关推荐

  1. 规划并优化能在 Google Play 上取得更大成功的游戏

    规划并优化能在 Google Play 上取得更大成功的游戏 为您介绍如何让您的游戏在 Google Play 上大获成功.

  2. 在Touch Bar上模拟吃豆豆游戏你想试试吗?

    Pac-Bar for mac是一个macOS应用,可在Touch Bar上模拟吃豆豆游戏.经典的街机体验轻松触手可及,玩转Touch Bar,你还等什么! Pac-Bar安装教程 下载软件完成后,打 ...

  3. 如何在Android上玩经典复古游戏

    Thanks to the endless gifts that Moore's Law continues to bestow upon us, cramming many of your favo ...

  4. 全球木马库Xavie分析,Google Play上有近800个木马软件

    本文讲的是全球木马库Xavie分析,Google Play上有近800个木马软件,我们最近发现了一个名为Xavier(由Trend Micro检测为ANDROIDOS_XAVIER.AXM)的Andr ...

  5. 史上最强女游戏程序员

    也许你听说过John Carmack 和Tim Sweeney等大牛的名字,而向来游戏工业都是阳盛阴衰,适逢国际妇女节,今天我为大家介绍游戏业界一位史上最强女游戏程序员:Corrinne Yu. 简历 ...

  6. 计算机游戏第72关,史上最难的游戏第72关 第72关通关攻略

    史上最难的游戏第72关 第72关通关攻略 2014-04-03 来源: 996手游网 编辑: 帽纸 () 史上最难的游戏是以暴走漫画为游戏剧情及背景,让无数小伙伴们抓狂的游戏.全新的关卡又更新了,为了 ...

  7. 一款可以在BCH链上养大熊猫的游戏——CryptoPandas

    近日,一篇关于在BCH区块链上开发类似Cryptokitties(加密猫)游戏可行性的贴子,在BCH论坛r/btc引起热烈讨论.发帖的是一名以太坊开发人员,他认为BCH区块链似乎对于创建DApp很有吸 ...

  8. 德国艺术家用99部手机成功在Google地图上制造交通阻塞

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 近日,德国一民间艺术家西蒙·韦克特成功在Google地图 ...

  9. 计算机课搞事情检讨,上微机课玩游戏检讨书

    <上微机课玩游戏检讨书>由会员分享,可在线阅读,更多相关<上微机课玩游戏检讨书(4页珍藏版)>请在人人文库网上搜索. 1.上微机课玩游戏检讨书微机课上打游戏检讨尊敬的老师:对不 ...

最新文章

  1. [转载]IPMSG(飞鸽传书)协议翻译
  2. 深度学习算法实践(基于Theano和TensorFlow)
  3. Linux内核设计与实现总结。
  4. javascript this详解
  5. 空指针 java调用_java-变量引用与重复性get调用以避免空指针
  6. linux 自动备份脚本
  7. [JAVA] IOException: Invalid byte 2 of 2-byte UTF-8 sequence(解决办法)
  8. Eclipse 安装配置总结(WST WTP)(转)
  9. P3327 约数的个数和 [约数函数性质,数论分块]
  10. AUTOSAR从入门到精通100讲(三十三)-AutoSar架构中的诊断事件管理
  11. 二分查找离左边元素最近的(可以等于)
  12. python求众数代码_python-LeetCode-求众数
  13. 利用丁香园数据生成疫情分布地图(R语言)| 博文精选
  14. android从服务检查,android开发分享Android:你如何检查是否启用了特定的AccessibilityService...
  15. 蚌埠学院官网综合新闻条目抓取
  16. opencv-api erode
  17. .desktop 桌面快捷_两个按键:手机截屏且保存至电脑桌面
  18. 每日小技巧:教您ps提示内存不足怎么办?
  19. Error: not authorized on admin to execute command
  20. 微信企业号已停止提供企业消息会话服务器,企业微信注册时显示会话服务已经被安装了怎么解决 解决攻略教程大全...

热门文章

  1. 2021年安徽省大数据与人工智能应用竞赛大数据(网络赛)-高职组赛题第三部分可视化
  2. 匿名上位机V7波形显示教程
  3. Amazon为 EC2 Auto Scaling 增加目标跟踪支持
  4. 兼容ETA4056带OVP带电池反接保护和NTC小封装DFN2*2-8线性锂电池充电芯片
  5. python在tk界面播放本地视频_如何使用python3在tkinter窗口中插入视频播放器?
  6. idea运行项目流程
  7. C++ 静态函数与虚函数的区别
  8. 机器视觉(4)-- 云台人脸追踪
  9. 5天拿到华为Java岗offer
  10. 利用requests库模拟访问博客来提升文章阅读量