【Qoo TGDF2015】簡易 APK 防護,新兵上手攻略
Mr. Qoo

TONY_000

以下為TGDF官方新聞稿

談起遊戲開發,許多獨立團隊更感興趣的,應該是遊戲企劃、或是技術性的設計問題,「資安」是往往最常被忽略,卻最常發生的問題。「儘管遊戲做得很好,APK(Android app 程式文件 )卻常常破解,導致一連串的悲劇發生」。Infini Studio 程式設計師 Tonypai 在本次 TGDF 分享「獨立開發新手也能做的簡易 APK 內容防護措施」,帶來了幾項簡單的弱點示範以及防禦手法。 遊戲開發有了成效之後,遊戲開發者要擔心的事情反而是越來越多,最典型的有三點如下:

1 .遊戲做不完
2.遊戲沒人買
3.遊戲被破解。

最常見的破解行為有這些:

1.去廣告(更甚者或置換成自己的廣告)
2.解除付費關卡(如:Implosion)
3.取得原始碼素材(如:神魔之塔)
4.修改遊戲邏輯。

此外,「最多人使用的工作,通常就最有問題」,Tonypai 提到約有超過一半的人開發遊戲都是透過 Unity,Android 系統正存在最多安全疑慮問題,他列舉了一些最常使用的工具像是:apktool、ilspy、ildasm、signapk、adb、LINQPad、Crypto Obfuscator、de4dot。開發環境則有:JDK、Silverlight SDK、.NET Framework 4、Android SDK、Mobile USB Driver。

破解情境舉例

情境一:無任何防護

情境一屬於遊戲剛開發階段,沒有任何防護措施下所發生的情形。Tonypai 模擬手機購買的行為,先將已編譯好的程式語言還原到未編譯的狀態,找出程序語言的原始碼 (decompiler),隨即出現許多 APK 的資訊檔,以及反編譯的內容,不過,最可怕的就在第二步驟——分析,APK 被 Unity 編譯出來之後,dll 檔通常是可以被完整反編譯的,因此原始碼很容易有曝光的危險性。 接下來就是匯出 IL 檔,再驗證(如果對 IL 語言有困難,可以使用 LINQPad 透過 cshop 來寫語法,隨即會自動整理出 IL 語法),緊接著的步驟是將 IL 檔編回 dll 檔,出現「_modified」代表已經完成編譯,再來就是 build 打包的動作,之後就可以開始編譯成要釋出的 APK 檔,在 dist 就可以編出檔案,但是前提是沒有簽署金鑰是無法安裝在手機上的,而最後的動作就是安裝修改過的 APK。

情境一 demo 過程

情境二:藏 Coroutine

由於寫在 Coroutine 的語法無法被反編譯,因此這是一個可以延緩攻擊的方式,但也不完全是如此。情境二的做法與情境一基本上很多是重疊的。同樣 Decompile、Analytic,但是在 check variable 的部分就有些改變。

情境二 demo 過程

情境三:代碼混淆(利用 Crypto Obfuscator)

代碼混淆基本上是改 method name 和 class name,但 Tonypai 建議還是以 method name 還有其他名稱為主,Crypto Obfuscator 這個軟體能夠修改 method name 達到混淆的動作。 最後 Tonypai 認為在資安問題這一塊,道高一尺、魔高一丈,目前有許多的工具可以讓你去處理資安問題,但是在座各位都是遊戲開發者,資安這一塊就交給專家去處理,別花時間,甚至是花錢處理。資安高深莫測,沒有絕對安全,只能延緩破解,多分享多交流是 Tonypai 給大家的建議。

在QooApp開啟