Group of Software Security In Progress

GoSSIP @ LoCCS.Shanghai Jiao Tong University

Swords and Shields – a Study of Mobile Game Hacks and Existing Defenses

论文下载

分析mobile game hack的现状

Hacking Tools

General Hacking Tools

通用的hacking tool分两类:memory editing (GameKiller, GameCIH, and GameGuardian); local file editing (CheatDroid)

Specific Hacking Tools

还有一些为指定游戏设计的工具:例如Xmodgames,包含32个游戏的重打包版本,重打包的版本去除了原有的保护。

Analysis Techniques

Traffic Analysis

通过中间人,网络代理等来修改一些关键网络数据(金币,分数等)。难点如下:首先需要强制让APP的网络数据走分析者的代理。之后数据可能会加密。最后,网络数据可能还包括广告或数据统计的数据包,需要分析者区分。

Decompilers and Debugging Tools

反编译工具包括:dex2jar, ILSpy and JD-GUI。调试工具包括GDB,Android SSL Trustkiller等。

分析现有游戏的保护状况

  • 文章从四个方面来评估保护方法的好坏:安全,部署难度,网络流量消耗,运行效率。
  • 攻击场景:攻击者可以ROOT手机,攻击者分两类:业余选手,只会用现有工具。专业选手,可以深度分析。
  • 分析方法分四步:1)用现有工具改内存或本地文件 2)分析网络流量 3)静态分析 4)动态调试
  • 分析结果见table 1 和2。

Fig

  • 经分析,有如下几个主要防护手段:

Local Resource Protection

34%的游戏有如下保护手段:加密内存中的数据,检测内存修改行为,加密文件内数据。

Network Protections

26% HTTPS,加密网络数据,pinning,签名。还发现部分游戏网络数据不会通过代理。

Code Obfuscation and Hiding

24% 混淆

Compilation into Native Code

48% 用so

Client-Server Sync

25% 会一直同步服务器与本地的数据。

case study

Basic Memory Protection

地铁酷跑,将金币的数值与一个随机数异或,再存入内存,导致在内存中不容易定位到该数字。

Local File Protection

ZigZag,会将闯关数加密存在本地文件,因此无法直接在本地文件中搜索该数字。但是由于没保护内存中的数字,因此可以通过修改内存来修改闯关数。

Basic HTTPS

Rock Heroes用HTTPS,但是可以通过修改数据包欺骗服务器。同时作者发现这个游戏的排行榜有很多高分明显是假的。

HTTPS with Additional Protections

Game of War会做证书pinning,但是可以通过HOOK掉相关API来实现中间人。

Message Signing

Dragon City在native库中计算数据的SHA-256 HMAC作为签名。通过动态调试,在内存中发现key。最后修改数据包成功。

Communicating using Customized Protocol

Army of Toys用自定义协议,通过逆向分析,发现有双层加密。

Code Obfuscation

Kill Shot proguard混淆。

Code Hiding

Army of Toys会动态加载

Compilation into Native Code

Angry Birds会将加密函数放在SO中。作者找到了加密函数和密钥AES:StartEncryption from libAngryBirdsClassic.so.

Partial Client-Server Sync

Trivia Crack 会和服务器同步信息,但是本地还是有一些重要的计算,例如是否正确,金币是否足够等。

Full Client-Server Sync

Army of Toys时刻与服务器同步,且计算都在服务器,即使作者解密了自定义协议,还是无法hack成功。

建议

  • Local resource protection易部署,且没什么效率损耗。
  • Code obfuscation以及native code compilation依赖平台,如果开发平台支持的话也很简单,且会加速执行。
  • Traffic protection用HTTPS的话很简单,但是自定义一个好的协议就比较烦
  • Client-server sync最复杂。且效率低。

保护强度总结在table 3。

Fig