在打造出一款優(yōu)秀的游戲后,開(kāi)發(fā)者們都希望能夠網(wǎng)羅四海玩家,并為他們帶去流暢安心的預(yù)期體驗(yàn)。不過(guò),開(kāi)發(fā)者們也同時(shí)面臨著喜憂參半的困境:游戲越受歡迎,就越容易引起攻擊者和濫用者的注意。人們會(huì)出于各種目的嘗試篡改您的游戲或者濫用您的分發(fā)及獲利渠道:其中一些可能相對(duì)無(wú)害,而另一些則可能會(huì)對(duì)您的玩家和業(yè)務(wù)產(chǎn)生負(fù)面影響。
因此,制定正確的反濫用策略并根據(jù)目標(biāo)迅速采取行動(dòng)非常重要。雖然目前還沒(méi)有方案能夠完美解決游戲的安全問(wèn)題,不過(guò)我們建議大家在規(guī)劃整體戰(zhàn)略時(shí),不妨參考以下推薦的Google Play工具和服務(wù),為您的游戲和玩家?guī)ジ鼜?qiáng)大的安全防護(hù)。
完整性
對(duì)游戲和玩家的攻擊通常來(lái)自不受信任的環(huán)境,例如修改后的APK、模擬器、遭到入侵或者獲得root權(quán)限的設(shè)備。盡管這些環(huán)境本身可能并無(wú)害,但是通過(guò)檢測(cè)它們,您便可以依據(jù)自身的目標(biāo)為游戲選擇最佳的應(yīng)對(duì)方案。例如,阻止盜版者體驗(yàn)付費(fèi)游戲;或者,如果是免費(fèi)網(wǎng)絡(luò)游戲,您可能會(huì)想把所有疑似使用模擬器的玩家全部轉(zhuǎn)移到同一個(gè)服務(wù)器上。
Google Play提供了許多適用于網(wǎng)絡(luò)游戲的API,讓您能夠更加輕松地發(fā)現(xiàn)濫用問(wèn)題并采取正確的應(yīng)對(duì)措施。此外,Google Play還新推出了一款自動(dòng)完整性保護(hù)的開(kāi)發(fā)者預(yù)覽版工具,以減少單機(jī)/網(wǎng)絡(luò)游戲的二次打包問(wèn)題。
在服務(wù)器端手動(dòng)檢查完整性
Google Play應(yīng)用許可服務(wù)能夠確保玩家使用從Google Play安裝的未經(jīng)修改的二進(jìn)制文件。SafetyNet attestation則可用于評(píng)估運(yùn)行設(shè)備的狀態(tài)。
Google Play應(yīng)用許可服務(wù)
https://developer.android.google.cn/google/play/licensing
SafetyNet attestation
https://developer.android.google.cn/training/safetynet/attestation.html
開(kāi)發(fā)者可將這些檢查集成到一項(xiàng)或多項(xiàng)關(guān)鍵操作(如啟動(dòng)、登錄、匹配、購(gòu)買等)上,以便能夠在由服務(wù)器驅(qū)動(dòng)的網(wǎng)絡(luò)游戲內(nèi)順利運(yùn)行這些檢查。如果在客戶端執(zhí)行檢查卻不與關(guān)鍵操作進(jìn)行綁定,將很容易被攻擊者移除。建議各位開(kāi)發(fā)者按照下列步驟,將檢查逐步集成到游戲中:
生成Nonce:在您的服務(wù)器上生成一個(gè)Nonce以啟動(dòng)檢查。Nonce是您為各項(xiàng)檢查附加的唯一隨機(jī)字符串,它可確保攻擊者難以在重放攻擊中復(fù)制一個(gè)正響應(yīng)。請(qǐng)盡量使用特定于請(qǐng)求的信息(如用戶ID的哈希值),以確保不會(huì)重復(fù)使用同一個(gè)Nonce;
請(qǐng)求響應(yīng):請(qǐng)將生成的Nonce附加到游戲檢查中,并調(diào)用應(yīng)用許可和SafetyNet API。您必須使用API密鑰才能集成SafetyNet,且每天的默認(rèn)請(qǐng)求配額為10,000次。如果您的應(yīng)用需要增加配額,請(qǐng)?zhí)岢稣?qǐng)求;
接收響應(yīng):API與Google服務(wù)器進(jìn)行通信時(shí),Google服務(wù)器通過(guò)返回一個(gè)響應(yīng),告知您當(dāng)前用戶是否從Google Play獲得應(yīng)用許可,以及設(shè)備是否為通過(guò)兼容性測(cè)試的Android實(shí)體設(shè)備。為避免過(guò)度調(diào)用,SafetyNet有時(shí)會(huì)出現(xiàn)響應(yīng)超時(shí)的情況,因此,還請(qǐng)您針對(duì)該意外情況進(jìn)行規(guī)劃并做好相應(yīng)的準(zhǔn)備;
傳輸響應(yīng):您的游戲會(huì)將Google響應(yīng)和Nonce一同發(fā)送回您的服務(wù)器上。請(qǐng)務(wù)必在服務(wù)器端執(zhí)行驗(yàn)證流程,使攻擊者更難從游戲中移除檢查;
評(píng)估響應(yīng):您的服務(wù)器應(yīng)確保所有內(nèi)容有效,包括Nonce、應(yīng)用包名稱及哈希值、時(shí)間戳,然后再根據(jù)Google的響應(yīng)對(duì)許可與設(shè)備進(jìn)行評(píng)估。例如,若用戶擁有有效許可且設(shè)備可信,則允許用戶繼續(xù)游戲。
想知道這些API在游戲中的實(shí)戰(zhàn)表現(xiàn)嗎?請(qǐng)收看上方視頻,聆聽(tīng)來(lái)自Ravio和Supercell的精彩案例分享。Ravio利用上述API優(yōu)化了《憤怒的小鳥(niǎo)2》玩家排行榜;Supercell則在《荒野亂斗》beta版發(fā)布前大幅削減了非授權(quán)玩家的數(shù)量。
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
《憤怒的小鳥(niǎo)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
在客戶端自動(dòng)檢查完整性
這些API并不適用于所有類型的游戲和用例。您的游戲可能主要在離線環(huán)境下運(yùn)行,就像許多付費(fèi)游戲和單人游戲一樣。為此,我們正在積極尋找資深合作伙伴,邀請(qǐng)他們加入Google Play自動(dòng)完整性保護(hù)開(kāi)發(fā)者預(yù)覽計(jì)劃,攜手為僅具備輕量服務(wù)器集成或者完全無(wú)服務(wù)器的游戲提供更好的支持。
Google Play自動(dòng)完整性保護(hù)
http://g.co/play/integrityprotection
對(duì)于加入該開(kāi)發(fā)者預(yù)覽計(jì)劃的游戲,當(dāng)您將游戲上傳至Google Play Console管理中心后,Google Play將以您的身份為代碼添加一項(xiàng)證書(shū)檢查以及反篡改保護(hù)。直至測(cè)試之前,您不必進(jìn)行任何額外的開(kāi)發(fā)工作,只需通過(guò)Android App Bundle發(fā)布游戲即可。這些保護(hù)措施的優(yōu)勢(shì)在于,它們會(huì)隨著時(shí)間的推移自行優(yōu)化與改進(jìn),并不需要開(kāi)發(fā)者進(jìn)行任何操作。此外,反篡改保護(hù)也可幫助網(wǎng)絡(luò)游戲減少二次打包的問(wèn)題。如果您希望為自己的游戲添加這些保護(hù)措施,歡迎您前往官網(wǎng)提交信息。
Android App Bundle
https://developer.android.google.cn/platform/technology/app-bundle
前往官網(wǎng)提交信息
http://g.co/play/integrityprotection
公平性
對(duì)于提供應(yīng)用內(nèi)購(gòu)買的游戲來(lái)說(shuō),公平的"游戲內(nèi)經(jīng)濟(jì)體系"不僅有助于確保最佳的整體玩家體驗(yàn),還能為您帶來(lái)持續(xù)的業(yè)務(wù)增長(zhǎng)。為了在游戲中取得不正當(dāng)優(yōu)勢(shì)或謀取經(jīng)濟(jì)利益,不良行為者可能會(huì)以某些方式操控交易或商品,這將會(huì)對(duì)其他玩家和您的業(yè)務(wù)造成不良影響。您可以在游戲內(nèi)集成由Google Play Billing提供的豐富工具,幫助Google檢測(cè)并打擊欺詐性交易和退款濫用行為。
Google Play Billing
https://developer.android.google.cn/distribute/play-billing
驗(yàn)證購(gòu)買
在應(yīng)用設(shè)計(jì)允許的范圍內(nèi),請(qǐng)您盡可能將敏感數(shù)據(jù)和邏輯移至后端服務(wù)器,其中包括應(yīng)用內(nèi)購(gòu)驗(yàn)證。客戶端中的數(shù)據(jù)和邏輯越多,就越容易遭到逆向工程攻擊。當(dāng)您驗(yàn)證購(gòu)買時(shí),請(qǐng)向游戲服務(wù)器發(fā)送購(gòu)買ID,并確認(rèn)該ID之前并未被使用過(guò)。每次向用戶提供所購(gòu)商品的訪問(wèn)權(quán)限之前,請(qǐng)務(wù)必先通過(guò)Play Developer API向Google Play驗(yàn)證該購(gòu)買交易的合法性。
此外,您還可以在啟動(dòng)購(gòu)買時(shí)將經(jīng)過(guò)混淆處理的帳號(hào)和個(gè)人資料ID傳遞給Google Play,從而確保購(gòu)買交易歸因于同一個(gè)游戲賬號(hào)或角色個(gè)人資料。當(dāng)您驗(yàn)證購(gòu)買時(shí),請(qǐng)向后臺(tái)端服務(wù)器發(fā)送這些ID,以確保商品與發(fā)起購(gòu)買交易的用戶正確匹配。
購(gòu)買交易歸因
https://developer.android.google.cn/google/play/billing/developer-payload#attribute
虛假購(gòu)買
為了提高Google Play檢測(cè)和阻止游戲中欺詐性購(gòu)買的能力,我們建議您在每個(gè)購(gòu)買請(qǐng)求中加入一些有關(guān)購(gòu)買者的非個(gè)人識(shí)別信息。具體來(lái)說(shuō),您可以使用這些方法將經(jīng)過(guò)混淆處理的賬戶ID附加到用戶的每個(gè)購(gòu)買請(qǐng)求中,如果您開(kāi)發(fā)了多個(gè)游戲,則可在所有游戲內(nèi)再添加一個(gè)可代表用戶的個(gè)人資料ID。Google的風(fēng)險(xiǎn)引擎會(huì)根據(jù)這些ID評(píng)估當(dāng)前交易是否屬于欺詐性購(gòu)買,并在二次銷售行為發(fā)生前加以阻止。我們已經(jīng)從頂尖開(kāi)發(fā)者那里獲得了許多積極的反饋:在使用該Google Play Billing特性后,欺詐事件最高減少了30%,退款損失最高降低了50%。
使用這些方法
https://developer.android.google.cn/google/play/billing/security#fraud
退款商品的狀態(tài)
現(xiàn)在,游戲可通過(guò)Google Play的一項(xiàng)測(cè)試特性提供更多有關(guān)應(yīng)用內(nèi)購(gòu)買的信息。Play會(huì)根據(jù)這些信息制定出更為合理的退款決策。該特性可幫助我們簡(jiǎn)化退款流程并減少濫用行為的發(fā)生,例如更輕易地識(shí)別對(duì)已用商品多次申請(qǐng)退款的用戶。當(dāng)用戶提交退款請(qǐng)求時(shí),Google Play會(huì)向您的游戲傳遞該請(qǐng)求的相關(guān)信息,包括退款理由。您的游戲隨后可分享用戶所購(gòu)商品的狀態(tài),例如商品是否已被使用,然后再建議是否批準(zhǔn)此項(xiàng)請(qǐng)求。通過(guò)這些信息,Google Play可以幫您做出恰當(dāng)?shù)耐丝顩Q定。目前僅有部分合作伙伴參與了該特性的測(cè)試工作。如果您想獲取更多相關(guān)資訊或者希望我們今后能夠向更多開(kāi)發(fā)者開(kāi)放該特性,請(qǐng)咨詢您的合作伙伴經(jīng)理。
無(wú)效購(gòu)買
借助voided purchases API,您可以隨時(shí)向Google Play請(qǐng)求用戶已退款的應(yīng)用內(nèi)購(gòu)買列表。您可以根據(jù)這些信息更新用戶賬戶中的商品,移除已退款的商品或?qū)τ脩趔w驗(yàn)作出其它更改。這不僅有助于游戲內(nèi)商品的保值,還能有效防止濫用行為的發(fā)生。超過(guò)80%的頂尖開(kāi)發(fā)者已經(jīng)在自己的游戲中集成了voided purchases API,其中部分開(kāi)發(fā)者向我們反饋表示,該API為他們減少了80%的退款損失。以下為voided purchases API的一些使用技巧,希望能對(duì)您有所幫助:
請(qǐng)定期調(diào)用voided purchases API,用于更新用戶所購(gòu)項(xiàng)目列表;
從用戶賬戶移除已退款的商品;
告知用戶商品已被移除;
在收回商品失敗時(shí),請(qǐng)及時(shí)采取應(yīng)對(duì)措施。若多次失敗,請(qǐng)考慮升級(jí)響應(yīng)措施,例如禁止用戶繼續(xù)購(gòu)買;
如果用戶已經(jīng)花掉了游戲內(nèi)貨幣,可以考慮將其余額設(shè)置為負(fù)數(shù);
對(duì)于游戲內(nèi)貨幣余額為負(fù)數(shù)的賬戶,可考慮限制游戲內(nèi)功能或服務(wù)。
voided purchases API
https://developer.android.google.cn/android-publisher/voided-purchases
安全
安全是Android開(kāi)發(fā)中十分重要的話題,而且牽涉范圍廣泛,因此本文僅作簡(jiǎn)要探討。一旦攻擊者在您的游戲中發(fā)現(xiàn)漏洞并加以利用,便會(huì)給您帶來(lái)嚴(yán)重的后果,例如對(duì)玩家造成安全威脅,引發(fā)負(fù)面社會(huì)輿情,在某些情況下您甚至還需要面臨監(jiān)管機(jī)構(gòu)的罰款懲治。我們建議您在開(kāi)發(fā)過(guò)程中,遵循安全性實(shí)踐指南并依照安全清單對(duì)游戲進(jìn)行評(píng)估。與此同時(shí),請(qǐng)您務(wù)必謹(jǐn)慎處理數(shù)據(jù)、權(quán)限及網(wǎng)絡(luò)流量方面的問(wèn)題。
安全性實(shí)踐指南
https://developer.android.google.cn/topic/security/best-practices
安全清單
https://developer.android.google.cn/docs/quality-guidelines/core-app-quality#sc
第三方庫(kù)和SDK
開(kāi)發(fā)者經(jīng)常會(huì)在游戲代碼中使用大量的第三方庫(kù)和SDK,它們也帶來(lái)了嚴(yán)重的安全隱患。有些第三方庫(kù)自身含有惡意代碼,但是在大部分情況下,庫(kù)或SDK內(nèi)的安全漏洞才是最大的風(fēng)險(xiǎn)所在。開(kāi)發(fā)者應(yīng)對(duì)游戲內(nèi)所有內(nèi)容(包括第三方庫(kù)和SDK)負(fù)責(zé),所以,由第三方程序?qū)е碌陌踩珕?wèn)題自然也在您責(zé)任范圍內(nèi)。部分SDK會(huì)在開(kāi)發(fā)人員不知情的情況下引發(fā)安全問(wèn)題,為此Google Play已經(jīng)下架了數(shù)款包含問(wèn)題SDK的游戲。我們建議您在管理第三方庫(kù)和SDK時(shí),遵循以下實(shí)踐指南:
對(duì)SDK可訪問(wèn)的數(shù)據(jù)和設(shè)備信息進(jìn)行分析,并確保SDK在訪問(wèn)數(shù)據(jù)前已獲得用戶同意;
確保SDK支持最低級(jí)別的targetSdkVersion;
確保SDK無(wú)法收集不可重置的設(shè)備標(biāo)識(shí)符;
在游戲卸載后,從外部?jī)?chǔ)存移除所有SDK特定文件;
僅通過(guò)HTTPS協(xié)議向服務(wù)器傳遞信息。
請(qǐng)前往應(yīng)用成功學(xué)院,了解更多有關(guān)SDK使用方法的實(shí)踐指南。
有關(guān)SDK使用方法的實(shí)踐指南
https://playacademy.exceedlms.com/student/activity/18797-build-and-distribute-privacy-friendly-apps
Google Play安全獎(jiǎng)勵(lì)計(jì)劃
擁有大批玩家的游戲開(kāi)發(fā)者不妨申請(qǐng)加入Google Play安全獎(jiǎng)勵(lì)計(jì)劃。該漏洞賞金計(jì)劃提供了一定數(shù)額的獎(jiǎng)金,用于激勵(lì)安全研究人員發(fā)現(xiàn)并負(fù)責(zé)任地披露漏洞。您可對(duì)這些漏洞進(jìn)行修復(fù),以便為玩家長(zhǎng)期提供安全可靠的游戲環(huán)境。
Google Play安全獎(jiǎng)勵(lì)計(jì)劃
https://www.google.com/about/appsecurity/play-rewards/
小結(jié)
不良行為者是任何產(chǎn)業(yè)都無(wú)法避免的問(wèn)題,移動(dòng)游戲行業(yè)自然也不例外。不論是小風(fēng)險(xiǎn)隱患,例如玩家只想在游戲中搶占不公平的優(yōu)勢(shì),還是嚴(yán)重的安全威脅,如不法人士為謀私利惡意操控游戲和玩家,Google Play都將提供更多工具與服務(wù),幫助開(kāi)發(fā)者采取正確的應(yīng)對(duì)措施并制定全方位反濫用策略,以求最大程度降低玩家和游戲業(yè)務(wù)的風(fēng)險(xiǎn)。歡迎各位開(kāi)發(fā)者向我們分享您的反饋與建議,協(xié)助我們進(jìn)一步優(yōu)化產(chǎn)品或彌補(bǔ)不足之處。