最近我的遊戲被黑了,一個用戶向服務器提交了一個不可能的分數。評分是通過驗證校驗和和正確的數據提交的。如何驗證POST數據是否使用正確的SHA1簽名從Android應用發送?
我確信用戶必須對我的APK文件進行反向設計才能找到POST請求。
現在我想知道什麼是防止這種情況再次發生的好方法,我想過驗證應用程序的SHA1簽名。也許這樣我可以確保該應用程序由我簽名,而不是該應用程序的反向工程和更改版本。
這可能嗎?或者是否有更好的解決方案來解決這個問題?
我正在使用LibGDX。
最近我的遊戲被黑了,一個用戶向服務器提交了一個不可能的分數。評分是通過驗證校驗和和正確的數據提交的。如何驗證POST數據是否使用正確的SHA1簽名從Android應用發送?
我確信用戶必須對我的APK文件進行反向設計才能找到POST請求。
現在我想知道什麼是防止這種情況再次發生的好方法,我想過驗證應用程序的SHA1簽名。也許這樣我可以確保該應用程序由我簽名,而不是該應用程序的反向工程和更改版本。
這可能嗎?或者是否有更好的解決方案來解決這個問題?
我正在使用LibGDX。
驗證您的應用程序的完整性是不夠的,因爲請求可能很容易在應用程序外部僞造或在內存中使用根植的android環境在內存中修改。更多,你不能完全避免它。
這是所有在您的控制之外的計算機上運行的所有應用程序(所有客戶端應用程序)共享的問題。你永遠不能相信來自他們的數據。
,我可以看到它,你有幾種選擇:
乾杯,
,你就必須上傳整個APK並在服務器上進行檢查。這不是一個切實可行的解決方案。
唯一安全的android應用程序是一個純粹的終端應用程序,這意味着你必須做一個服務器上的所有計算。大多數情況下,這是不可能的,因爲延遲。
這就是我們的Android開發人員必須忍受的原因:一個應用程序不是100%安全的。
但你可以接近它。
您可能想要閱讀Security with HTTPS and SSL保護您的溝通的指南。
而且你要確保你的客戶是難以破解:android app piracy prevention和Combating Android App Piracy: Xposed
在你的情況,你還需要實現服務器端請求驗證: 如果你有一個遊戲服務器方面,用戶可能有一個帳戶。如果用戶發送明顯不可能的分數,則自動忽略該請求並禁止該用戶(和他的ip)。 (但也要記住,這絕不應該發生在有效請求上,否則用戶可能會生氣並停止播放。)
1)使用code obfuscation爲前。 Proguard的。這種工具不僅適用於Java。 但要小心 - 混淆代碼可能會運行緩慢或包含其他錯誤。
2)添加App Licencing檢查(這將檢查與谷歌Play應用程序簽名):
觀看這部影片與關注: https://www.youtube.com/watch?v=TnSNCXR9fbY 我記得他提到在運行時使用,以驗證工藝的應用程序未被黑客入侵或修改(壓縮檢查等)。 3)確保您的應用程序/服務器僅使用現代加密套件的安全連接(SSL/TLS)。這將緩解降級攻擊。
您可以使用此發生器建立配置了現代化的加密套件爲您的服務器: https://mozilla.github.io/server-side-tls/ssl-config-generator/
您也可以使用證書束縛在客戶端 - 這將減輕權威的攻擊。
請勿使用純HTTP連接。
4)使用某種要求籤署從自己的文件(如Amazon AWS一樣) 你可以得到核心理念。 http://docs.aws.amazon.com/general/latest/gr/sigv4_signing.html
另外this article應該是有幫助的。
5)通過添加運行時間檢查,禁止在ROOT'ed設備上使用您的應用程序。由於使用了固定電話,因此更容易破解或分析您的應用。
6)您可以通過在您的在線遊戲中添加禁止系統來減少欺詐行爲 - 如果有人破解了您的應用並向您的服務器發送了錯誤的數據=>將此用戶添加到服務器端禁止列表中(通過IP或用戶ID等)。可能將用戶暫時添加到此列表中(例如24小時,7天)
7)+如果您使用Json/XML作爲網絡層的數據格式,請嘗試使用二進制格式,如Protocol Buffers。二進制序列化格式更有效且難以反向工程。
非常不同意#5。 – WhoIsJohnDoe
@WhoIsJohnDoe請描述你爲什麼這麼想? – dasar
有足夠的有效用例來爲設備生根。我瞭解其背後的邏輯,但我仍然不同意禁止部分用戶羣,因爲「這很容易」。 – WhoIsJohnDoe
您可以更好地模糊您的代碼,並使用一些非常模糊的祕密來簽署您的請求。有了這個,你可以提高安全性。
但是,如果你所有的遊戲運行在客戶端上,它不能完全安全。因爲你用什麼簽名並不重要,如果你在客戶端使用它,這意味着你在客戶端擁有祕密或私鑰,然後它可以被黑客入侵。
爲了使它更安全,您需要在服務器中包含一些遊戲邏輯,然後在該邏輯中控制用戶不作弊。
他會在帖子請求中找到額外的東西,他用網絡嗅探器無法找到什麼? – greenapps
@greenapps校驗和 – Z0q
在http頭中添加字段。 – zakaiter